From 4cd2ceed776b1f45e08d21d42c4ebdc5865f7933 Mon Sep 17 00:00:00 2001 From: Oleksii Trukhanov Date: Fri, 25 Aug 2023 19:48:27 +0300 Subject: [PATCH] DASH-591 Fix fio raw abi calls on selection page. --- client/src/api/fio.ts | 14 +++++++++++ .../FioAddressSelectionPageContext.tsx | 23 ++++++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/client/src/api/fio.ts b/client/src/api/fio.ts index 09eb8fe29..eb65fb2f9 100644 --- a/client/src/api/fio.ts +++ b/client/src/api/fio.ts @@ -1,5 +1,6 @@ import { FIOSDK } from '@fioprotocol/fiosdk'; import { Constants as sdkConstants } from '@fioprotocol/fiosdk/lib/utils/constants'; +import { Transactions as sdkTransactions } from '@fioprotocol/fiosdk/lib/transactions/Transactions'; import { createHash } from 'crypto-browserify'; import superagent from 'superagent'; import { AvailabilityResponse } from '@fioprotocol/fiosdk/src/entities/AvailabilityResponse'; @@ -853,4 +854,17 @@ export default class Fio { action: 'getObtData', }); }; + + getRawAbi = async (): Promise => { + for (const accountName of sdkConstants.rawAbiAccountName) { + try { + if (!sdkTransactions.abiMap.get(accountName)) { + const abiResponse = await this.publicFioSDK.getAbi(accountName); + sdkTransactions.abiMap.set(abiResponse.account_name, abiResponse); + } + } catch (e) { + log.error('Raw Abi Error:', e); + } + } + }; } diff --git a/client/src/pages/FioAddressSelectionPage/FioAddressSelectionPageContext.tsx b/client/src/pages/FioAddressSelectionPage/FioAddressSelectionPageContext.tsx index 4cacd2757..c4db8b4b9 100644 --- a/client/src/pages/FioAddressSelectionPage/FioAddressSelectionPageContext.tsx +++ b/client/src/pages/FioAddressSelectionPage/FioAddressSelectionPageContext.tsx @@ -37,6 +37,8 @@ import MathOp from '../../util/math'; import { convertFioPrices } from '../../util/prices'; import { setFioName } from '../../utils'; import { fireAnalyticsEventDebounced } from '../../util/analytics'; +import useEffectOnce from '../../hooks/general'; +import apis from '../../api'; import { DomainsArrItemType, @@ -296,6 +298,8 @@ export const useContext = (): UseContextProps => { const [previousAddressValue, setPreviousAddressValue] = useState( null, ); + const [isRawAbiLoading, toggleIsRawAbiLoading] = useState(false); + const [hasRawAbiLoaded, setIsRawAbiLoaded] = useState(false); const cartHasFreeItem = cartItems.some( cartItem => cartItem.domainType === DOMAIN_TYPE.FREE, @@ -549,14 +553,23 @@ export const useContext = (): UseContextProps => { addCartItem(selectedItem); }; + const getFioRawAbis = useCallback(async () => { + toggleIsRawAbiLoading(true); + + await apis.fio.getRawAbi(); + + setIsRawAbiLoaded(true); + toggleIsRawAbiLoading(false); + }, []); + useEffect(() => { dispatch(getDomains()); }, [dispatch]); useEffect(() => { - if (domainsLoaing) return; + if (domainsLoaing || !hasRawAbiLoaded) return; validateAddress(addressValue); - }, [addressValue, domainsLoaing, validateAddress]); + }, [addressValue, domainsLoaing, hasRawAbiLoaded, validateAddress]); useEffect(() => { for (const fioWallet of fioWallets) { @@ -627,11 +640,15 @@ export const useContext = (): UseContextProps => { roe, ]); + useEffectOnce(() => { + getFioRawAbis(); + }, []); + return { additionalItemsList, addressValue, error, - loading: loading || domainsLoaing, + loading: loading || domainsLoaing || isRawAbiLoading, suggestedItemsList, usersItemsList, setAddressValue,