@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,
176 lines (175 loc) • 7.69 kB
JavaScript
import { defineComponent, computed, resolveComponent, createElementBlock, openBlock, normalizeClass, unref, createElementVNode, createCommentVNode, createVNode, toDisplayString, createBlock, Fragment, renderList } from "vue";
import { TUIRole } from "@tencentcloud/tuiroom-engine-js";
import TuiAvatar from "../../../../components/common/Avatar.vue2.mjs";
import { useBasicStore } from "../../../../stores/basic.mjs";
import { useRoomStore } from "../../../../stores/room.mjs";
import { storeToRefs } from "pinia";
import { IconScreenOpen, IconAudioOpen, IconAudioClose, IconVideoOpen, IconVideoClose, IconApplyActive, IconUser } from "@tencentcloud/uikit-base-component-vue3";
import { useI18n } from "../../../../locales/index.mjs";
import { isMobile } from "../../../../utils/environment.mjs";
import "../../../../components/common/base/IconButton.vue2.mjs";
/* empty css */
/* empty css */
import "../../../../hooks/useZIndex.mjs";
import "../../../../services/main.mjs";
import "../../../../services/roomService.mjs";
import "mitt";
import "../../../../services/manager/roomActionManager.mjs";
import "@tencentcloud/tui-core";
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
import "../../../hooks/useAudioDeviceState/index.mjs";
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
import "../../../../hooks/useRoomEngine.mjs";
import "../../../hooks/useVideoDeviceState/index.mjs";
/* empty css */
/* empty css */
import useUserState from "../../../hooks/useUserState/index.mjs";
/* empty css */
import "../../../hooks/useFreeBeautyState/index.mjs";
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
import "../../../hooks/useUserState/useUserActions/useMemberInviteAction.mjs";
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
/* empty css */
const _hoisted_1 = { class: "user-name" };
const _hoisted_2 = { class: "role-info" };
const _hoisted_3 = {
key: 0,
class: "member-av-state"
};
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "index",
props: {
userInfo: {},
showStateIcon: { type: Boolean, default: true }
},
setup(__props) {
const { t } = useI18n();
const props = __props;
const basicStore = useBasicStore();
const roomStore = useRoomStore();
const { isMaster, isSpeakAfterTakingSeatMode } = storeToRefs(roomStore);
const { seatApplicationRequestList } = useUserState();
const isMe = computed(() => basicStore.userId === props.userInfo.userId);
const isTargetUserRoomOwner = computed(
() => props.userInfo.userRole === TUIRole.kRoomOwner
);
const isTargetUserAdmin = computed(
() => props.userInfo.userRole === TUIRole.kAdministrator
);
const extraInfo = computed(() => {
if (isMaster.value && isMe.value) {
return `${t("Host")}, ${t("Me")}`;
}
if (isTargetUserRoomOwner.value) {
return t("Host");
}
if (isTargetUserAdmin.value && isMe.value) {
return `${t("Admin")}, ${t("Me")}`;
}
if (isTargetUserAdmin.value) {
return t("Admin");
}
if (isMe.value) {
return t("Me");
}
return "";
});
const isAudienceRole = computed(
() => isSpeakAfterTakingSeatMode.value && !props.userInfo.isOnSeat
);
const isUserApplyingToAnchor = computed(
() => seatApplicationRequestList.value.find(
(request) => request.userId === props.userInfo.userId
)
);
const iconList = computed(() => {
const list = [];
if (props.userInfo.hasScreenStream) {
list.push({ icon: IconScreenOpen });
}
if (!isAudienceRole.value) {
list.push({
icon: props.userInfo.hasAudioStream ? IconAudioOpen : IconAudioClose
});
list.push({
icon: props.userInfo.hasVideoStream ? IconVideoOpen : IconVideoClose
});
}
if (isAudienceRole.value && !isUserApplyingToAnchor.value) {
list.push({ icon: IconAudioClose, disable: true });
list.push({ icon: IconVideoClose, disable: true });
}
if (isAudienceRole.value && isUserApplyingToAnchor.value) {
list.push({ icon: IconApplyActive, size: 20 });
}
return list;
});
return (_ctx, _cache) => {
const _component_svg_icon = resolveComponent("svg-icon");
return openBlock(), createElementBlock("div", {
class: normalizeClass([unref(isMobile) ? "member-info-mobile" : "member-info"])
}, [
createElementVNode("div", {
class: normalizeClass(
!_ctx.showStateIcon && isTargetUserAdmin.value ? "member-basic-info-admin" : "member-basic-info"
)
}, [
createVNode(TuiAvatar, {
class: "avatar-url",
"img-src": _ctx.userInfo.avatarUrl
}, null, 8, ["img-src"]),
createElementVNode("div", _hoisted_1, toDisplayString(_ctx.userInfo.displayName), 1),
createElementVNode("div", _hoisted_2, [
isTargetUserRoomOwner.value || isTargetUserAdmin.value ? (openBlock(), createBlock(unref(IconUser), {
key: 0,
size: "20",
class: normalizeClass(isTargetUserAdmin.value ? "admin-icon" : "master-icon")
}, null, 8, ["class"])) : createCommentVNode("", true),
createElementVNode("div", {
class: normalizeClass(`user-extra-info ${isTargetUserAdmin.value ? "user-extra-info-admin" : ""}`)
}, toDisplayString(extraInfo.value), 3)
])
], 2),
_ctx.showStateIcon ? (openBlock(), createElementBlock("div", _hoisted_3, [
(openBlock(true), createElementBlock(Fragment, null, renderList(iconList.value, (item, index) => {
return openBlock(), createBlock(_component_svg_icon, {
key: index,
icon: item.icon,
class: normalizeClass(["state-icon", { "disable-icon": item.disable }]),
size: item.size
}, null, 8, ["icon", "class", "size"]);
}), 128))
])) : createCommentVNode("", true)
], 2);
};
}
});
export {
_sfc_main as default
};