UNPKG

@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,

76 lines (75 loc) 2.86 kB
import { ref, reactive, computed, markRaw } from "vue"; import { TUIMediaDevice, TUIRequestCallbackType, TUIErrorCode } from "@tencentcloud/tuiroom-engine-js"; import { IconVideoOpen, TUIToast, TOAST_TYPE } from "@tencentcloud/uikit-base-component-vue3"; import { MESSAGE_DURATION } from "../../../../constants/message.mjs"; import useRoomEngine from "../../../../hooks/useRoomEngine.mjs"; import { useI18n } from "../../../../locales/index.mjs"; import { UserAction } from "../../../type/User.mjs"; const invitingUserOpenVideoRequestObj = ref( {} ); function useVideoAction(userInfo) { const roomEngine = useRoomEngine(); const { t } = useI18n(); async function muteUserVideo() { var _a, _b; if (userInfo.hasVideoStream) { await ((_a = roomEngine.instance) == null ? void 0 : _a.closeRemoteDeviceByAdmin({ userId: userInfo.userId, device: TUIMediaDevice.kCamera })); } else { const isRequestingUserOpenCamera = invitingUserOpenVideoRequestObj.value[userInfo.userId]; if (isRequestingUserOpenCamera) { TUIToast({ type: TOAST_TYPE.INFO, message: `${t("An invitation to open the camera has been sent to sb.", { name: userInfo.displayName })}`, duration: MESSAGE_DURATION.NORMAL }); return; } const request = await ((_b = roomEngine.instance) == null ? void 0 : _b.openRemoteDeviceByAdmin({ userId: userInfo.userId, device: TUIMediaDevice.kCamera, timeout: 0, requestCallback: (callbackInfo) => { delete invitingUserOpenVideoRequestObj.value[userInfo.userId]; const { requestCallbackType, code } = callbackInfo; switch (requestCallbackType) { case TUIRequestCallbackType.kRequestError: if (code === TUIErrorCode.ERR_REQUEST_ID_REPEAT) { TUIToast({ type: TOAST_TYPE.WARNING, message: t( "This member has already received the same request, please try again later" ), duration: MESSAGE_DURATION.NORMAL }); } break; } } })); TUIToast({ type: TOAST_TYPE.INFO, message: `${t("An invitation to open the camera has been sent to sb.", { name: userInfo.displayName })}`, duration: MESSAGE_DURATION.NORMAL }); if (request && request.requestId) { invitingUserOpenVideoRequestObj.value[userInfo.userId] = request; } } } const videoControl = reactive({ key: UserAction.VideoAction, icon: markRaw(IconVideoOpen), label: computed( () => userInfo.hasVideoStream ? t("Disable video") : t("Enable video") ), handler: muteUserVideo }); return videoControl; } export { useVideoAction as default };