aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2022-11-18 11:29:24 -0300
committerSebastian <sebasjm@gmail.com>2022-11-18 11:29:24 -0300
commitd8088e30da7048fb8fa79cc1aa1a3240513309c6 (patch)
treee7469c187b77a81beee0490e88f86de14a85ad14 /packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts
parent6dc4fda73ac3f69af3a18d71f49c815ab6dbda21 (diff)
downloadwallet-core-d8088e30da7048fb8fa79cc1aa1a3240513309c6.tar.xz
fix #7394
Diffstat (limited to 'packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts')
-rw-r--r--packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts30
1 files changed, 17 insertions, 13 deletions
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts b/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts
index 0a66dc381..39fbb6ce2 100644
--- a/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts
+++ b/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/state.ts
@@ -38,30 +38,34 @@ export function useComponentState(
}
const [value, setValue] = useState(String(initialValue));
+ const selectedIdx = parseInt(value, 10);
+ const selectedExchange =
+ exchanges.length == 0 ? undefined : exchanges[selectedIdx];
+
+ const comparingExchanges = selectedIdx !== initialValue;
+
+ const initialExchange =
+ comparingExchanges ? exchanges[initialValue] : undefined;
+
const hook = useAsyncAsHook(async () => {
- const selectedIdx = parseInt(value, 10);
- const selectedExchange =
- exchanges.length == 0 ? undefined : exchanges[selectedIdx];
const selected = !selectedExchange
? undefined
: await api.wallet.call(WalletApiOperation.GetExchangeDetailedInfo, {
- exchangeBaseUrl: selectedExchange.exchangeBaseUrl,
- });
+ exchangeBaseUrl: selectedExchange.exchangeBaseUrl,
+ });
- const initialExchange =
- selectedIdx === initialValue ? undefined : exchanges[initialValue];
const original = !initialExchange
? undefined
: await api.wallet.call(WalletApiOperation.GetExchangeDetailedInfo, {
- exchangeBaseUrl: initialExchange.exchangeBaseUrl,
- });
+ exchangeBaseUrl: initialExchange.exchangeBaseUrl,
+ });
return {
exchanges,
selected: selected?.exchange,
original: original?.exchange,
};
- }, [value]);
+ }, [selectedExchange, initialExchange]);
const [showingTos, setShowingTos] = useState<string | undefined>(undefined);
const [showingPrivacy, setShowingPrivacy] = useState<string | undefined>(
@@ -83,8 +87,7 @@ export function useComponentState(
const { selected, original } = hook.response;
- if (!selected) {
- //!selected <=> exchanges.length === 0
+ if (selectedExchange === undefined || !selected) {
return {
status: "no-exchange",
error: undefined,
@@ -118,7 +121,7 @@ export function useComponentState(
};
}
- if (!original) {
+ if (!comparingExchanges || !original) {
// !original <=> selected == original
return {
status: "ready",
@@ -147,6 +150,7 @@ export function useComponentState(
};
}
+ //this may be expensive, useMemo
const pairTimeline: DenomOperationMap<FeeDescription[]> = {
deposit: createPairTimeline(
selected.denomFees.deposit,