Skip to content

Commit 185e5ad

Browse files
committed
Use CommonAction.reset to dismissModal when wide rhp is visible
1 parent 8f4f32d commit 185e5ad

2 files changed

Lines changed: 20 additions & 21 deletions

File tree

src/libs/Navigation/AppNavigator/AuthScreens.tsx

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type {RouteProp} from '@react-navigation/native';
2-
import {StackActions} from '@react-navigation/native';
2+
import {StackActions, useNavigation} from '@react-navigation/native';
33
import type {StackCardInterpolationProps} from '@react-navigation/stack';
44
import React, {memo, useContext, useEffect, useMemo, useRef, useState} from 'react';
55
import ComposeProviders from '@components/ComposeProviders';
@@ -32,7 +32,7 @@ import KeyboardShortcut from '@libs/KeyboardShortcut';
3232
import Log from '@libs/Log';
3333
import NavBarManager from '@libs/NavBarManager';
3434
import getCurrentUrl from '@libs/Navigation/currentUrl';
35-
import Navigation, {navigationRef} from '@libs/Navigation/Navigation';
35+
import Navigation from '@libs/Navigation/Navigation';
3636
import Animations, {InternalPlatformAnimations} from '@libs/Navigation/PlatformStackNavigation/navigationOptions/animation';
3737
import Presentation from '@libs/Navigation/PlatformStackNavigation/navigationOptions/presentation';
3838
import type {AuthScreensParamList} from '@libs/Navigation/types';
@@ -357,16 +357,6 @@ function AuthScreens() {
357357
return;
358358
}
359359

360-
const rootState = navigationRef.getRootState();
361-
const lastRoute = rootState.routes.at(-1);
362-
if (lastRoute?.name === NAVIGATORS.RIGHT_MODAL_NAVIGATOR) {
363-
const rhpRoutes = lastRoute?.state?.routes;
364-
if (rhpRoutes?.at(0)?.name === SCREENS.RIGHT_MODAL.SEARCH_REPORT && rhpRoutes?.length > 1) {
365-
navigationRef.dispatch({...StackActions.popToTop(), target: lastRoute.state?.key});
366-
return;
367-
}
368-
}
369-
370360
Navigation.dismissModal();
371361
},
372362
shortcutConfig.descriptionKey,

src/libs/Navigation/AppNavigator/createRootStackNavigator/GetStateForActionHandlers.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import type {CommonActions, RouterConfigOptions, StackActionType, StackNavigationState} from '@react-navigation/native';
2-
import {StackActions} from '@react-navigation/native';
1+
import type {RouterConfigOptions, StackActionType, StackNavigationState} from '@react-navigation/native';
2+
import {CommonActions, StackActions} from '@react-navigation/native';
33
import type {ParamListBase, Router} from '@react-navigation/routers';
44
import SCREENS_WITH_NAVIGATION_TAB_BAR from '@components/Navigation/TopLevelNavigationTabBar/SCREENS_WITH_NAVIGATION_TAB_BAR';
55
import getIsNarrowLayout from '@libs/getIsNarrowLayout';
@@ -152,17 +152,26 @@ function handleDismissModalAction(
152152
return null;
153153
}
154154

155-
let newAction = StackActions.pop();
156-
157-
if (lastRoute?.name === NAVIGATORS.RIGHT_MODAL_NAVIGATOR) {
155+
if (lastRoute?.name === NAVIGATORS.RIGHT_MODAL_NAVIGATOR && lastRoute?.state) {
158156
const rhpRoutes = lastRoute?.state?.routes;
159157
// This handles closing the modal when wide rhp is visible
160-
if (rhpRoutes?.at(0)?.name === SCREENS.RIGHT_MODAL.SEARCH_REPORT && rhpRoutes?.length > 1) {
161-
newAction = {...StackActions.popToTop(), target: lastRoute.state?.key};
162-
return;
158+
const wideRhpIndex = rhpRoutes.findLastIndex((rhpRoute) => rhpRoute.name === SCREENS.RIGHT_MODAL.SEARCH_REPORT);
159+
if (wideRhpIndex > -1 && wideRhpIndex !== rhpRoutes.length - 1) {
160+
const modifiedRhp = {
161+
...lastRoute,
162+
state: {
163+
...lastRoute.state,
164+
index: wideRhpIndex,
165+
routes: lastRoute.state.routes.slice(0, wideRhpIndex + 1),
166+
history: lastRoute.state.history?.slice(0, wideRhpIndex + 1),
167+
},
168+
};
169+
const modifiedState = {...state, routes: [...state.routes.slice(0, -1), modifiedRhp]};
170+
const action = CommonActions.reset(modifiedState);
171+
return stackRouter.getStateForAction(state, action, configOptions);
163172
}
164173
}
165-
174+
const newAction = StackActions.pop();
166175
return stackRouter.getStateForAction(state, newAction, configOptions);
167176
}
168177

0 commit comments

Comments
 (0)