diff --git a/app/components/admin/homeComponents/currencyPicker/displayCurrencySelect.js b/app/components/admin/homeComponents/currencyPicker/displayCurrencySelect.js index a7ff4fec..91fc36db 100644 --- a/app/components/admin/homeComponents/currencyPicker/displayCurrencySelect.js +++ b/app/components/admin/homeComponents/currencyPicker/displayCurrencySelect.js @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { FlatList, StyleSheet, TouchableOpacity, View } from 'react-native'; import { useNavigation } from '@react-navigation/native'; import { useTranslation } from 'react-i18next'; @@ -21,6 +21,9 @@ import { HIDDEN_OPACITY, INSET_WINDOW_WIDTH, } from '../../../../constants/theme'; +import FullLoadingScreen from '../../../../functions/CustomElements/loadingScreen'; +import loadNewFiatData from '../../../../functions/saveAndUpdateFiatData'; +import { useKeysContext } from '../../../../../context-store/keys'; export default function DisplayCurrencySelect({ currentCurrency, @@ -33,29 +36,58 @@ export default function DisplayCurrencySelect({ const { masterInfoObject } = useGlobalContextProvider(); const { theme, darkModeType } = useGlobalThemeContext(); const { screenDimensions } = useAppStatus(); + const { contactsPrivateKey, publicKey } = useKeysContext(); const { backgroundColor, backgroundOffset, textColor } = GetThemeColors(); const normalizedCurrentCurrency = normalizeDisplayCurrency(currentCurrency); const deviceCurrency = ( masterInfoObject?.fiatCurrency || 'USD' ).toUpperCase(); + const [isLoadingNewRate, setIsLoadingNewRate] = useState(false); + const isMounted = useRef(false); + const hasSelected = useRef(false); const cardBackground = theme && darkModeType ? backgroundColor : backgroundOffset; const coinBackground = theme && darkModeType ? backgroundOffset : backgroundColor; + useEffect(() => { + isMounted.current = true; + return () => { + isMounted.current = false; + }; + }, []); + useEffect(() => { setContentHeight(screenDimensions.height * 0.6); }, [setContentHeight, screenDimensions.height]); const onSelect = useCallback( - currency => { + async currency => { + if (hasSelected.current) return; + hasSelected.current = true; + setIsLoadingNewRate(true); + const normalizedCode = normalizeDisplayCurrency(currency); + await loadNewFiatData( + normalizedCode, + contactsPrivateKey, + publicKey, + masterInfoObject, + ); + if (!isMounted.current) return; handleBackPressFunction(() => { navigate.goBack(); onSelectCurrency?.(currency); }); }, - [handleBackPressFunction, navigate, onSelectCurrency], + [ + handleBackPressFunction, + navigate, + onSelectCurrency, + contactsPrivateKey, + publicKey, + masterInfoObject, + ], ); const pinnedRows = useMemo(() => { @@ -273,6 +305,15 @@ export default function DisplayCurrencySelect({ ); + if (isLoadingNewRate) { + return ( + + ); + } + return (