mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-01-28 06:58:30 +03:00
prevent react Suspense crash during auth redirect
add redirect-check guards to stop rendering lazy routes while navigation is pending (fixes some users seeing React error #426 when auth expires)
This commit is contained in:
parent
ad1365a46d
commit
495ee0161b
@ -15,6 +15,7 @@ import { AuthProvider } from "@/context/auth-context";
|
|||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
import { FrigateConfig } from "./types/frigateConfig";
|
import { FrigateConfig } from "./types/frigateConfig";
|
||||||
import ActivityIndicator from "@/components/indicators/activity-indicator";
|
import ActivityIndicator from "@/components/indicators/activity-indicator";
|
||||||
|
import { isRedirectingToLogin } from "@/api/auth-redirect";
|
||||||
|
|
||||||
const Live = lazy(() => import("@/pages/Live"));
|
const Live = lazy(() => import("@/pages/Live"));
|
||||||
const Events = lazy(() => import("@/pages/Events"));
|
const Events = lazy(() => import("@/pages/Events"));
|
||||||
@ -58,6 +59,16 @@ function DefaultAppView() {
|
|||||||
? Object.keys(config.auth.roles)
|
? Object.keys(config.auth.roles)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
|
// Show loading indicator during redirect to prevent React from attempting to render
|
||||||
|
// lazy components, which would cause error #426 (suspension during synchronous navigation)
|
||||||
|
if (isRedirectingToLogin()) {
|
||||||
|
return (
|
||||||
|
<div className="size-full overflow-hidden">
|
||||||
|
<ActivityIndicator className="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2" />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="size-full overflow-hidden">
|
<div className="size-full overflow-hidden">
|
||||||
{isDesktop && <Sidebar />}
|
{isDesktop && <Sidebar />}
|
||||||
|
|||||||
@ -28,6 +28,14 @@ export default function ProtectedRoute({
|
|||||||
}
|
}
|
||||||
}, [auth.isLoading, auth.isAuthenticated, auth.user]);
|
}, [auth.isLoading, auth.isAuthenticated, auth.user]);
|
||||||
|
|
||||||
|
// Show loading indicator during redirect to prevent React from attempting to render
|
||||||
|
// lazy components, which would cause error #426 (suspension during synchronous navigation)
|
||||||
|
if (isRedirectingToLogin()) {
|
||||||
|
return (
|
||||||
|
<ActivityIndicator className="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2" />
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (auth.isLoading) {
|
if (auth.isLoading) {
|
||||||
return (
|
return (
|
||||||
<ActivityIndicator className="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2" />
|
<ActivityIndicator className="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2" />
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user