import {Registry} from "tc-shared/events"; import * as React from "react"; import { DeviceListResult, ModalVideoSourceEvents, VideoPreviewStatus } from "tc-shared/ui/modal/video-source/Definitions"; import {InternalModal} from "tc-shared/ui/react-elements/internal-modal/Controller"; import {Translatable} from "tc-shared/ui/react-elements/i18n"; import {Select} from "tc-shared/ui/react-elements/InputField"; import {Button} from "tc-shared/ui/react-elements/Button"; import {useContext, useEffect, useRef, useState} from "react"; const cssStyle = require("./Renderer.scss"); const ModalEvents = React.createContext>(undefined); const kNoDeviceId = "__no__device"; const VideoSourceBody = () => { const events = useContext(ModalEvents); const [ deviceList, setDeviceList ] = useState(() => { events.fire("query_device_list"); return "loading"; }); events.reactUse("notify_device_list", event => setDeviceList(event.status)); if(deviceList === "loading") { return (
); } else if(deviceList.status === "error") { let message; switch (deviceList.reason) { case "no-permissions": message = tr("Missing device query permissions"); break; case "request-permissions": message = tr("Please grant video device permissions"); break; case "custom": message = tr("An error happened"); break; } return (
); } else { return (
); } }; const VideoPreviewMessage = (props: { message: any, kind: "info" | "error" }) => { return (
{props.message}
); } const VideoRequestPermissions = (props: { systemDenied: boolean }) => { const events = useContext(ModalEvents); let body; let button; if(props.systemDenied) { body = (
Camara access has been denied by your browser.
Please allow camara access in order to broadcast video.
); button = Retry to query; } else { body = (
In order to be able to broadcast video,
you have to allow camara access.
); button = Request permissions; } return (
{body}
); } const VideoPreview = () => { const events = useContext(ModalEvents); const refVideo = useRef(); const [ status, setStatus ] = useState(() => { events.fire("query_video_preview"); return "loading"; }); events.reactUse("notify_video_preview", event => { setStatus(event.status); }); let body; if(status === "loading") { /* Nothing to show */ } else { switch (status.status) { case "none": body = ; break; case "error": if(status.reason === "no-permissions" || status.reason === "request-permissions") { body = ; } else { body = ; } break; case "preview": body = (