diff --git a/apps/compliance-portal/src/App.tsx b/apps/compliance-portal/src/App.tsx index f7f4e21dc..c8471e4e5 100644 --- a/apps/compliance-portal/src/App.tsx +++ b/apps/compliance-portal/src/App.tsx @@ -18,19 +18,15 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -import { ErrorBoundary } from "@probo/ui/src/v2/ErrorBoundary/ErrorBoundary"; import { RouterProvider } from "react-router"; -import { BootstrapError } from "#/components/errors/BootstrapError"; import { RelayProvider } from "#/lib/relay/RelayProvider"; import { router } from "#/routes"; export function App() { return ( - }> - - - - + + + ); } diff --git a/apps/compliance-portal/src/components/errors/BootstrapError.tsx b/apps/compliance-portal/src/components/errors/BootstrapError.tsx deleted file mode 100644 index 759d0527e..000000000 --- a/apps/compliance-portal/src/components/errors/BootstrapError.tsx +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2026 Probo Inc . -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -// PERFORMANCE OF THIS SOFTWARE. - -import { Anchor } from "@probo/ui/src/v2/Button/Anchor"; -import { Button } from "@probo/ui/src/v2/Button/Button"; -import { ErrorState } from "@probo/ui/src/v2/ErrorState/ErrorState"; -import { useTranslation } from "react-i18next"; - -import { getPathPrefix } from "#/lib/http/pathPrefix"; - -// Outermost fallback for failures that happen before (or in) the router itself. -// It cannot use the router (no context yet), so navigation is a plain anchor and -// recovery is a hard reload. -export function BootstrapError() { - const { t } = useTranslation(); - - return ( - - - {t("errors.actions.backToTrustCenter")} - - - - )} - /> - ); -} diff --git a/apps/compliance-portal/src/components/errors/GlobalError.tsx b/apps/compliance-portal/src/components/errors/GlobalError.tsx index ecb266b91..3f813d3e2 100644 --- a/apps/compliance-portal/src/components/errors/GlobalError.tsx +++ b/apps/compliance-portal/src/components/errors/GlobalError.tsx @@ -61,7 +61,7 @@ interface GlobalErrorProps { } // Page-level error fallback: renders the v2 ErrorState with portal copy and -// actions. Used by the bootstrap boundary and the route boundaries. +// actions. Used by the route boundaries (root + page). export function GlobalError({ error, onRetry, fullPage = false }: GlobalErrorProps) { const { t } = useTranslation(); const { code, titleKey, descriptionKey } = resolveContent(error); diff --git a/contrib/claude/error-handling.md b/contrib/claude/error-handling.md index a117ff93e..910a4202c 100644 --- a/contrib/claude/error-handling.md +++ b/contrib/claude/error-handling.md @@ -211,7 +211,7 @@ The portal ships three fallback tiers, all backed by the same `ErrorBoundary`: | Tier | Placement | Fallback | |------|-----------|----------| -| Global (bootstrap) | around `RouterProvider` in `App.tsx`, and the root route | `ErrorState` full page (standalone) | +| Global | root route (`RootErrorBoundary`) | `ErrorState` full page (standalone) | | Page | pathless child route inside the layout | `ErrorState` inside the shell (TopBar/footer survive) | | Section / row | around a fragment-reading subtree | `InlineError` (vertical for sections, horizontal for rows) with a retry |