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,

123 lines (122 loc) 4.27 kB
var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); import { TUICore, TUIConstants } from "@tencentcloud/tui-core"; import { EventType } from "../types.mjs"; import TUIRoomEngine__default, { TUIRoomEvents } from "@tencentcloud/tuiroom-engine-js"; import defaultAvatar from "../../assets/imgs/avatar.png.mjs"; const _ChatManager = class _ChatManager { constructor(service) { __publicField(this, "service"); this.service = service; this.bindEventContext(); this.bindEvent(); TUICore.registerEvent( TUIConstants.TUIChat.EVENT.CHAT_STATE_CHANGED, TUIConstants.TUIChat.EVENT_SUB_KEY.CHAT_OPENED, this ); } static getInstance(ctx) { if (!_ChatManager.instance) { _ChatManager.instance = new _ChatManager(ctx); } return _ChatManager.instance; } static destroyInstance() { if (!_ChatManager.instance) return; _ChatManager.instance = void 0; } dispose() { this.unbindEvent(); } reset() { TUICore.unregisterExtension( TUIConstants.TUIChat.EVENT.CHAT_STATE_CHANGED, this ); } async onNotifyEvent(eventName, subKey, options) { if (options.groupID !== this.service.basicStore.roomId) return; if (eventName === TUIConstants.TUIChat.EVENT.CHAT_STATE_CHANGED) { if (subKey === TUIConstants.TUIChat.EVENT_SUB_KEY.CHAT_OPENED) { TUICore.notifyEvent( TUIConstants.TUIChat.EVENT.CHAT_TYPE_CHANGED, TUIConstants.TUIChat.EVENT_SUB_KEY.CHANGE_SUCCESS, { chatType: TUIConstants.TUIChat.TYPE.ROOM } ); const result = Object.fromEntries( this.service.roomStore.userList.map((item) => [ item.userId, { nick: item.userName, nameCard: item.nameCard, avatar: item.avatarUrl || defaultAvatar } ]) ); TUICore.callService({ serviceName: TUIConstants.TUIChat.SERVICE.NAME, method: TUIConstants.TUIChat.SERVICE.METHOD.UPDATE_MESSAGE_INFO, params: { userInfo: result } }); } } } onLanguageChanged(language) { TUICore.notifyEvent( TUIConstants.TUITranslate.EVENT.LANGUAGE_CHANGED, TUIConstants.TUITranslate.EVENT_SUB_KEY.CHANGE_SUCCESS, { language } ); } onThemeChanged(theme) { TUICore.notifyEvent( TUIConstants.TUITheme.EVENT.THEME_CHANGED, TUIConstants.TUITheme.EVENT_SUB_KEY.CHANGE_SUCCESS, { theme } ); } onUserNameCardChanged(eventInfo) { var _a; const { userId, nameCard } = eventInfo.userInfo; const oldNameCard = (_a = this.service.roomStore.userInfoObj[userId]) == null ? void 0 : _a.nameCard; if (oldNameCard === nameCard) return; const result = { [userId]: { nameCard } }; TUICore.callService({ serviceName: TUIConstants.TUIChat.SERVICE.NAME, method: TUIConstants.TUIChat.SERVICE.METHOD.UPDATE_MESSAGE_INFO, params: { userInfo: result } }); } bindEventContext() { this.onLanguageChanged = this.onLanguageChanged.bind(this); this.onThemeChanged = this.onThemeChanged.bind(this); this.onUserNameCardChanged = this.onUserNameCardChanged.bind(this); } bindEvent() { this.service.on(EventType.LANGUAGE_CHANGED, this.onLanguageChanged); this.service.on(EventType.THEME_CHANGED, this.onThemeChanged); TUIRoomEngine__default.once("ready", () => { var _a; (_a = this.service.roomEngine.instance) == null ? void 0 : _a.on( TUIRoomEvents.onUserInfoChanged, this.onUserNameCardChanged ); }); } unbindEvent() { var _a; this.service.off(EventType.LANGUAGE_CHANGED, this.onLanguageChanged); this.service.off(EventType.THEME_CHANGED, this.onThemeChanged); (_a = this.service.roomEngine.instance) == null ? void 0 : _a.off( TUIRoomEvents.onUserInfoChanged, this.onUserNameCardChanged ); } }; __publicField(_ChatManager, "instance"); let ChatManager = _ChatManager; export { ChatManager };