diff --git a/src/livekit/OpenIDLoader.tsx b/src/livekit/OpenIDLoader.tsx index 8ce3c998..9e68d311 100644 --- a/src/livekit/OpenIDLoader.tsx +++ b/src/livekit/OpenIDLoader.tsx @@ -47,8 +47,9 @@ export function OpenIDLoader({ roomName, children, }: Props) { - const [sfuConfig, setSFUConfig] = useState(); - const [error, setError] = useState(); + const [state, setState] = useState< + SFUConfigLoading | SFUConfigLoaded | SFUConfigFailed + >({ kind: "loading" }); useEffect(() => { (async () => { @@ -58,23 +59,38 @@ export function OpenIDLoader({ livekitServiceURL, roomName ); - setSFUConfig(result); + setState({ kind: "loaded", sfuConfig: result }); } catch (e) { logger.error("Failed to fetch SFU config: ", e); - setError(new Error("Failed to fetch SFU config")); + setState({ kind: "failed", error: e }); } })(); }, [client, livekitServiceURL, roomName]); - if (error) { - return ; - } else if (sfuConfig) { - return ( - - {children} - - ); - } else { - return ; + switch (state.kind) { + case "loading": + return ; + case "failed": + return ; + case "loaded": + return ( + + {children} + + ); } } + +type SFUConfigLoading = { + kind: "loading"; +}; + +type SFUConfigLoaded = { + kind: "loaded"; + sfuConfig: SFUConfig; +}; + +type SFUConfigFailed = { + kind: "failed"; + error: Error; +};