@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
JavaScript
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
};