@tencentcloud/roomkit-web-vue3
Version:
<h1 align="center"> TUIRoomKit</h1> Conference (TUIRoomKit) is a product suitable for multi-person audio and video conversation scenarios such as business meetings, webinars, and online education. By integrating this product, you can add room management,
203 lines (202 loc) • 5.92 kB
JavaScript
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
const Vue = require("vue");
const TUIRoomEngine = require("@tencentcloud/tuiroom-engine-js");
const Room = require("../type/Room.js");
const vue = require("../../utils/vue.js");
const stream = require("./utils/stream.js");
const user = require("./utils/user.js");
const roomState = Vue.ref(Room.RoomState.Idle);
const roomId = Vue.ref("");
const roomInfo = Vue.ref();
const userInfoObj = Vue.ref({});
const streamInfoObj = Vue.ref({});
const localUserId = Vue.ref("");
const userSearchText = Vue.ref("");
const seatApplicationRequestList = Vue.ref([]);
const seatInvitationRequest = Vue.ref(null);
const localUser = Vue.computed(
() => userInfoObj.value[localUserId.value]
);
const localStream = Vue.computed(
() => streamInfoObj.value[`${localUserId.value}_${TUIRoomEngine.TUIVideoStreamType.kCameraStream}`]
);
const userList = Vue.computed(() => {
return [...Object.values(userInfoObj.value)].sort(
user.getUserListSortComparator({ localUserId: localUserId.value })
);
});
const onSeatUserList = Vue.computed(() => {
return userList.value.filter((item) => item.isOnSeat);
});
const remoteUserList = Vue.computed(() => {
return [...Object.values(userInfoObj.value)].filter(
(item) => item.userId !== localUserId.value
);
});
const applyToOnSeatUserList = Vue.computed(() => {
const applyToOnSeatUserIdList = seatApplicationRequestList.value.map(
(item) => item.userId
);
return applyToOnSeatUserIdList.map((userId) => userInfoObj.value[userId]).sort((item1, item2) => item1.timestamp - item2.timestamp);
});
function setRoomInfo(data) {
var _a;
const newRoomInfo = { ...roomInfo.value, ...data };
roomInfo.value = newRoomInfo;
if ((_a = roomInfo.value) == null ? void 0 : _a.roomId) {
roomId.value = roomInfo.value.roomId;
}
}
function setLocalUser(options) {
localUserId.value = options.userId;
}
function addUserInfo(userInfo) {
const { userId } = userInfo;
if (!userId) {
return;
}
let newUserInfo;
if (userInfoObj.value[userId]) {
newUserInfo = Object.assign(userInfoObj.value[userId], userInfo);
} else {
newUserInfo = Object.assign(user.getNewUserInfo(userId), userInfo);
}
newUserInfo.displayName = getDisplayName(newUserInfo);
userInfoObj.value[userId] = newUserInfo;
}
function updateUserInfo(userInfo) {
if (!userInfo.userId) {
return;
}
const newUserInfo = Object.assign(
userInfoObj.value[userInfo.userId],
userInfo
);
newUserInfo.displayName = getDisplayName(newUserInfo);
userInfoObj.value[userInfo.userId] = newUserInfo;
}
function removeUserInfo(userId) {
if (!userId || userId === localUserId.value) {
return;
}
if (userInfoObj.value[userId]) {
delete userInfoObj.value[userId];
}
}
function getUserInfo(options) {
return userInfoObj.value[options.userId];
}
function getRecordStreamType(streamType) {
if (streamType === TUIRoomEngine.TUIVideoStreamType.kCameraStreamLow) {
return TUIRoomEngine.TUIVideoStreamType.kCameraStream;
}
return streamType;
}
function addStreamInfo(userId, streamType) {
const recordStreamType = getRecordStreamType(streamType);
if (streamInfoObj.value[`${userId}_${recordStreamType}`]) {
return;
}
const newStreamInfo = stream.getNewStreamInfo(userId, recordStreamType);
vue.set(streamInfoObj.value, `${userId}_${recordStreamType}`, newStreamInfo);
}
function updateStreamInfo(streamInfo) {
const { userId, streamType } = streamInfo;
const recordStreamType = getRecordStreamType(streamType);
if (!streamInfoObj.value[`${userId}_${recordStreamType}`]) {
return;
}
if (streamType !== recordStreamType) {
Object.assign(streamInfo, { streamType: recordStreamType });
}
vue.set(
streamInfoObj.value,
`${userId}_${recordStreamType}`,
Object.assign(
streamInfoObj.value[`${userId}_${recordStreamType}`],
streamInfo
)
);
}
function removeStreamInfo(userId, streamType) {
const recordStreamType = getRecordStreamType(streamType);
if (streamInfoObj.value[`${userId}_${recordStreamType}`]) {
vue.del(streamInfoObj.value, `${userId}_${recordStreamType}`);
}
}
function addSeatApplicationRequest(request) {
seatApplicationRequestList.value.push(request);
}
function removeSeatApplicationRequest(request) {
seatApplicationRequestList.value = seatApplicationRequestList.value.filter(
(item) => item.requestAction !== request.requestAction
);
}
function setSeatInvitationRequest(request) {
seatInvitationRequest.value = request;
}
function getDisplayName(options) {
const { nameCard, userName, userId } = options;
return nameCard || userName || userId;
}
function reset() {
roomId.value = "";
roomState.value = Room.RoomState.Idle;
roomInfo.value = void 0;
userInfoObj.value = {};
streamInfoObj.value = {};
}
const store = Vue.reactive({
roomId,
roomState,
roomInfo,
setRoomInfo,
userInfoObj,
userList,
localUser,
remoteUserList,
streamInfoObj,
localStream,
onSeatUserList,
applyToOnSeatUserList,
userSearchText,
seatApplicationRequestList,
seatInvitationRequest,
setLocalUser,
addUserInfo,
updateUserInfo,
getUserInfo,
removeUserInfo,
addStreamInfo,
updateStreamInfo,
removeStreamInfo,
reset,
addSeatApplicationRequest,
removeSeatApplicationRequest,
setSeatInvitationRequest
});
function useStore(options) {
return {
store,
roomId,
roomState,
roomInfo,
userInfoObj,
userList,
localUser,
remoteUserList,
streamInfoObj,
localStream,
onSeatUserList,
applyToOnSeatUserList,
userSearchText,
seatApplicationRequestList,
seatInvitationRequest
};
}
exports.addUserInfo = addUserInfo;
exports.default = useStore;
exports.setLocalUser = setLocalUser;
exports.setRoomInfo = setRoomInfo;
exports.updateUserInfo = updateUserInfo;
;