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,

97 lines (96 loc) 3.56 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); const TUIRoomEngine = require("@tencentcloud/tuiroom-engine-js"); const useRoomEngine = require("../../hooks/useRoomEngine.js"); const chat = require("../../stores/chat.js"); const pinia = require("pinia"); const basic = require("../../stores/basic.js"); const index = require("../../locales/index.js"); const Vue = require("vue"); const room = require("../../stores/room.js"); const environment = require("../../utils/environment.js"); function useSideBar() { var _a; const roomEngine = useRoomEngine.default(); const { t } = index.useI18n(); const chatStore = chat.useChatStore(); const basicStore = basic.useBasicStore(); const { sdkAppId, isSidebarOpen, sidebarName, roomId } = pinia.storeToRefs(basicStore); const roomStore = room.useRoomStore(); const { userNumber } = pinia.storeToRefs(roomStore); const showSideBar = Vue.computed( () => isSidebarOpen.value && sidebarName.value !== "transfer-leave" ); const title = Vue.computed(() => { let sidebarTitle = ""; switch (sidebarName.value) { case "chat": sidebarTitle = t("Chat"); break; case "invite": sidebarTitle = t("Invite"); break; case "more": sidebarTitle = t("More"); break; case "apply": sidebarTitle = t("Members applying on stage"); break; case "manage-member": sidebarTitle = `${t("Members")} (${userNumber.value})`; break; case "aiTranscription": sidebarTitle = `${t("AI real-time conference content")}`; break; } return sidebarTitle; }); function handleClose(done) { basicStore.setSidebarOpenStatus(false); basicStore.setSidebarName(""); done(); } const onReceiveMessage = (options) => { let messageTypeList = [TUIRoomEngine.TencentCloudChat.TYPES.MSG_TEXT]; if (!environment.isMobile || basicStore.scene !== "chat") { messageTypeList = messageTypeList.concat([ TUIRoomEngine.TencentCloudChat.TYPES.MSG_IMAGE, TUIRoomEngine.TencentCloudChat.TYPES.MSG_FILE, TUIRoomEngine.TencentCloudChat.TYPES.MSG_FACE, TUIRoomEngine.TencentCloudChat.TYPES.MSG_VIDEO ]); } if (!options || !options.data) { return; } const currentConversationId = `GROUP${roomId.value}`; const isChatSidebarOpen = basicStore.isSidebarOpen && basicStore.sidebarName === "chat"; options.data.forEach((message) => { if (message.conversationID !== currentConversationId) return; const shouldUpdateUnreadCount = messageTypeList.includes(message.type) && !isChatSidebarOpen; if (shouldUpdateUnreadCount) { chatStore.updateUnReadCount(++chatStore.unReadCount); } }); }; let tim = (_a = roomEngine.instance) == null ? void 0 : _a.getTIM(); tim == null ? void 0 : tim.on(TUIRoomEngine.TencentCloudChat.EVENT.MESSAGE_RECEIVED, onReceiveMessage); Vue.watch(sdkAppId, () => { if (!tim && sdkAppId.value) { tim = TUIRoomEngine.TencentCloudChat.create({ SDKAppID: basicStore.sdkAppId }); tim == null ? void 0 : tim.on(TUIRoomEngine.TencentCloudChat.EVENT.MESSAGE_RECEIVED, onReceiveMessage); } }); Vue.onUnmounted(() => { tim == null ? void 0 : tim.off(TUIRoomEngine.TencentCloudChat.EVENT.MESSAGE_RECEIVED, onReceiveMessage); }); return { t, isSidebarOpen, title, sidebarName, handleClose, showSideBar }; } exports.default = useSideBar;