diff --git a/frontend/src/components/error/LazyOutlet/LazyOutlet.css b/frontend/src/components/error/LazyOutlet/LazyOutlet.css new file mode 100644 index 0000000000..45e908db26 --- /dev/null +++ b/frontend/src/components/error/LazyOutlet/LazyOutlet.css @@ -0,0 +1,17 @@ +/* Center the route-loading fallback in the content area. */ +.lazyOutletFallback { + display: flex; + width: 100%; + min-height: 60vh; + align-items: center; + justify-content: center; +} + +/* GenericLoader's .center uses `width/height: inherit`, which collapses to a + narrow column inside the flex content area (the loader text ends up wrapping + one word per line next to the sidebar). Pin it to the full fallback width so + it renders centered at its natural size instead. */ +.lazyOutletFallback > .center { + width: 100%; + height: auto; +} diff --git a/frontend/src/components/error/LazyOutlet/LazyOutlet.jsx b/frontend/src/components/error/LazyOutlet/LazyOutlet.jsx index ce321c9c60..fb43d5a0eb 100644 --- a/frontend/src/components/error/LazyOutlet/LazyOutlet.jsx +++ b/frontend/src/components/error/LazyOutlet/LazyOutlet.jsx @@ -4,6 +4,7 @@ import { Outlet, useLocation } from "react-router-dom"; import { GenericLoader } from "../../generic-loader/GenericLoader.jsx"; import { ErrorBoundary } from "../../widgets/error-boundary/ErrorBoundary.jsx"; +import "./LazyOutlet.css"; // A failed dynamic import — almost always a stale hashed chunk after a // redeploy (the client's index.html references a filename the CDN no longer @@ -74,7 +75,15 @@ export function LazyOutlet() { onError={handleRouteError} fallbackComponent={} > - }> + {/* Wrap the loader so it fills the content area and stays centered — see + LazyOutlet.css for why GenericLoader needs this here. */} + + + + } + >