diff options
author | Sebastian <sebasjm@gmail.com> | 2023-01-09 20:20:09 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-01-09 20:20:09 -0300 |
commit | 4a781bd0dd8828ce152f6ab2c3f1bbd6b5e826f7 (patch) | |
tree | 5c16976f99eb973ff62d78ed64107ca01df57b99 /packages/taler-wallet-webextension/src/wallet/ExchangeSelection | |
parent | 8a70edb2f8e235c3462127b0aa4e1b65aa1aee0b (diff) | |
download | wallet-core-4a781bd0dd8828ce152f6ab2c3f1bbd6b5e826f7.tar.xz |
fix #7153: more error handling
if handler do not trap error then fail at compile time,
all safe handlers push alert on error
errors are typed so they render good information
Diffstat (limited to 'packages/taler-wallet-webextension/src/wallet/ExchangeSelection')
-rw-r--r-- | packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts | 41 | ||||
-rw-r--r-- | packages/taler-wallet-webextension/src/wallet/ExchangeSelection/stories.tsx | 14 |
2 files changed, 28 insertions, 27 deletions
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts b/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts index cfb32cbbb..7ad11e67c 100644 --- a/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts +++ b/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts @@ -20,7 +20,7 @@ import { WalletApiOperation, } from "@gnu-taler/taler-wallet-core"; import { useState } from "preact/hooks"; -import { alertFromError } from "../../context/alert.js"; +import { alertFromError, useAlertContext } from "../../context/alert.js"; import { useBackendContext } from "../../context/backend.js"; import { useTranslationContext } from "../../context/translation.js"; import { useAsyncAsHook } from "../../hooks/useAsyncAsHook.js"; @@ -33,6 +33,7 @@ export function useComponentState({ currentExchange, }: Props): State { const api = useBackendContext(); + const { pushAlertOnError } = useAlertContext(); const { i18n } = useTranslationContext(); const initialValue = exchanges.findIndex( (e) => e.exchangeBaseUrl === currentExchange, @@ -115,7 +116,7 @@ export function useComponentState({ status: "showing-privacy", error: undefined, onClose: { - onClick: async () => setShowingPrivacy(undefined), + onClick: pushAlertOnError(async () => setShowingPrivacy(undefined)), }, exchangeUrl: showingPrivacy, }; @@ -125,7 +126,7 @@ export function useComponentState({ status: "showing-tos", error: undefined, onClose: { - onClick: async () => setShowingTos(undefined), + onClick: pushAlertOnError(async () => setShowingTos(undefined)), }, exchangeUrl: showingTos, }; @@ -138,24 +139,24 @@ export function useComponentState({ exchanges: { list: exchangeMap, value: value, - onChange: async (v) => { + onChange: pushAlertOnError(async (v) => { setValue(v); - }, + }), }, error: undefined, onClose: { - onClick: onCancel, + onClick: pushAlertOnError(onCancel), }, selected, onShowPrivacy: { - onClick: async () => { + onClick: pushAlertOnError(async () => { setShowingPrivacy(selected.exchangeBaseUrl); - }, + }), }, onShowTerms: { - onClick: async () => { + onClick: pushAlertOnError(async () => { setShowingTos(selected.exchangeBaseUrl); - }, + }), }, }; } @@ -215,30 +216,30 @@ export function useComponentState({ exchanges: { list: exchangeMap, value: value, - onChange: async (v) => { + onChange: pushAlertOnError(async (v) => { setValue(v); - }, + }), }, error: undefined, onReset: { - onClick: async () => { + onClick: pushAlertOnError(async () => { setValue(String(initialValue)); - }, + }), }, onSelect: { - onClick: async () => { + onClick: pushAlertOnError(async () => { onSelection(selected.exchangeBaseUrl); - }, + }), }, onShowPrivacy: { - onClick: async () => { + onClick: pushAlertOnError(async () => { setShowingPrivacy(selected.exchangeBaseUrl); - }, + }), }, onShowTerms: { - onClick: async () => { + onClick: pushAlertOnError(async () => { setShowingTos(selected.exchangeBaseUrl); - }, + }), }, selected, coinOperationTimeline, diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/stories.tsx b/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/stories.tsx index 05765b50a..a65f85c6a 100644 --- a/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/stories.tsx +++ b/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/stories.tsx @@ -19,14 +19,14 @@ * @author Sebastian Javier Marchano (sebasjm) */ -import { createExample } from "../../test-utils.js"; +import { tests } from "@gnu-taler/web-util/lib/index.browser"; import { ComparingView, ReadyView } from "./views.js"; export default { title: "select exchange", }; -export const Bitcoin1 = createExample(ReadyView, { +export const Bitcoin1 = tests.createExample(ReadyView, { exchanges: { list: { "0": "https://exchange.taler.ar" }, value: "0", @@ -43,7 +43,7 @@ export const Bitcoin1 = createExample(ReadyView, { onShowTerms: {}, onClose: {}, }); -export const Bitcoin2 = createExample(ReadyView, { +export const Bitcoin2 = tests.createExample(ReadyView, { exchanges: { list: { "https://exchange.taler.ar": "https://exchange.taler.ar", @@ -64,7 +64,7 @@ export const Bitcoin2 = createExample(ReadyView, { onClose: {}, }); -export const Kudos1 = createExample(ReadyView, { +export const Kudos1 = tests.createExample(ReadyView, { exchanges: { list: { "https://exchange-kudos.taler.ar": "https://exchange-kudos.taler.ar", @@ -83,7 +83,7 @@ export const Kudos1 = createExample(ReadyView, { onShowTerms: {}, onClose: {}, }); -export const Kudos2 = createExample(ReadyView, { +export const Kudos2 = tests.createExample(ReadyView, { exchanges: { list: { "https://exchange-kudos.taler.ar": "https://exchange-kudos.taler.ar", @@ -103,7 +103,7 @@ export const Kudos2 = createExample(ReadyView, { onShowTerms: {}, onClose: {}, }); -export const ComparingBitcoin = createExample(ComparingView, { +export const ComparingBitcoin = tests.createExample(ComparingView, { exchanges: { list: { "http://exchange": "http://exchange" }, value: "http://exchange", @@ -131,7 +131,7 @@ export const ComparingBitcoin = createExample(ComparingView, { missingWireTYpe: [], wireFeeTimeline: {}, }); -export const ComparingKudos = createExample(ComparingView, { +export const ComparingKudos = tests.createExample(ComparingView, { exchanges: { list: { "http://exchange": "http://exchange" }, value: "http://exchange", |