@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,
88 lines (87 loc) • 3.95 kB
JavaScript
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
const Vue = require("vue");
const IconButton = require("../../../components/common/base/IconButton.vue.js");
const AudioIcon = require("../../../components/common/AudioIcon.vue2.js");
const AudioSettingTab = require("./AudioSettingTab.vue2.js");
const index$1 = require("../../../locales/index.js");
const vClickOutside = require("../../../directives/vClickOutside.js");
const index = require("../../hooks/useAudioDeviceState/index.js");
const MediaDeviceSetting = require("../../type/MediaDeviceSetting.js");
const basic = require("../../../stores/basic.js");
const _hoisted_1 = { class: "audio-control-container" };
const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
__name: "AudioMediaControl",
emits: ["click-icon"],
setup(__props, { emit: __emit }) {
const audioSettingProps = Vue.inject("audioSettingProps");
const basicStore = basic.useBasicStore();
const { audioVolume, microphoneState, isMicrophoneTesting, microphone } = index.useAudioDeviceState();
const emits = __emit;
const showAudioSettingTab = Vue.ref(false);
const { t } = index$1.useI18n();
const isMuted = Vue.computed(() => {
if (!basicStore.roomId) {
return !isMicrophoneTesting.value;
}
return microphoneState.value !== MediaDeviceSetting.MediaDeviceState.DeviceOn;
});
async function handleClickIcon() {
showAudioSettingTab.value = false;
emits("click-icon");
if (!basicStore.roomId) {
if (isMicrophoneTesting.value) {
await microphone.stopMicDeviceTest();
} else {
await microphone.startMicDeviceTest({ interval: 200 });
}
return;
}
if (microphoneState.value === MediaDeviceSetting.MediaDeviceState.DeviceOn) {
await microphone.muteLocalAudio();
} else {
await microphone.openLocalMicrophone();
await microphone.unmuteLocalAudio();
}
}
function handleMore() {
showAudioSettingTab.value = !showAudioSettingTab.value;
}
function handleHideAudioSettingTab() {
if (showAudioSettingTab.value) {
showAudioSettingTab.value = false;
}
}
return (_ctx, _cache) => {
var _a;
return Vue.withDirectives((Vue.openBlock(), Vue.createElementBlock("div", _hoisted_1, [
Vue.createVNode(IconButton.default, {
title: Vue.unref(t)("Mic"),
"has-more": ((_a = Vue.unref(audioSettingProps)) == null ? void 0 : _a.displayMode) === Vue.unref(MediaDeviceSetting.MediaSettingDisplayMode).IconWithPanel,
disabled: Vue.unref(microphoneState) === Vue.unref(MediaDeviceSetting.MediaDeviceState).DeviceOffAndDisabled,
"is-not-support": Vue.unref(microphoneState) === Vue.unref(MediaDeviceSetting.MediaDeviceState).NotSupportCapture || Vue.unref(microphoneState) === Vue.unref(MediaDeviceSetting.MediaDeviceState).NoDeviceDetected,
onClickIcon: handleClickIcon,
onClickMore: handleMore
}, {
default: Vue.withCtx(() => [
Vue.createVNode(AudioIcon.default, {
"audio-volume": Vue.unref(audioVolume),
"is-muted": isMuted.value,
"is-disabled": Vue.unref(microphoneState) === Vue.unref(MediaDeviceSetting.MediaDeviceState).DeviceOffAndDisabled
}, null, 8, ["audio-volume", "is-muted", "is-disabled"])
]),
_: 1
}, 8, ["title", "has-more", "disabled", "is-not-support"]),
Vue.withDirectives(Vue.createVNode(AudioSettingTab.default, {
class: "audio-tab",
"audio-volume": Vue.unref(audioVolume)
}, null, 8, ["audio-volume"]), [
[Vue.vShow, showAudioSettingTab.value]
])
])), [
[Vue.unref(vClickOutside.default), handleHideAudioSettingTab]
]);
};
}
});
exports.default = _sfc_main;
;