mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-03-13 19:16:52 +01:00
wip
This commit is contained in:
parent
2317d0a4cf
commit
6afc6624eb
2 changed files with 21 additions and 46 deletions
|
@ -12,7 +12,7 @@ import {
|
|||
ActivityIndicator,
|
||||
} from 'react-native';
|
||||
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
||||
import { useFocusEffect, useNavigation } from '@react-navigation/native';
|
||||
import { useFocusEffect, useNavigation, usePreventRemove } from '@react-navigation/native';
|
||||
import { useTheme } from '../../components/themes';
|
||||
import { useExtendedNavigation } from '../../hooks/useExtendedNavigation';
|
||||
import loc from '../../loc';
|
||||
|
@ -197,7 +197,6 @@ const ManageWallets: React.FC = () => {
|
|||
const navigation = useNavigation();
|
||||
const debouncedSearchQuery = useDebounce(state.searchQuery, 300);
|
||||
const bounceAnim = useBounceAnimation(state.searchQuery);
|
||||
const beforeRemoveListenerRef = useRef<(() => void) | null>(null);
|
||||
const stylesHook = {
|
||||
root: {
|
||||
backgroundColor: colors.elevated,
|
||||
|
@ -225,6 +224,23 @@ const ManageWallets: React.FC = () => {
|
|||
}
|
||||
}, [debouncedSearchQuery, state.order]);
|
||||
|
||||
const hasUnsavedChanges = useMemo(() => {
|
||||
return JSON.stringify(walletsRef.current) !== JSON.stringify(state.tempOrder.map(item => item.data));
|
||||
}, [state.tempOrder]);
|
||||
|
||||
usePreventRemove(hasUnsavedChanges, async () => {
|
||||
await new Promise<void>(resolve => {
|
||||
Alert.alert(
|
||||
loc._.discard_changes,
|
||||
loc._.discard_changes_explain,
|
||||
[
|
||||
{ text: loc._.cancel, style: 'cancel', onPress: () => resolve() },
|
||||
{ text: loc._.ok, style: 'default', onPress: () => resolve() },
|
||||
]
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
const handleClose = useCallback(() => {
|
||||
if (state.searchQuery.length === 0 && !state.isSearchFocused) {
|
||||
const newWalletOrder = state.tempOrder
|
||||
|
@ -243,20 +259,12 @@ const ManageWallets: React.FC = () => {
|
|||
}
|
||||
});
|
||||
|
||||
if (beforeRemoveListenerRef.current) {
|
||||
navigation.removeListener('beforeRemove', beforeRemoveListenerRef.current);
|
||||
}
|
||||
|
||||
goBack();
|
||||
} else {
|
||||
dispatch({ type: SET_SEARCH_QUERY, payload: '' });
|
||||
dispatch({ type: SET_IS_SEARCH_FOCUSED, payload: false });
|
||||
}
|
||||
}, [goBack, setWalletsWithNewOrder, state.searchQuery, state.isSearchFocused, state.tempOrder, navigation, handleWalletDeletion]);
|
||||
|
||||
const hasUnsavedChanges = useMemo(() => {
|
||||
return JSON.stringify(walletsRef.current) !== JSON.stringify(state.tempOrder.map(item => item.data));
|
||||
}, [state.tempOrder]);
|
||||
}, [goBack, setWalletsWithNewOrder, state.searchQuery, state.isSearchFocused, state.tempOrder, handleWalletDeletion]);
|
||||
|
||||
const HeaderLeftButton = useMemo(
|
||||
() => (
|
||||
|
@ -298,45 +306,12 @@ const ManageWallets: React.FC = () => {
|
|||
useFocusEffect(
|
||||
useCallback(() => {
|
||||
setIsDrawerShouldHide(true);
|
||||
const beforeRemoveListener = (e: { preventDefault: () => void; data: { action: any } }) => {
|
||||
if (!hasUnsavedChanges) {
|
||||
return;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
Alert.alert(loc._.discard_changes, loc._.discard_changes_explain, [
|
||||
{ text: loc._.cancel, style: 'cancel', onPress: () => {} },
|
||||
{
|
||||
text: loc._.ok,
|
||||
style: 'default',
|
||||
onPress: () => navigation.dispatch(e.data.action),
|
||||
},
|
||||
]);
|
||||
};
|
||||
|
||||
// @ts-ignore: fix later
|
||||
beforeRemoveListenerRef.current = beforeRemoveListener;
|
||||
|
||||
navigation.addListener('beforeRemove', beforeRemoveListener);
|
||||
|
||||
return () => {
|
||||
if (beforeRemoveListenerRef.current) {
|
||||
navigation.removeListener('beforeRemove', beforeRemoveListenerRef.current);
|
||||
}
|
||||
setIsDrawerShouldHide(false);
|
||||
};
|
||||
}, [hasUnsavedChanges, navigation, setIsDrawerShouldHide]),
|
||||
}, [setIsDrawerShouldHide]),
|
||||
);
|
||||
|
||||
// Ensure the listener is re-added every time there are unsaved changes
|
||||
useEffect(() => {
|
||||
if (beforeRemoveListenerRef.current) {
|
||||
navigation.removeListener('beforeRemove', beforeRemoveListenerRef.current);
|
||||
navigation.addListener('beforeRemove', beforeRemoveListenerRef.current);
|
||||
}
|
||||
}, [hasUnsavedChanges, navigation]);
|
||||
|
||||
const renderHighlightedText = useCallback(
|
||||
(text: string, query: string) => {
|
||||
const parts = text.split(new RegExp(`(${query})`, 'gi'));
|
||||
|
|
|
@ -164,7 +164,7 @@ const WalletTransactions: React.FC<WalletTransactionsProps> = ({ route }) => {
|
|||
|
||||
useEffect(() => {
|
||||
if (wallet && wallet.getLastTxFetch() === 0 && !isLoading) {
|
||||
debouncedRefresh().finally(() => setIsLoading(false));
|
||||
debouncedRefresh();
|
||||
}
|
||||
}, [wallet, isLoading, debouncedRefresh]);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue