Use union type for openidloader state
Co-authored-by: Daniel Abramov <inetcrack2@gmail.com>
This commit is contained in:
@@ -47,8 +47,9 @@ export function OpenIDLoader({
|
|||||||
roomName,
|
roomName,
|
||||||
children,
|
children,
|
||||||
}: Props) {
|
}: Props) {
|
||||||
const [sfuConfig, setSFUConfig] = useState<SFUConfig>();
|
const [state, setState] = useState<
|
||||||
const [error, setError] = useState<Error>();
|
SFUConfigLoading | SFUConfigLoaded | SFUConfigFailed
|
||||||
|
>({ kind: "loading" });
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
(async () => {
|
(async () => {
|
||||||
@@ -58,23 +59,38 @@ export function OpenIDLoader({
|
|||||||
livekitServiceURL,
|
livekitServiceURL,
|
||||||
roomName
|
roomName
|
||||||
);
|
);
|
||||||
setSFUConfig(result);
|
setState({ kind: "loaded", sfuConfig: result });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.error("Failed to fetch SFU config: ", 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]);
|
}, [client, livekitServiceURL, roomName]);
|
||||||
|
|
||||||
if (error) {
|
switch (state.kind) {
|
||||||
return <ErrorView error={error} />;
|
case "loading":
|
||||||
} else if (sfuConfig) {
|
return <LoadingView />;
|
||||||
return (
|
case "failed":
|
||||||
<SFUConfigContext.Provider value={sfuConfig}>
|
return <ErrorView error={state.error} />;
|
||||||
{children}
|
case "loaded":
|
||||||
</SFUConfigContext.Provider>
|
return (
|
||||||
);
|
<SFUConfigContext.Provider value={state.sfuConfig}>
|
||||||
} else {
|
{children}
|
||||||
return <LoadingView />;
|
</SFUConfigContext.Provider>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SFUConfigLoading = {
|
||||||
|
kind: "loading";
|
||||||
|
};
|
||||||
|
|
||||||
|
type SFUConfigLoaded = {
|
||||||
|
kind: "loaded";
|
||||||
|
sfuConfig: SFUConfig;
|
||||||
|
};
|
||||||
|
|
||||||
|
type SFUConfigFailed = {
|
||||||
|
kind: "failed";
|
||||||
|
error: Error;
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user