@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,
95 lines (94 loc) • 4.04 kB
JavaScript
import { defineComponent, inject, ref, withDirectives, createElementBlock, openBlock, createVNode, createBlock, createCommentVNode, unref, withCtx, Fragment } from "vue";
import { IconCameraOn, IconCameraOff } from "@tencentcloud/uikit-base-component-vue3";
import IconButton from "../../../components/common/base/IconButton.vue.mjs";
import VideoSettingTab from "./VideoSettingTab.vue2.mjs";
import { useI18n } from "../../../locales/index.mjs";
import vClickOutside from "../../../directives/vClickOutside.mjs";
import { useVideoDeviceState } from "../../hooks/useVideoDeviceState/index.mjs";
import { MediaDeviceState, MediaSettingDisplayMode } from "../../type/MediaDeviceSetting.mjs";
import { storeToRefs } from "pinia";
import { useRoomStore } from "../../../stores/room.mjs";
import { useBasicStore } from "../../../stores/basic.mjs";
const _hoisted_1 = { class: "video-control-container" };
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "VideoMediaControl",
emits: ["click-icon"],
setup(__props, { emit: __emit }) {
const videoSettingProps = inject("videoSettingProps");
const emits = __emit;
const { cameraState, isCameraTesting, camera } = useVideoDeviceState();
const basicStore = useBasicStore();
const roomStore = useRoomStore();
const { localUser } = storeToRefs(roomStore);
const { t } = useI18n();
const showVideoSettingTab = ref(false);
async function handleClickIcon() {
showVideoSettingTab.value = false;
emits("click-icon");
if (!basicStore.roomId) {
if (isCameraTesting.value) {
await camera.stopCameraDeviceTest();
} else {
await camera.startCameraDeviceTest({ view: "video-preview" });
}
return;
}
if (localUser.value.hasVideoStream) {
await camera.closeLocalCamera();
} else {
await camera.openLocalCamera();
}
}
function handleMore() {
showVideoSettingTab.value = !showVideoSettingTab.value;
}
function handleHideVideoSettingTab() {
if (showVideoSettingTab.value) {
showVideoSettingTab.value = false;
}
}
return (_ctx, _cache) => {
var _a;
return withDirectives((openBlock(), createElementBlock("div", _hoisted_1, [
createVNode(IconButton, {
title: unref(t)("Camera"),
"has-more": ((_a = unref(videoSettingProps)) == null ? void 0 : _a.displayMode) === unref(MediaSettingDisplayMode).IconWithPanel,
disabled: unref(cameraState) === unref(MediaDeviceState).DeviceOffAndDisabled,
"is-not-support": unref(cameraState) === unref(MediaDeviceState).NotSupportCapture || unref(cameraState) === unref(MediaDeviceState).NoDeviceDetected,
onClickIcon: handleClickIcon,
onClickMore: handleMore
}, {
default: withCtx(() => [
!unref(basicStore).roomId ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
unref(isCameraTesting) ? (openBlock(), createBlock(unref(IconCameraOn), {
key: 0,
size: "24"
})) : (openBlock(), createBlock(unref(IconCameraOff), {
key: 1,
size: "24"
}))
], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
unref(cameraState) === unref(MediaDeviceState).DeviceOn ? (openBlock(), createBlock(unref(IconCameraOn), {
key: 0,
size: "24"
})) : (openBlock(), createBlock(unref(IconCameraOff), {
key: 1,
size: "24"
}))
], 64))
]),
_: 1
}, 8, ["title", "has-more", "disabled", "is-not-support"]),
showVideoSettingTab.value ? (openBlock(), createBlock(VideoSettingTab, {
key: 0,
class: "video-tab"
})) : createCommentVNode("", true)
])), [
[unref(vClickOutside), handleHideVideoSettingTab]
]);
};
}
});
export {
_sfc_main as default
};