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,
84 lines (83 loc) • 2.69 kB
JavaScript
"use strict";
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
const Vue = require("vue");
const pinia = require("pinia");
const Message = require("../../common/base/Message/Message.js");
const TUIRoomEngine = require("@tencentcloud/tuiroom-engine-js");
const useRoomEngine = require("../../../hooks/useRoomEngine.js");
const chat = require("../../../stores/chat.js");
const room = require("../../../stores/room.js");
const index = require("../../../locales/index.js");
const basic = require("../../../stores/basic.js");
const util = require("../util.js");
function useChatEditor() {
const roomEngine = useRoomEngine.default();
const { t } = index.useI18n();
const basicStore = basic.useBasicStore();
const chatStore = chat.useChatStore();
const roomStore = room.useRoomStore();
const { roomId } = pinia.storeToRefs(basicStore);
const { isMessageDisabled } = pinia.storeToRefs(chatStore);
const editorInputEle = Vue.ref();
const sendMsg = Vue.ref("");
const isEmojiToolbarVisible = Vue.ref(false);
Vue.watch(isMessageDisabled, (value) => {
if (value) {
sendMsg.value = "";
}
});
const sendMessage = async () => {
var _a;
const result = util.decodeSendTextMsg(sendMsg.value);
if (result === "") {
return;
}
sendMsg.value = "";
isEmojiToolbarVisible.value = false;
try {
const tim = (_a = roomEngine.instance) == null ? void 0 : _a.getTIM();
if (!tim) {
throw new Error("tim is null");
}
const message = tim.createTextMessage({
to: roomId.value,
conversationType: TUIRoomEngine.TencentCloudChat.TYPES.CONV_GROUP,
payload: {
text: result
}
});
await tim.sendMessage(message);
chatStore.updateMessageList({
ID: Math.random().toString(),
type: "TIMTextElem",
payload: {
text: result
},
nick: roomStore.localUser.nameCard || roomStore.localUser.userName || roomStore.localUser.userId,
from: roomStore.localUser.userId,
flow: "out",
sequence: Math.random()
});
} catch (e) {
Message.default({ type: "error", message: t("Failed to send the message") });
}
};
const handleChooseEmoji = (emojiName) => {
sendMsg.value += emojiName;
editorInputEle.value.focus();
};
const togglePopover = () => {
isEmojiToolbarVisible.value = !isEmojiToolbarVisible.value;
};
return {
t,
editorInputEle,
sendMsg,
isMessageDisabled,
sendMessage,
handleChooseEmoji,
isEmojiToolbarVisible,
togglePopover
};
}
exports.default = useChatEditor;