import React from 'react'; import { useRecoilValue } from 'recoil'; import { useRouter } from 'next/router'; import { Skeleton } from 'antd'; import { clientConfigStateAtom, ClientConfigStore, isOnlineSelector, serverStatusState, appStateAtom, } from '../../../components/stores/ClientConfigStore'; import { OfflineBanner } from '../../../components/ui/OfflineBanner/OfflineBanner'; import { Statusbar } from '../../../components/ui/Statusbar/Statusbar'; import { OwncastPlayer } from '../../../components/video/OwncastPlayer/OwncastPlayer'; import { ClientConfig } from '../../../interfaces/client-config.model'; import { ServerStatus } from '../../../interfaces/server-status.model'; import { AppStateOptions } from '../../../components/stores/application-state'; import { Theme } from '../../../components/theme/Theme'; export default function VideoEmbed() { const status = useRecoilValue(serverStatusState); const clientConfig = useRecoilValue(clientConfigStateAtom); const appState = useRecoilValue(appStateAtom); const { name } = clientConfig; const { offlineMessage } = clientConfig; const { viewerCount, lastConnectTime, lastDisconnectTime, streamTitle } = status; const online = useRecoilValue(isOnlineSelector); const router = useRouter(); /** * router.query isn't initialized until hydration * (see https://github.com/vercel/next.js/discussions/11484) * but router.asPath is initialized earlier, so we parse the * query parameters ourselves */ const path = router.asPath.split('?')[1] ?? ''; const query = path.split('&').reduce((currQuery, part) => { const [key, value] = part.split('='); return { ...currQuery, [key]: value }; }, {} as Record); const initiallyMuted = query.initiallyMuted === 'true'; const loadingState = ; const offlineState = ( ); const onlineState = ( <> ); const getView = () => { if (appState.appLoading) { return loadingState; } if (online) { return onlineState; } return offlineState; }; return ( <>
{getView()}
); }