import React, { useEffect } from 'react'; import { ErrorScreen } from '../../error-screen/component'; import LoadingScreen from '../../common/loading-screen/component'; const connectionTimeout = 60000; interface Response { meeting_clientSettings: Array<{ askForFeedbackOnLogout: boolean, allowDefaultLogoutUrl: boolean, learningDashboardBase: string, fallbackLocale: string, fallbackOnEmptyString: boolean, clientLog: { server: { level: string, enabled: boolean }, console: { level: string, enabled: true }, external: { url: string, level: string, logTag: string, method: string, enabled: boolean, flushOnClose: boolean, throttleInterval: number, } } }> } interface StartupDataFetchProps { children: React.ReactNode; } const StartupDataFetch: React.FC = ({ children, }) => { const [settingsFetched, setSettingsFetched] = React.useState(false); const [error, setError] = React.useState(''); const timeoutRef = React.useRef>(); const [loading, setLoading] = React.useState(false); useEffect(() => { setLoading(true); timeoutRef.current = setTimeout(() => { setError('Timeout on fetching startup data'); setLoading(false); }, connectionTimeout); const urlParams = new URLSearchParams(window.location.search); const sessionToken = urlParams.get('sessionToken'); if (!sessionToken) { setError('Missing session token'); setLoading(false); return; } const clientStartupSettings = '/api/rest/clientStartupSettings/'; const url = new URL(`${window.location.origin}${clientStartupSettings}`); const headers = new Headers({ 'X-Session-Token': sessionToken, 'Content-Type': 'application/json' }); fetch(url, { method: 'get', headers }) .then((resp) => resp.json()) .then((data: Response) => { const settings = data.meeting_clientSettings[0]; sessionStorage.setItem('clientStartupSettings', JSON.stringify(settings)); setSettingsFetched(true); clearTimeout(timeoutRef.current); setLoading(false); }); }, []); return ( <> {settingsFetched ? children : null} {error ? ( ) : null} {loading ? (
Loading...
) : null} ); }; export default StartupDataFetch;