@tencentcloud/roomkit-electron-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,
189 lines (188 loc) • 5.69 kB
JavaScript
import { ref, computed, shallowRef } from "vue";
import { useBasicStore } from "../../stores/basic.mjs";
import { useRoomStore } from "../../stores/room.mjs";
import renderMsg from "../common/base/Message/Message.mjs";
import { storeToRefs } from "pinia";
import { useI18n } from "../../locales/index.mjs";
import { getUrlWithRoomId } from "../../utils/utils.mjs";
import { isElectron } from "../../utils/environment.mjs";
import InviteIcon from "../common/icons/InviteIcon.vue.mjs";
import ShareIcon from "../common/icons/ShareIcon.vue.mjs";
import "../../services/main.mjs";
import { roomService } from "../../services/roomService.mjs";
import "@tencentcloud/tuiroom-engine-electron";
import "mitt";
import "../../services/manager/roomActionManager.mjs";
import "@tencentcloud/tui-core";
import { MESSAGE_DURATION } from "../../constants/message.mjs";
import { clipBoard } from "../../utils/adapter.mjs";
function useRoomInvite() {
const { t } = useI18n();
const basicStore = useBasicStore();
const roomLinkConfig = roomService.getComponentConfig("RoomLink");
const roomStore = useRoomStore();
const { remoteEnteredUserList, roomName, isSeatEnabled, password } = storeToRefs(roomStore);
const {
roomId,
shareLink,
isRoomLinkVisible,
isSchemeLinkVisible,
userId,
userName,
sidebarName
} = storeToRefs(basicStore);
const { origin, pathname } = location || {};
const showContacts = ref(false);
const isShowRoomShareForm = ref(false);
const inviteLink = computed(() => {
if (shareLink.value) {
const urlConcatenation = shareLink.value.indexOf("?") !== -1 ? "&" : "?";
return `${shareLink.value}${urlConcatenation}roomId=${roomId.value}`;
}
return `${origin}${pathname}#/home?roomId=${roomId.value}`;
});
const schemeLink = computed(
() => `tuiroom://joinroom?roomId=${roomId.value}`
);
const inviteBarTitle = computed(
() => isRoomLinkVisible.value ? t(
"You can share the room number or link to invite more people to join the room."
) : t(
"You can share the room number to invite more people to join the room"
)
);
const isShowPassword = computed(() => !!(password == null ? void 0 : password.value));
const invitationFeatureDetails = ref([
{
icon: shallowRef(InviteIcon),
text: "addMember",
function: async () => {
contacts.value = await roomService.scheduleConferenceManager.fetchFriendList();
showContacts.value = true;
}
},
{
icon: shallowRef(ShareIcon),
text: "shareRoom",
function: () => {
isShowRoomShareForm.value = true;
}
}
]);
const contacts = ref([]);
async function onCopy(value) {
try {
await clipBoard(value);
renderMsg({
message: t("Copied successfully"),
type: "success"
});
} catch (error) {
renderMsg({
message: t("Copied failure"),
type: "error"
});
}
}
const inviteInfoList = computed(() => [
{
title: "Room Name",
content: roomName.value,
isShowCopyIcon: false,
isVisible: true
},
{
title: "Room Type",
content: `${t(getSeatModeDisplay(!!isSeatEnabled.value))}`,
isShowCopyIcon: false,
isVisible: true
},
{
title: "Room ID",
content: roomId.value,
isShowCopyIcon: true,
isVisible: true
},
{
title: "Room Password",
content: password == null ? void 0 : password.value,
isShowCopyIcon: true,
isVisible: isShowPassword.value
},
{
title: "Room Link",
content: getUrlWithRoomId(roomId.value),
isShowCopyIcon: true,
isVisible: isRoomLinkVisible.value && roomLinkConfig.visible
},
{
title: "Scheme",
content: schemeLink.value,
isShowCopyIcon: true,
isVisible: isSchemeLinkVisible.value
}
]);
const displayedInviteInfoList = computed(
() => inviteInfoList.value.filter((item) => item.isVisible)
);
function getSeatModeDisplay(isSeatEnabled2) {
return isSeatEnabled2 ? "On-stage Speaking Room" : "Free Speech Room";
}
function copyRoomIdAndRoomLink() {
const invitationList = [
roomName.value,
`${t("Room Type")}: ${t(getSeatModeDisplay(!!isSeatEnabled.value))}`,
`${t("Room ID")}: ${roomId.value}`
];
if (isShowPassword.value) {
invitationList.push(`${t("Room Password")}: ${password == null ? void 0 : password.value}`);
}
if (isRoomLinkVisible.value && roomLinkConfig.visible) {
invitationList.push(
`${t("Room Link")}: ${getUrlWithRoomId(roomId.value)}`
);
}
if (isSchemeLinkVisible.value) {
invitationList.push(`${t("Scheme")}: ${schemeLink.value}`);
}
const invitation = invitationList.join("\n");
onCopy(invitation);
isShowRoomShareForm.value = false;
}
const contactsConfirm = async (contacts2) => {
const userIdList = contacts2.map((contacts3) => contacts3.userId);
await roomService.conferenceInvitationManager.inviteUsers({ userIdList });
renderMsg({
type: "success",
message: t("Invitation sent, waiting for members to join."),
duration: MESSAGE_DURATION.NORMAL
});
};
return {
t,
isRoomLinkVisible,
roomId,
origin,
pathname,
isElectron,
inviteLink,
schemeLink,
inviteBarTitle,
onCopy,
displayedInviteInfoList,
invitationFeatureDetails,
showContacts,
contactsConfirm,
contacts,
remoteEnteredUserList,
isShowRoomShareForm,
userId,
userName,
inviteInfoList,
copyRoomIdAndRoomLink,
sidebarName
};
}
export {
useRoomInvite as default
};