From 94af64db3e22781ba86874e19c0bba465a5bb90f Mon Sep 17 00:00:00 2001 From: Kelbie Date: Sat, 5 Jul 2025 13:38:11 +0100 Subject: [PATCH] fix: update account screen when mint changes --- app/(drawer)/(tabs)/index.tsx | 41 ++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/app/(drawer)/(tabs)/index.tsx b/app/(drawer)/(tabs)/index.tsx index e108b889..a79b7e8b 100644 --- a/app/(drawer)/(tabs)/index.tsx +++ b/app/(drawer)/(tabs)/index.tsx @@ -1,5 +1,12 @@ import 'app/global'; -import React, { memo, useCallback, useState, useLayoutEffect } from 'react'; +import React, { + memo, + useCallback, + useState, + useLayoutEffect, + useEffect, +} from 'react'; +import { useFocusEffect } from '@react-navigation/native'; import { useSelector } from 'react-redux'; import 'react-native-get-random-values'; import { RefreshControl, ScrollView, StyleSheet } from 'react-native'; @@ -10,6 +17,7 @@ import { useCashu, appendTransactionsV2, memoizedGetSelectedMint, + memoizedGetAllBalancesMultipleCurrencies, memoizedGetTransactionByMatcher, TransactionData, } from 'helper/redux/cashu'; @@ -149,6 +157,7 @@ function TabOneScreen() { const currentProfile = useSelector(memoizedGetCurrentProfile); const settings = useSelector(memoizedGetSettings); const selectedMint = useSelector(memoizedGetSelectedMint); + const balances = useSelector(memoizedGetAllBalancesMultipleCurrencies); const navigation = useTypedNavigation(); useLayoutEffect(() => { @@ -161,6 +170,36 @@ function TabOneScreen() { const image = useSelector(memoizedGetBackgroundImage); + const availableUnits = React.useMemo( + () => + balances + .filter((b) => b.mintUrl === selectedMint) + .map((b) => b.unit.toLowerCase()), + [balances, selectedMint] + ); + + useEffect(() => { + if (!availableUnits.includes(account.unit)) { + const first = availableUnits[0]; + const found = accounts.find((a) => a.unit === first); + if (found) { + setAccount(found); + } + } + }, [availableUnits]); + + useFocusEffect( + useCallback(() => { + if (!availableUnits.includes(account.unit)) { + const first = availableUnits[0]; + const found = accounts.find((a) => a.unit === first); + if (found) { + setAccount(found); + } + } + }, [availableUnits, account.unit]) + ); + if (!settings?.termsAccepted) { return (