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.ts41
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],
};
}