summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts')
-rw-r--r--packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts33
1 files changed, 19 insertions, 14 deletions
diff --git a/packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts b/packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts
index 6ceae2d47..6907a247d 100644
--- a/packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useSelectedExchange.ts
@@ -19,13 +19,14 @@ 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";
@@ -39,7 +40,7 @@ export namespace State {
onCancel: () => Promise<void>;
list: ExchangeListItem[];
currency: string;
- currentExchange: string;
+ initialValue: string;
}
}
@@ -64,31 +65,35 @@ export function useSelectedExchange({
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);
@@ -131,6 +136,6 @@ export function useSelectedExchange({
doSelect: {
onClick: pushAlertOnError(async () => setIsSelecting(true)),
},
- selected: listCurrency[0],
+ selected: exchangesWithThisCurrency[0],
};
}