@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
JavaScript
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
};