diff --git a/packages/shared/modals/AddWalletModal.tsx b/packages/shared/modals/AddWalletModal.tsx index e1702b490..1ad6ee80f 100644 --- a/packages/shared/modals/AddWalletModal.tsx +++ b/packages/shared/modals/AddWalletModal.tsx @@ -16,6 +16,7 @@ import { tk } from '@tonkeeper/mobile/src/wallet'; import { useUnlockVault } from '@tonkeeper/mobile/src/core/ModalContainer/NFTOperations/useUnlockVault'; import { getLastEnteredPasscode } from '@tonkeeper/mobile/src/store/wallet/sagas'; import { config } from '@tonkeeper/mobile/src/config'; +import { InteractionManager } from 'react-native'; interface AddWalletModalProps { isTonConnect?: boolean; @@ -89,7 +90,9 @@ export const AddWalletModal = memo(({ isTonConnect }) => { { nav.goBack(); - nav.navigate('ImportWalletStack'); + InteractionManager.runAfterInteractions(() => { + nav.navigate('ImportWalletStack'); + }); }} leftContentStyle={styles.iconContainer} leftContent={} @@ -104,7 +107,9 @@ export const AddWalletModal = memo(({ isTonConnect }) => { { nav.goBack(); - nav.navigate('AddWatchOnlyStack'); + InteractionManager.runAfterInteractions(() => { + nav.navigate('AddWatchOnlyStack'); + }); }} leftContentStyle={styles.iconContainer} leftContent={} @@ -120,9 +125,11 @@ export const AddWalletModal = memo(({ isTonConnect }) => { { nav.goBack(); - nav.navigate('ImportWalletStack', { - screen: 'ImportWallet', - params: { testnet: true }, + InteractionManager.runAfterInteractions(() => { + nav.navigate('ImportWalletStack', { + screen: 'ImportWallet', + params: { testnet: true }, + }); }); }} leftContentStyle={styles.iconContainer} diff --git a/packages/uikit/src/containers/Modal/SheetModal/SheetModal.tsx b/packages/uikit/src/containers/Modal/SheetModal/SheetModal.tsx index d59fb605b..2e330b876 100644 --- a/packages/uikit/src/containers/Modal/SheetModal/SheetModal.tsx +++ b/packages/uikit/src/containers/Modal/SheetModal/SheetModal.tsx @@ -19,6 +19,7 @@ import { useTheme } from '../../../styles'; import { useSheetInternal } from '@tonkeeper/router'; import { Easing, ReduceMotion, useReducedMotion } from 'react-native-reanimated'; +import { Handle, InteractionManager } from 'react-native'; export type SheetModalRef = BottomSheetModal; @@ -64,10 +65,15 @@ export const SheetModal = memo( return initialState === 'closed' ? -1 : 0; }, []); + const interactionHandle = useRef(null); + useEffect(() => { delegateMethods({ present: () => bottomSheetRef.current?.snapToIndex(0), - close: () => bottomSheetRef.current?.close(), + close: () => { + interactionHandle.current = InteractionManager.createInteractionHandle(); + bottomSheetRef.current?.close(); + }, }); }, []); @@ -83,6 +89,10 @@ export const SheetModal = memo( ); const handleClose = useCallback(async () => { + if (interactionHandle.current !== null) { + InteractionManager.clearInteractionHandle(interactionHandle.current); + interactionHandle.current = null; + } if (ignoreOnClose) { return; }