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,

174 lines (165 loc) 5.51 kB
import TUICore, { TUILogin, TUIConstants } from '@tencentcloud/tui-core'; import TUIChatEngine, { TUITranslateService } from '@tencentcloud/chat-uikit-engine'; import { TUIGlobal } from '@tencentcloud/universal-api'; import { ITUIComponents, ITUIPlugins } from './interface'; import { isFunction, isObject } from './utils'; import { isApp } from './utils/env'; import CallkitPluginServer from './plugins/extension-server/callkit'; // #ifndef MP-WEIXIN import TUILocales from './locales'; // #endif export default class TUIChatKit { static isInitialized: boolean; public chat: any; public SDKAppID: number; public TUICore: any; public TUIChatEngine: any; public TUIGlobal: any; public TUIComponents: ITUIComponents = {}; public TUIPlugins: ITUIPlugins = {}; constructor() { this.TUICore = TUICore; this.TUIChatEngine = TUIChatEngine; this.TUIGlobal = TUIGlobal; this.SDKAppID = 0; this.TUIGlobal._isTIMCallKit = true; TUICore.registerEvent(TUIConstants.TUILogin.EVENT.LOGIN_STATE_CHANGED, TUIConstants.TUILogin.EVENT_SUB_KEY.USER_LOGIN_SUCCESS, this); TUICore.registerEvent(TUIConstants.TUITranslate.EVENT.LANGUAGE_CHANGED, TUIConstants.TUITranslate.EVENT_SUB_KEY.CHANGE_SUCCESS, this); // register translate and voiceToText service event tracking TUICore.registerService(TUIConstants.TUITranslatePlugin.SERVICE.NAME, 1); TUICore.registerService(TUIConstants.TUIVoiceToTextPlugin.SERVICE.NAME, 1); } /** * Listen for the success notification of TUILogin.login */ public onNotifyEvent(eventName: string, subKey: string, params?: Record<string, any>) { if (eventName === TUIConstants.TUILogin.EVENT.LOGIN_STATE_CHANGED) { switch (subKey) { case TUIConstants.TUILogin.EVENT_SUB_KEY.USER_LOGIN_SUCCESS: this.login(); break; } } if (eventName === TUIConstants.TUITranslate.EVENT.LANGUAGE_CHANGED) { switch (subKey) { case TUIConstants.TUITranslate.EVENT_SUB_KEY.CHANGE_SUCCESS: if (params?.language) { TUITranslateService.changeLanguage(params.language); } break; } } } /** * init */ public init() { // Backward compatibility, the new version executes the init operation by default in index.ts if (TUIChatKit.isInitialized) { return; } TUIChatKit.isInitialized = true; // Execute call server when native plugin TUICallKit exists if (isApp) { new CallkitPluginServer(); } // TUITranslateService init // #ifndef MP-WEIXIN TUITranslateService.provideLanguages({ ...TUILocales }); TUITranslateService.useI18n(); // #endif // TUIComponents global install TUIGlobal.TUIComponents = this.TUIComponents; // TUIPlugins global install TUIGlobal.TUIPlugins = this.TUIPlugins; console.warn('[TUIChatKit]: init success.'); } /** * login */ public login() { const { chat, SDKAppID, userID, userSig } = TUILogin.getContext(); this.SDKAppID = SDKAppID; this.TUIChatEngine.login({ chat, SDKAppID, userID, userSig, }); this.chat = chat; return this.TUIChatEngine; } /** * Single component mounting * * @param {string} componentName * @param {any} component * @param {any=} env * @returns {TUICore} mounted instance */ public component(componentName: string, component: any, env?: any) { if (this?.TUIComponents?.componentName) { console.warn( `[TUIChatKit]: ${this?.TUIComponents?.componentName} component has already been applied to target TUIChatEngine.`, ); } else { this.TUIComponents[componentName] = component; env?.component(componentName, component); } if (env) { !TUIGlobal.Vue && (TUIGlobal.Vue = env); } return this.TUIChatEngine; } /** * Component list mount * * @param {object} components * @param {any=} env: Vue2/Vue3 environment * @returns {TUICore} mounted instance */ public components(components: object, env?: any) { if (!components || !isObject(components)) { console.warn('[TUIChatKit]: components is empty or not object.'); } else { Object?.keys(components)?.forEach((key: string) => { this.component(key, components[key as keyof typeof components], env); }); } return this.TUIChatEngine; } /** * Plugin Injection * * @param {any} TUIPlugin * @param {any} options * @returns {TUICore} mounted instance */ public use(TUIPluginName: string, TUIPlugin: any, options?: any) { if (!this.TUICore) { console.warn( `[TUIChatKit]: Plugin ${this.TUIPlugins[TUIPluginName]} can't be used before init.`, ); return; } if (this.TUIPlugins[TUIPluginName]) { console.warn( `[TUIChatKit]: Plugin ${this.TUIPlugins[TUIPluginName]} has already been applied to target TUIChatEngine.`, ); } else if (TUIPlugin && isFunction(TUIPlugin?.plugin)) { this.TUIPlugins[TUIPluginName] = TUIPlugin; TUIPlugin?.plugin(this, options); } else if (isFunction(TUIPlugin)) { this.TUIPlugins[TUIPluginName] = TUIPlugin; TUIPlugin(this, options); } else { console.warn( '[TUIChatKit]: A plugin must either be a function or an object with an "plugin" ' + 'function.' + this.TUIPlugins[TUIPluginName] + 'does not comply with the above rules.', ); } return this.TUIChatEngine; } }