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,

143 lines (142 loc) 4.75 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); const Vue = require("vue"); const pinia = require("pinia"); const chat = require("../../../stores/chat.js"); const basic = require("../../../stores/basic.js"); const index = require("../../../locales/index.js"); const TUIRoomEngine = require("@tencentcloud/tuiroom-engine-js"); const useRoomEngine = require("../../../hooks/useRoomEngine.js"); function useMessageList() { var _a; const { t } = index.useI18n(); const roomEngine = useRoomEngine.default(); const chatStore = chat.useChatStore(); const basicStore = basic.useBasicStore(); const { roomId } = pinia.storeToRefs(basicStore); const { messageList, isCompleted, nextReqMessageId } = pinia.storeToRefs(chatStore); Vue.watch( isCompleted, (value) => { isCompleted.value = value; }, { immediate: true, deep: true } ); async function handleGetHistoryMessageList() { var _a2; const tim2 = (_a2 = roomEngine.instance) == null ? void 0 : _a2.getTIM(); const imResponse = await (tim2 == null ? void 0 : tim2.getMessageList({ conversationID: `GROUP${roomId.value}`, nextReqMessageID: nextReqMessageId.value })); const { nextReqMessageID: middleReqMessageId, messageList: historyMessageList, isCompleted: isCompleted2 } = imResponse.data; messageList.value.splice(0, 0, ...historyMessageList); const currentMessageList = messageList.value.filter( (item) => item.type === "TIMTextElem" ); chatStore.setMessageListInfo( currentMessageList, isCompleted2, middleReqMessageId ); } async function getMessageList() { var _a2; let count = 0; const result = { currentMessageList: [], isCompleted: false, nextReqMessageId: "" }; const tim2 = (_a2 = roomEngine.instance) == null ? void 0 : _a2.getTIM(); const getIMMessageList = async () => { const conversationData = { conversationID: `GROUP${roomId.value}` }; if (result.nextReqMessageId !== "") { conversationData.nextReqMessageID = result.nextReqMessageId; } const imResponse = await tim2.getMessageList(conversationData); const { messageList: messageList2, isCompleted: isCompleted2, nextReqMessageID } = imResponse.data; result.currentMessageList.splice(0, 0, ...messageList2); result.isCompleted = messageList2.length > 0 ? isCompleted2 : true; result.nextReqMessageId = nextReqMessageID; if (result.isCompleted || result.currentMessageList.length >= 15) { return; } count += 1; if (count === 1) { await getIMMessageList(); } }; await getIMMessageList(); return result; } const onReceiveMessage = (options) => { if (!options || !options.data) { return; } const currentConversationId = `GROUP${roomId.value}`; options.data.forEach((message) => { if (message.conversationID !== currentConversationId || message.type !== TUIRoomEngine.TencentCloudChat.TYPES.MSG_TEXT) { return; } const { ID, payload: { text }, nick: userName, from: userId } = message; chatStore.updateMessageList({ ID, type: "TIMTextElem", payload: { text }, nick: userName || userId, from: userId, flow: "in", sequence: Math.random() }); }); }; async function setMessageListInfo() { const { currentMessageList, isCompleted: isCompleted2, nextReqMessageId: nextReqMessageId2 } = await getMessageList(); const filterCurrentMessageList = currentMessageList.filter( (item) => item.type === "TIMTextElem" ); chatStore.setMessageListInfo( filterCurrentMessageList, isCompleted2, nextReqMessageId2 ); } function getDisplaySenderName(index2) { if (index2 === 0) return true; return messageList.value[index2].from !== messageList.value[index2 - 1].from; } let tim = (_a = roomEngine.instance) == null ? void 0 : _a.getTIM(); if (!tim) { tim = TUIRoomEngine.TencentCloudChat.create({ SDKAppID: basicStore.sdkAppId }); } TUIRoomEngine.once("ready", () => { 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, handleGetHistoryMessageList, messageList, getMessageList, setMessageListInfo, getDisplaySenderName, isCompleted }; } exports.default = useMessageList;