diff --git a/app/src/screens/verification/DocumentSelectorForProvingScreen.tsx b/app/src/screens/verification/DocumentSelectorForProvingScreen.tsx index a370ea643..1efae78a0 100644 --- a/app/src/screens/verification/DocumentSelectorForProvingScreen.tsx +++ b/app/src/screens/verification/DocumentSelectorForProvingScreen.tsx @@ -303,6 +303,43 @@ const DocumentSelectorForProvingScreen: React.FC = () => { }; }, []); + useEffect(() => { + const unsubscribe = navigation.addListener('beforeRemove', event => { + if ( + event.data.action.type !== 'GO_BACK' && + event.data.action.type !== 'POP' + ) { + return; + } + + event.preventDefault(); + const state = navigation.getState(); + const routerIndex = state.routes.findIndex( + route => route.name === 'ProvingScreenRouter', + ); + + if (routerIndex > 0) { + const targetIndex = routerIndex - 1; + const routes = state.routes.slice(0, targetIndex + 1).map(route => ({ + name: route.name as keyof RootStackParamList, + params: route.params, + })); + navigation.reset({ + index: targetIndex, + routes, + }); + return; + } + + navigation.reset({ + index: 0, + routes: [{ name: 'Home' }], + }); + }); + + return unsubscribe; + }, [navigation]); + const documents = useMemo(() => { return documentCatalog.documents .map(metadata => { diff --git a/app/src/screens/verification/ProveScreen.tsx b/app/src/screens/verification/ProveScreen.tsx index 6376bdd32..e2443ed2b 100644 --- a/app/src/screens/verification/ProveScreen.tsx +++ b/app/src/screens/verification/ProveScreen.tsx @@ -76,8 +76,9 @@ function getDocumentTypeName(category: string | undefined): string { const ProveScreen: React.FC = () => { const selfClient = useSelfClient(); const { trackEvent } = selfClient; - const { navigate } = + const navigation = useNavigation>(); + const { navigate } = navigation; const route = useRoute>(); const isFocused = useIsFocused(); const { useProvingStore, useSelfAppStore } = selfClient; @@ -101,6 +102,7 @@ const ProveScreen: React.FC = () => { ); const provingStore = useProvingStore(); const currentState = useProvingStore(state => state.currentState); + const provingSessionId = useProvingStore(state => state.uuid); const isReadyToProve = currentState === 'ready_to_prove'; const { addProofHistory } = useProofHistoryStore(); @@ -207,6 +209,22 @@ const ProveScreen: React.FC = () => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [selectedApp?.sessionId, isFocused, selfClient]); + useEffect(() => { + if (!isFocused) { + return; + } + + if ( + !selectedApp?.sessionId || + (provingSessionId && selectedApp.sessionId !== provingSessionId) + ) { + navigation.reset({ + index: 0, + routes: [{ name: 'Home' }], + }); + } + }, [isFocused, navigation, provingSessionId, selectedApp?.sessionId]); + // Enhance selfApp with user's points address if not already set useEffect(() => { console.log('useEffect selectedApp', selectedApp);