UNPKG

@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
"use strict"; 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;