diff --git a/frontend/src/components/common/ErrorBoundary.tsx b/frontend/src/components/common/ErrorBoundary.tsx index 2df02dc5..dea0c53b 100644 --- a/frontend/src/components/common/ErrorBoundary.tsx +++ b/frontend/src/components/common/ErrorBoundary.tsx @@ -1,5 +1,5 @@ import * as Sentry from '@sentry/react' -import { type ReactNode } from 'react' +import { type ReactNode, useEffect, useRef } from 'react' import { Button } from '@/components/ui/Button' interface FallbackProps { @@ -18,17 +18,20 @@ function isChunkLoadError(error: Error): boolean { } function DefaultFallback({ error, resetError }: FallbackProps) { + const reloadingRef = useRef(false) + // Auto-reload on stale chunk errors (happens after deployments) - if (isChunkLoadError(error)) { + useEffect(() => { + if (!isChunkLoadError(error)) return const key = 'rf_boundary_chunk_reload' const lastReload = sessionStorage.getItem(key) const now = Date.now() if (!lastReload || now - Number(lastReload) > 10_000) { sessionStorage.setItem(key, String(now)) + reloadingRef.current = true window.location.reload() - return null } - } + }, [error]) return (