99 lines
2.6 KiB
TypeScript
99 lines
2.6 KiB
TypeScript
|
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<StartupDataFetchProps> = ({
|
||
|
children,
|
||
|
}) => {
|
||
|
const [settingsFetched, setSettingsFetched] = React.useState<boolean>(false);
|
||
|
const [error, setError] = React.useState<string>('');
|
||
|
const timeoutRef = React.useRef<ReturnType<typeof setTimeout>>();
|
||
|
const [loading, setLoading] = React.useState<boolean>(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
|
||
|
? (
|
||
|
<ErrorScreen
|
||
|
endedReason={error}
|
||
|
/>
|
||
|
)
|
||
|
: null}
|
||
|
{loading
|
||
|
? (
|
||
|
<LoadingScreen>
|
||
|
<div style={{ display: 'none' }}>
|
||
|
Loading...
|
||
|
</div>
|
||
|
</LoadingScreen>
|
||
|
)
|
||
|
: null}
|
||
|
</>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export default StartupDataFetch;
|