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,

122 lines (121 loc) 4.36 kB
import { computed } from "vue"; import { TUIRole } from "@tencentcloud/tuiroom-engine-js"; import { useRoomStore } from "../../../../stores/room.mjs"; import useAudioControl from "./useAudioAction.mjs"; import useChatAction from "./useChatAction.mjs"; import useVideoAction from "./useVideoAction.mjs"; import useTransferOwnerAction from "./useTransferOwnerAction.mjs"; import useNameCardAction from "./useChangeNameCardAction/index.mjs"; import useKickUserAction from "./useKickUserAction.mjs"; import useSeatAction from "./useSeatAction.mjs"; import useAdminAction from "./useAdminAction.mjs"; import { storeToRefs } from "pinia"; import useUserState from "../index.mjs"; function useUserActions(option) { const { userInfo, actionList } = option; const roomStore = useRoomStore(); const { isFreeSpeakMode, isSpeakAfterTakingSeatMode, localUser } = storeToRefs(roomStore); const { seatApplicationRequestList } = useUserState(); const isTargetUserMySelf = computed( () => roomStore.localUser.userId === userInfo.userId ); const isTargetUserRoomOwner = computed( () => userInfo.userRole === TUIRole.kRoomOwner ); const isTargetUserGeneral = computed( () => userInfo.userRole === TUIRole.kGeneralUser ); const isTargetUserAnchor = computed(() => (userInfo == null ? void 0 : userInfo.isOnSeat) === true); const isTargetUserAudience = computed(() => (userInfo == null ? void 0 : userInfo.isOnSeat) !== true); const { isMaster, isAdmin } = storeToRefs(roomStore); const isCanOperateCurrentUser = computed( () => isMaster.value && !isTargetUserRoomOwner.value || isAdmin.value && isTargetUserGeneral.value || isTargetUserMySelf.value ); const audioAction = useAudioControl(userInfo); const videoAction = useVideoAction(userInfo); const chatAction = useChatAction(userInfo); const transferOwnerAction = useTransferOwnerAction(userInfo); const adminAction = useAdminAction(userInfo); const nameCardAction = useNameCardAction(userInfo); const kickUserAction = useKickUserAction(userInfo); const { inviteUserOnSeat, agreeUserOnSeat, denyUserOnSeat, kickUserOffSeat } = useSeatAction(userInfo); const isUserApplyingToAnchor = computed(() => { return seatApplicationRequestList.value.find( (request) => request.userId === userInfo.userId ); }); const agreeOrDenyStageList = isUserApplyingToAnchor.value ? [agreeUserOnSeat, denyUserOnSeat] : []; const inviteStageList = isTargetUserAudience.value && !isUserApplyingToAnchor.value ? [inviteUserOnSeat] : []; const onStageControlList = isTargetUserAnchor.value ? [audioAction, videoAction, kickUserOffSeat] : []; const controlListObj = { freeSpeak: { [TUIRole.kRoomOwner]: [ audioAction, videoAction, chatAction, adminAction, transferOwnerAction, kickUserAction, nameCardAction ], [TUIRole.kAdministrator]: [ audioAction, videoAction, chatAction, nameCardAction ] }, speakAfterTakeSeat: { [TUIRole.kRoomOwner]: [ ...inviteStageList, ...onStageControlList, ...agreeOrDenyStageList, adminAction, transferOwnerAction, chatAction, kickUserAction, nameCardAction ], [TUIRole.kAdministrator]: [ ...inviteStageList, ...onStageControlList, ...agreeOrDenyStageList, chatAction, nameCardAction ] } }; const controlList = computed(() => { if (!userInfo || !userInfo.isInRoom) { return []; } if (!isCanOperateCurrentUser.value) { return []; } if (isTargetUserMySelf.value) { return [nameCardAction]; } if (isFreeSpeakMode.value) { return controlListObj.freeSpeak[localUser.value.userRole] || []; } if (isSpeakAfterTakingSeatMode.value) { return controlListObj.speakAfterTakeSeat[localUser.value.userRole] || []; } return []; }); if (actionList && actionList.length > 0) { return actionList == null ? void 0 : actionList.reduce((result, action) => { const actionItem = controlList.value.find( (item) => item.key === action ); if (actionItem) { result.push(actionItem); } return result; }, []); } return controlList.value; } export { useUserActions };