From d8088e30da7048fb8fa79cc1aa1a3240513309c6 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 18 Nov 2022 11:29:24 -0300 Subject: fix #7394 --- .../src/wallet/ExchangeSelection/state.ts | 30 ++++--- .../src/wallet/ExchangeSelection/views.tsx | 97 +++++++++++++++------- 2 files changed, 82 insertions(+), 45 deletions(-) (limited to 'packages/taler-wallet-webextension/src/wallet/ExchangeSelection') 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(undefined); const [showingPrivacy, setShowingPrivacy] = useState( @@ -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 = { deposit: createPairTimeline( selected.denomFees.deposit, diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/views.tsx b/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/views.tsx index be059630f..95ab55261 100644 --- a/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/views.tsx +++ b/packages/taler-wallet-webextension/src/wallet/ExchangeSelection/views.tsx @@ -262,7 +262,10 @@ export function ComparingView({ Denomination - Fee + Current + + + Selected Until @@ -270,7 +273,10 @@ export function ComparingView({ - + Number(a) - Number(b)} + />

@@ -292,7 +298,10 @@ export function ComparingView({ - + Number(a) - Number(b)} + />

@@ -314,7 +323,10 @@ export function ComparingView({ - + Number(a) - Number(b)} + /> {" "}

@@ -336,7 +348,10 @@ export function ComparingView({ - + Number(a) - Number(b)} + /> {" "} @@ -689,7 +704,7 @@ function FeePairRowsGroup({ infos }: { infos: FeeDescriptionPair[] }): VNode { {hasMoreInfo && main ? ( --- )} -