commit 03190b71305b6f2220c06dfd10ca8f43e864b6c9 parent a5594e72b7503dab5c66f89be1976b6fbbc380cd Author: Sebastian <sebasjm@taler-systems.com> Date: Mon, 1 Jun 2026 16:41:13 -0300 general safety: do not render when there is a runtime error Diffstat:
10 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/packages/aml-backoffice-ui/src/ExchangeAmlFrame.tsx b/packages/aml-backoffice-ui/src/ExchangeAmlFrame.tsx @@ -47,7 +47,7 @@ export function ExchangeAmlFrame({ const { i18n } = useTranslationContext(); const [{ showDebugInfo }, update] = useCommonPreferences(); - useRenderErrorReport({ + const failed = useRenderErrorReport({ hash: __GIT_HASH__, version: __VERSION__, }); @@ -156,7 +156,7 @@ export function ExchangeAmlFrame({ {Navigation === undefined ? undefined : <Navigation />} <div class="flex mx-auto my-4 min-w-80"> <main class="block rounded-lg bg-white px-5 py-6 shadow min-w-xl"> - {children} + {!failed ? children : undefined} </main> </div> </div> diff --git a/packages/bank-ui/src/Routing.tsx b/packages/bank-ui/src/Routing.tsx @@ -65,7 +65,6 @@ const TALER_SCREEN_ID = 100; Routing.SCREEN_ID = TALER_SCREEN_ID; export function Routing(): VNode { const session = useSessionState(); - useRefreshSessionBeforeExpires(); if (session.state.status === "loggedIn") { diff --git a/packages/bank-ui/src/pages/BankFrame.tsx b/packages/bank-ui/src/pages/BankFrame.tsx @@ -72,7 +72,7 @@ export function BankFrame({ const config = d === undefined ? undefined : d.config; const authenticator = d === undefined ? undefined : d.lib.bank; - useRenderErrorReport({ + const failed = useRenderErrorReport({ hash: __GIT_HASH__, version: __VERSION__, }); @@ -215,7 +215,7 @@ export function BankFrame({ <div class="mx-auto max-w-7xl px-4 pb-4 sm:px-6 lg:px-8"> <div class="rounded-lg bg-white px-5 py-6 shadow sm:px-6"> - {children} + {!failed ? children : undefined} </div> </div> </main> diff --git a/packages/bank-ui/src/pages/PaymentOptions.tsx b/packages/bank-ui/src/pages/PaymentOptions.tsx @@ -20,10 +20,9 @@ import { useTranslationContext, } from "@gnu-taler/web-util/browser"; import { Fragment, VNode, h } from "preact"; -import { useBankState } from "../hooks/bank-state.js"; import { PaytoWireTransferForm } from "./PaytoWireTransferForm.js"; import { WalletWithdrawForm } from "./WalletWithdrawForm.js"; -import { IntAmountJson, IntAmounts } from "./regional/CreateCashout.js"; +import { IntAmountJson } from "./regional/CreateCashout.js"; const TALER_SCREEN_ID = 105; diff --git a/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx b/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx @@ -146,6 +146,10 @@ export function PaytoWireTransferForm({ let parsedURI: Paytos.URI | undefined; let sendingAmount: AmountString | undefined; + if (account === "ASD") { + debugger; + throw Error("asd"); + } if (isRawPayto) { const res = !rawPaytoInput ? undefined : Paytos.fromString(rawPaytoInput); diff --git a/packages/bank-ui/src/pages/WireTransfer.tsx b/packages/bank-ui/src/pages/WireTransfer.tsx @@ -26,11 +26,11 @@ import { } from "@gnu-taler/web-util/browser"; import { Fragment, VNode, h } from "preact"; +import { RouteDefinition } from "@gnu-taler/web-util/browser"; import { useAccountDetails } from "../hooks/account.js"; import { useSessionState } from "../hooks/session.js"; import { LoginForm } from "./LoginForm.js"; import { PaytoWireTransferForm } from "./PaytoWireTransferForm.js"; -import { RouteDefinition } from "@gnu-taler/web-util/browser"; import { IntAmounts } from "./regional/CreateCashout.js"; const TALER_SCREEN_ID = 113; diff --git a/packages/challenger-ui/src/pages/Frame.tsx b/packages/challenger-ui/src/pages/Frame.tsx @@ -36,7 +36,7 @@ export function Frame({ children }: { children: ComponentChildren }): VNode { const { i18n } = useTranslationContext(); - useRenderErrorReport({ + const failed = useRenderErrorReport({ hash: __GIT_HASH__, version: __VERSION__, }); @@ -105,7 +105,7 @@ export function Frame({ children }: { children: ComponentChildren }): VNode { </div> </div> - <main class="flex-1">{children}</main> + <main class="flex-1">{!failed ? children : undefined}</main> <Footer testingUrlKey="challenger-base-url" diff --git a/packages/kyc-ui/src/pages/Frame.tsx b/packages/kyc-ui/src/pages/Frame.tsx @@ -48,7 +48,7 @@ export function Frame({ const notifier = useNotifierContext(); const { i18n } = useTranslationContext(); - useRenderErrorReport({ + const failed = useRenderErrorReport({ hash: __GIT_HASH__, version: __VERSION__, }); @@ -129,7 +129,7 @@ export function Frame({ </div> </div> - <main class="flex-1">{children}</main> + <main class="flex-1">{!failed ? children : undefined}</main> <Footer testingUrlKey="kyc-base-url" diff --git a/packages/merchant-backoffice-ui/src/Routing.tsx b/packages/merchant-backoffice-ui/src/Routing.tsx @@ -195,7 +195,7 @@ export function Routing(_p: Props): VNode { const { state, config } = useSessionContext(); const { i18n } = useTranslationContext(); - useRenderErrorReport({ version: __VERSION__, hash: __GIT_HASH__ }); + const failed = useRenderErrorReport({ version: __VERSION__, hash: __GIT_HASH__ }); const [preference] = usePreference(); const now = AbsoluteTime.now(); @@ -229,6 +229,9 @@ export function Routing(_p: Props): VNode { const shouldLogin = state.status === "loggedOut" || unauthorized; + if (failed) { + return <NotConnectedAppMenu title={i18n.str`Error`} /> + } if (shouldLogin) { return ( <Fragment> diff --git a/packages/web-util/src/hooks/errors.ts b/packages/web-util/src/hooks/errors.ts @@ -8,10 +8,8 @@ export function useRenderErrorReport(appInfo: { }) { const { i18n } = useTranslationContext(); const { displayError } = useNotificationContext(); - useErrorBoundary((error) => { + const [failed] = useErrorBoundary((error) => { if (error) { - // const currentVNode = getCurrentVNode(); - const description = i18n.str`The process runtime thrown an Error which was unexpected and not properly handled. To report click the copy button and create an issue in https://bugs.taler.net.`; displayError( i18n.str`Render error.`, @@ -27,6 +25,7 @@ export function useRenderErrorReport(appInfo: { console.log(JSON.stringify(error, Object.getOwnPropertyNames(error), 2)); } }); + return failed !== undefined; } function convert(error: any) { @@ -39,3 +38,4 @@ function convert(error: any) { } return error; } +