Add video embed loading state

This commit is contained in:
Gabe Kangas
2023-01-31 23:29:02 -08:00
parent cb1b91b82e
commit ae660ed216
+31 -15
View File
@@ -1,21 +1,26 @@
import React from 'react'; import React from 'react';
import { useRecoilValue } from 'recoil'; import { useRecoilValue } from 'recoil';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { Skeleton } from 'antd';
import { import {
clientConfigStateAtom, clientConfigStateAtom,
ClientConfigStore, ClientConfigStore,
isOnlineSelector, isOnlineSelector,
serverStatusState, serverStatusState,
appStateAtom,
} from '../../../components/stores/ClientConfigStore'; } from '../../../components/stores/ClientConfigStore';
import { OfflineBanner } from '../../../components/ui/OfflineBanner/OfflineBanner'; import { OfflineBanner } from '../../../components/ui/OfflineBanner/OfflineBanner';
import { Statusbar } from '../../../components/ui/Statusbar/Statusbar'; import { Statusbar } from '../../../components/ui/Statusbar/Statusbar';
import { OwncastPlayer } from '../../../components/video/OwncastPlayer/OwncastPlayer'; import { OwncastPlayer } from '../../../components/video/OwncastPlayer/OwncastPlayer';
import { ClientConfig } from '../../../interfaces/client-config.model'; import { ClientConfig } from '../../../interfaces/client-config.model';
import { ServerStatus } from '../../../interfaces/server-status.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() { export default function VideoEmbed() {
const status = useRecoilValue<ServerStatus>(serverStatusState); const status = useRecoilValue<ServerStatus>(serverStatusState);
const clientConfig = useRecoilValue<ClientConfig>(clientConfigStateAtom); const clientConfig = useRecoilValue<ClientConfig>(clientConfigStateAtom);
const appState = useRecoilValue<AppStateOptions>(appStateAtom);
const { name } = clientConfig; const { name } = clientConfig;
@@ -39,34 +44,45 @@ export default function VideoEmbed() {
const initiallyMuted = query.initiallyMuted === 'true'; const initiallyMuted = query.initiallyMuted === 'true';
return ( const loadingState = <Skeleton active style={{ padding: '10px' }} paragraph={{ rows: 10 }} />;
const offlineState = (
<OfflineBanner streamName={name} customText={offlineMessage} notificationsEnabled={false} />
);
const onlineState = (
<> <>
<ClientConfigStore />
<div className="video-embed">
{online && (
<OwncastPlayer <OwncastPlayer
source="/hls/stream.m3u8" source="/hls/stream.m3u8"
online={online} online={online}
initiallyMuted={initiallyMuted} initiallyMuted={initiallyMuted}
title={streamTitle || name} title={streamTitle || name}
/> />
)}
{!online && (
<OfflineBanner
streamName={name}
customText={offlineMessage}
notificationsEnabled={false}
/>
)}
{online && (
<Statusbar <Statusbar
online={online} online={online}
lastConnectTime={lastConnectTime} lastConnectTime={lastConnectTime}
lastDisconnectTime={lastDisconnectTime} lastDisconnectTime={lastDisconnectTime}
viewerCount={viewerCount} viewerCount={viewerCount}
/> />
)} </>
</div> );
const getView = () => {
if (appState.appLoading) {
return loadingState;
}
if (online) {
return onlineState;
}
return offlineState;
};
return (
<>
<ClientConfigStore />
<Theme />
<div className="video-embed">{getView()}</div>
</> </>
); );
} }