diff options
Diffstat (limited to 'packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts')
-rw-r--r-- | packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts b/packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts index c04dcce84..6907a247d 100644 --- a/packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts +++ b/packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts @@ -16,15 +16,17 @@ import { ExchangeListItem } from "@gnu-taler/taler-util"; import { useState } from "preact/hooks"; +import { useAlertContext } from "../context/alert.js"; import { ButtonHandler } from "../mui/handlers.js"; -type State = State.Ready | State.NoExchange | State.Selecting; +type State = State.Ready | State.NoExchangeFound | State.Selecting; export namespace State { - export interface NoExchange { - status: "no-exchange"; + export interface NoExchangeFound { + status: "no-exchange-found"; error: undefined; - currency: string | undefined; + currency: string; + defaultExchange: string | undefined; } export interface Ready { status: "ready"; @@ -38,7 +40,7 @@ export namespace State { onCancel: () => Promise<void>; list: ExchangeListItem[]; currency: string; - currentExchange: string; + initialValue: string; } } @@ -59,34 +61,39 @@ export function useSelectedExchange({ const [selectedExchange, setSelectedExchange] = useState<string | undefined>( undefined, ); + const { pushAlertOnError } = useAlertContext(); if (!list.length) { return { - status: "no-exchange", + status: "no-exchange-found", error: undefined, - currency: undefined, + currency, + defaultExchange, }; } - const listCurrency = list.filter((e) => e.currency === currency); - if (!listCurrency.length) { + const exchangesWithThisCurrency = list.filter((e) => e.currency === currency); + if (!exchangesWithThisCurrency.length) { // there should be at least one exchange for this currency return { - status: "no-exchange", + status: "no-exchange-found", error: undefined, currency, + defaultExchange, }; } if (isSelecting) { const currentExchange = - selectedExchange ?? defaultExchange ?? listCurrency[0].exchangeBaseUrl; + selectedExchange ?? + defaultExchange ?? + exchangesWithThisCurrency[0].exchangeBaseUrl; return { status: "selecting-exchange", error: undefined, - list: listCurrency, + list: exchangesWithThisCurrency, currency, - currentExchange: currentExchange, + initialValue: currentExchange, onSelection: async (exchangeBaseUrl: string) => { setIsSelecting(false); setSelectedExchange(exchangeBaseUrl); @@ -105,7 +112,7 @@ export function useSelectedExchange({ return { status: "ready", doSelect: { - onClick: async () => setIsSelecting(true), + onClick: pushAlertOnError(async () => setIsSelecting(true)), }, selected: found, }; @@ -118,7 +125,7 @@ export function useSelectedExchange({ return { status: "ready", doSelect: { - onClick: async () => setIsSelecting(true), + onClick: pushAlertOnError(async () => setIsSelecting(true)), }, selected: found, }; @@ -127,8 +134,8 @@ export function useSelectedExchange({ return { status: "ready", doSelect: { - onClick: async () => setIsSelecting(true), + onClick: pushAlertOnError(async () => setIsSelecting(true)), }, - selected: listCurrency[0], + selected: exchangesWithThisCurrency[0], }; } |