From 5ea7bbd6a121a4e27fdb069dcce59f3020faf362 Mon Sep 17 00:00:00 2001 From: tresabhi <43380238+tresabhi@users.noreply.github.com> Date: Tue, 19 May 2026 19:02:22 -0500 Subject: [PATCH] react boundary --- packages/i18n/strings/en.json | 8 -- .../src/components/ErrorDisplay.astro | 72 ---------------- .../src/components/ErrorWrapper.tsx | 20 ----- .../components/ErrorWrapper/index.module.css | 55 ++++++++++++ .../src/components/ErrorWrapper/index.tsx | 84 +++++++++++++++++++ .../components/TankopediaLoadout/index.tsx | 4 - .../website-ue/src/layouts/BaseLayout.astro | 4 - 7 files changed, 139 insertions(+), 108 deletions(-) delete mode 100644 packages/website-ue/src/components/ErrorDisplay.astro delete mode 100644 packages/website-ue/src/components/ErrorWrapper.tsx create mode 100644 packages/website-ue/src/components/ErrorWrapper/index.module.css create mode 100644 packages/website-ue/src/components/ErrorWrapper/index.tsx diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index 838c434d0..e9b37e735 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -1,12 +1,4 @@ { - "error": { - "heading": "BlitzKit ran into a critical error", - "message": "Sorry about the inconvenience! You have a couple of options.", - "view": "View error", - "reload": "Reload", - "support": "Support" - }, - "nations": { "0": "Unspecified", "1": "USSR", diff --git a/packages/website-ue/src/components/ErrorDisplay.astro b/packages/website-ue/src/components/ErrorDisplay.astro deleted file mode 100644 index 297ee5f16..000000000 --- a/packages/website-ue/src/components/ErrorDisplay.astro +++ /dev/null @@ -1,72 +0,0 @@ ---- -import { api } from "../api/dynamic"; -import { discordLink } from "../config/socials"; -import { Button } from "./Button"; -import { Heading } from "./Heading"; -import { Link } from "./Link"; -import { Text } from "./Text"; - -interface Props { - locale: string; -} - -const { locale } = Astro.props; -const strings = await api.strings(locale); ---- - - - -
-
- {strings.error.heading} - {strings.error.message} -
- -
- - - - - - - - - -
-
diff --git a/packages/website-ue/src/components/ErrorWrapper.tsx b/packages/website-ue/src/components/ErrorWrapper.tsx deleted file mode 100644 index ed4c7ab90..000000000 --- a/packages/website-ue/src/components/ErrorWrapper.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import type { ReactNode } from "react"; -import { ErrorBoundary } from "react-error-boundary"; - -interface Props { - children: ReactNode; -} - -export function ErrorWrapper({ children }: Props) { - return ( - { - console.log("what?"); - document.body.classList.add("error"); - }} - > - {children} - - ); -} diff --git a/packages/website-ue/src/components/ErrorWrapper/index.module.css b/packages/website-ue/src/components/ErrorWrapper/index.module.css new file mode 100644 index 000000000..59887ee46 --- /dev/null +++ b/packages/website-ue/src/components/ErrorWrapper/index.module.css @@ -0,0 +1,55 @@ +.error-display { + z-index: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + gap: var(--space-4); + padding: var(--space-4); + box-sizing: border-box; + + position: fixed; + top: 0; + left: 0; + width: 100dvw; + height: 100dvh; + + text-align: center; + background-color: var(--gray-1); + + .info { + display: flex; + align-items: center; + flex-direction: column; + + gap: var(--space-3); + } + + .error { + text-align: left; + overflow: hidden; + position: relative; + box-sizing: border-box; + + max-width: min(100%, var(--page-width)); + + .cover { + position: absolute; + right: 0; + top: 0; + + width: 25%; + height: 100%; + + background: linear-gradient(90deg, transparent, var(--gray-1)); + } + } + + .options { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: var(--space-3); + } +} diff --git a/packages/website-ue/src/components/ErrorWrapper/index.tsx b/packages/website-ue/src/components/ErrorWrapper/index.tsx new file mode 100644 index 000000000..9e57abee7 --- /dev/null +++ b/packages/website-ue/src/components/ErrorWrapper/index.tsx @@ -0,0 +1,84 @@ +import { useState, type ReactNode } from "react"; +import { + ErrorBoundary, + getErrorMessage, + type FallbackProps, +} from "react-error-boundary"; +import { discordLink } from "../../config/socials"; +import { Button } from "../Button"; +import { Code } from "../Code"; +import { Heading } from "../Heading"; +import { Link } from "../Link"; +import { Text } from "../Text"; +import styles from "./index.module.css"; + +interface Props { + children: ReactNode; +} + +export function ErrorWrapper({ children }: Props) { + return ( + }> + {children} + + ); +} + +function Fallback({ error, resetErrorBoundary }: FallbackProps) { + const [showError, setShowError] = useState(false); + + let body: string | undefined; + + if (error instanceof Error) { + body = error.stack || getErrorMessage(error); + } else { + body = getErrorMessage(error); + } + + body ??= "No error message"; + + return ( +
+
+ BlitzKit crashed + Sorry about that! You have a couple of options. +
+ + {showError && ( + + {body} +
+ + )} + +
+ {!showError && ( + + )} + + {showError && ( + + )} + + + + + + + + + + +
+
+ ); +} diff --git a/packages/website-ue/src/components/TankopediaLoadout/index.tsx b/packages/website-ue/src/components/TankopediaLoadout/index.tsx index 075228b31..b1cc21a1e 100644 --- a/packages/website-ue/src/components/TankopediaLoadout/index.tsx +++ b/packages/website-ue/src/components/TankopediaLoadout/index.tsx @@ -136,10 +136,6 @@ function EquipmentOption({ state.protagonist.equipment[equipmentIndex] === optionIndex, ); - if (typeof window !== "undefined") { - throw "test error"; - } - return (
- -