From ca721e3b412c737ee9ec8f7055f6767b215c32db Mon Sep 17 00:00:00 2001 From: qperrot Date: Wed, 11 Dec 2024 10:53:39 +0100 Subject: [PATCH] fix: changeset and move logic in getPools --- ...donkeys-think.md => pretty-hairs-laugh.md} | 1 + .../fields/ValidatorField.tsx | 43 +++++++++++-------- .../coin-cardano/src/api/getPools.ts | 14 +++++- 3 files changed, 38 insertions(+), 20 deletions(-) rename .changeset/{weak-donkeys-think.md => pretty-hairs-laugh.md} (76%) diff --git a/.changeset/weak-donkeys-think.md b/.changeset/pretty-hairs-laugh.md similarity index 76% rename from .changeset/weak-donkeys-think.md rename to .changeset/pretty-hairs-laugh.md index 21886695383c..e1066de99d30 100644 --- a/.changeset/weak-donkeys-think.md +++ b/.changeset/pretty-hairs-laugh.md @@ -1,4 +1,5 @@ --- +"@ledgerhq/coin-cardano": minor "ledger-live-desktop": minor --- diff --git a/apps/ledger-live-desktop/src/renderer/families/cardano/DelegationFlowModal/fields/ValidatorField.tsx b/apps/ledger-live-desktop/src/renderer/families/cardano/DelegationFlowModal/fields/ValidatorField.tsx index 09227da2efbe..e05f63dc8837 100644 --- a/apps/ledger-live-desktop/src/renderer/families/cardano/DelegationFlowModal/fields/ValidatorField.tsx +++ b/apps/ledger-live-desktop/src/renderer/families/cardano/DelegationFlowModal/fields/ValidatorField.tsx @@ -45,18 +45,10 @@ const ValidatorField = ({ account, delegation, onChangeValidator, selectedPoolId useEffect(() => { if (LEDGER_POOL_IDS.length) { setLedgerPoolsLoading(true); - fetchPoolDetails(account.currency, LEDGER_POOL_IDS) + const delegationPoolId = delegation?.poolId ? [delegation.poolId] : []; + fetchPoolDetails(account.currency, delegationPoolId, LEDGER_POOL_IDS) .then((apiRes: { pools: Array }) => { - const filteredPool = apiRes.pools.filter(pool => pool.poolId === delegation?.poolId); - const firstFilteredPool = filteredPool.at(0); - const firstApiResPool = apiRes.pools.at(0); - if (firstFilteredPool) { - setCurrentPool([firstFilteredPool]); - } else if (firstApiResPool) { - setCurrentPool([firstApiResPool]); - } else { - setCurrentPool([]); - } + setCurrentPool(apiRes.pools); const filteredLedgerPools = apiRes.pools.filter( pool => pool.poolId !== delegation?.poolId, ); @@ -70,6 +62,17 @@ const ValidatorField = ({ account, delegation, onChangeValidator, selectedPoolId } // eslint-disable-next-line react-hooks/exhaustive-deps }, []); + + useEffect(() => { + const selectedPool = pools.find(p => p.poolId === selectedPoolId); + if (selectedPool) { + setCurrentPool([selectedPool]); + onChangeValidator(selectedPool); + } + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [selectedPoolId]); + const onSearch = useCallback( (evt: React.ChangeEvent) => setSearchQuery(evt.target.value), [setSearchQuery], @@ -102,14 +105,16 @@ const ValidatorField = ({ account, delegation, onChangeValidator, selectedPoolId p && !poolIdsToFilterFromAllPools.includes(p.poolId)) - : pools.filter( - p => p?.poolId === selectedPoolId || p?.poolId === delegation?.poolId, - ).length > 0 - ? pools.filter( - p => p?.poolId === selectedPoolId || p?.poolId === delegation?.poolId, - ) - : currentPool + ? [ + currentPool[0], + ...pools.filter( + p => + p && + !poolIdsToFilterFromAllPools.includes(p.poolId) && + p !== currentPool[0], + ), + ] + : currentPool } style={{ flex: showAll ? "1 0 256px" : "1 0 64px", diff --git a/libs/coin-modules/coin-cardano/src/api/getPools.ts b/libs/coin-modules/coin-cardano/src/api/getPools.ts index 530fb9335bb0..435586fdf338 100644 --- a/libs/coin-modules/coin-cardano/src/api/getPools.ts +++ b/libs/coin-modules/coin-cardano/src/api/getPools.ts @@ -23,13 +23,25 @@ export async function fetchPoolList( export async function fetchPoolDetails( currency: CryptoCurrency, poolIds: Array, + ledgerPoolIds?: Array, ): Promise { + const currentPoolIds = poolIds.length == 0 ? ledgerPoolIds : poolIds; const res = await network({ method: "GET", url: isTestnet(currency) ? `${CARDANO_TESTNET_API_ENDPOINT}/v1/pool/detail` : `${CARDANO_API_ENDPOINT}/v1/pool/detail`, - params: { poolIds }, + params: { poolIds: currentPoolIds }, }); + if (!res || (res.data as APIGetPoolsDetail).pools.length === 0) { + const newRes = await network({ + method: "GET", + url: isTestnet(currency) + ? `${CARDANO_TESTNET_API_ENDPOINT}/v1/pool/detail` + : `${CARDANO_API_ENDPOINT}/v1/pool/detail`, + params: { poolIds: ledgerPoolIds }, + }); + return newRes && (newRes.data as APIGetPoolsDetail); + } return res && (res.data as APIGetPoolsDetail); }