Skip to content

Commit 42fef5f

Browse files
committed
Show animation when opening SCREENS.SEARCH.MONEY_REQUEST_REPORT from RHP
1 parent 6292431 commit 42fef5f

File tree

4 files changed

+33
-45
lines changed

4 files changed

+33
-45
lines changed

src/hooks/useSearchTypeMenu.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {useCallback, useEffect, useMemo, useState} from 'react';
1+
import React, {useCallback, useEffect, useMemo, useState} from 'react';
22
import {InteractionManager} from 'react-native';
33
import {useOnyx} from 'react-native-onyx';
44
import {usePersonalDetails} from '@components/OnyxProvider';

src/libs/Navigation/AppNavigator/AuthScreens.tsx

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,14 @@ import type * as OnyxTypes from '@src/types/onyx';
5959
import type {SelectedTimezone, Timezone} from '@src/types/onyx/PersonalDetails';
6060
import {isEmptyObject} from '@src/types/utils/EmptyObject';
6161
import type ReactComponentModule from '@src/types/utils/ReactComponentModule';
62+
import type {PlatformStackNavigationOptions} from '@libs/Navigation/PlatformStackNavigation/types';
6263
import createRootStackNavigator from './createRootStackNavigator';
63-
import {reportsSplitsWithEnteringAnimation, settingsSplitWithEnteringAnimation, workspaceSplitsWithoutEnteringAnimation} from './createRootStackNavigator/GetStateForActionHandlers';
64+
import {
65+
reportsSplitsWithEnteringAnimation,
66+
searchFullscreenWithEnteringAnimation,
67+
settingsSplitWithEnteringAnimation,
68+
workspaceSplitsWithoutEnteringAnimation,
69+
} from './createRootStackNavigator/GetStateForActionHandlers';
6470
import defaultScreenOptions from './defaultScreenOptions';
6571
import {ShareModalStackNavigator} from './ModalStackNavigators';
6672
import ExplanationModalNavigator from './Navigators/ExplanationModalNavigator';
@@ -448,27 +454,30 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie
448454
};
449455
};
450456

451-
const getSplitNavigatorOptions =
452-
(routesWithEnteringAnimation: Set<string>) =>
457+
const getFullScreenNavigatorOptions =
458+
(routesWithEnteringAnimation: Set<string>, defaultOptions: PlatformStackNavigationOptions) =>
453459
({route}: {route: RouteProp<AuthScreensParamList>}) => {
454460
// We don't need to do anything special for the wide screen.
455461
if (!shouldUseNarrowLayout) {
456-
return rootNavigatorScreenOptions.splitNavigator;
462+
return defaultOptions;
457463
}
458464
// On the narrow screen, we want to animate this navigator if pushed SplitNavigator includes desired screen
459465
const animationEnabled = routesWithEnteringAnimation.has(route.key);
460466

461467
return {
462-
...rootNavigatorScreenOptions.splitNavigator,
468+
...defaultOptions,
463469
animation: animationEnabled ? Animations.SLIDE_FROM_RIGHT : Animations.NONE,
464470
};
465471
};
466472

467473
// Animation is enabled when navigating to the report screen
468-
const getReportsSplitNavigatorOptions = getSplitNavigatorOptions(reportsSplitsWithEnteringAnimation);
474+
const getReportsSplitNavigatorOptions = getFullScreenNavigatorOptions(reportsSplitsWithEnteringAnimation, rootNavigatorScreenOptions.splitNavigator);
469475

470476
// Animation is enabled when navigating to any screen different than SCREENS.SETTINGS.ROOT
471-
const getSettingsSplitNavigatorOptions = getSplitNavigatorOptions(settingsSplitWithEnteringAnimation);
477+
const getSettingsSplitNavigatorOptions = getFullScreenNavigatorOptions(settingsSplitWithEnteringAnimation, rootNavigatorScreenOptions.splitNavigator);
478+
479+
// Animation is enabled when navigating to SCREENS.SEARCH.MONEY_REQUEST_REPORT
480+
const getSearchFullscreenNavigatorOptions = getFullScreenNavigatorOptions(searchFullscreenWithEnteringAnimation, rootNavigatorScreenOptions.fullScreen);
472481

473482
const clearStatus = () => {
474483
User.clearCustomStatus();
@@ -519,7 +528,7 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie
519528
/>
520529
<RootStack.Screen
521530
name={NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR}
522-
options={rootNavigatorScreenOptions.fullScreen}
531+
options={getSearchFullscreenNavigatorOptions}
523532
getComponent={loadSearchNavigator}
524533
/>
525534
<RootStack.Screen

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

Lines changed: 14 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ import type {CommonActions, RouterConfigOptions, StackActionType, StackNavigatio
22
import {StackActions} from '@react-navigation/native';
33
import type {ParamListBase, Router} from '@react-navigation/routers';
44
import Log from '@libs/Log';
5-
import getPolicyIDFromState from '@libs/Navigation/helpers/getPolicyIDFromState';
6-
import type {RootNavigatorParamList, State} from '@libs/Navigation/types';
5+
import type {RootNavigatorParamList} from '@libs/Navigation/types';
76
import * as SearchQueryUtils from '@libs/SearchQueryUtils';
87
import NAVIGATORS from '@src/NAVIGATORS';
98
import SCREENS from '@src/SCREENS';
@@ -29,7 +28,7 @@ const MODAL_ROUTES_TO_DISMISS: string[] = [
2928
const workspaceSplitsWithoutEnteringAnimation = new Set<string>();
3029
const reportsSplitsWithEnteringAnimation = new Set<string>();
3130
const settingsSplitWithEnteringAnimation = new Set<string>();
32-
31+
const searchFullscreenWithEnteringAnimation = new Set<string>();
3332
/**
3433
* Handles the OPEN_WORKSPACE_SPLIT action.
3534
* If the user is on other tab than settings and the workspace split is "remembered", this action will be called after pressing the settings tab.
@@ -202,44 +201,23 @@ function handlePushSearchPageAction(
202201
action: PushActionType,
203202
configOptions: RouterConfigOptions,
204203
stackRouter: Router<StackNavigationState<ParamListBase>, CommonActions.Action | StackActionType>,
205-
setActiveWorkspaceID: (workspaceID: string | undefined) => void,
206204
) {
207-
let updatedAction = action;
208-
const currentParams = action.payload.params as RootNavigatorParamList[typeof NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR];
209-
if (currentParams?.screen === SCREENS.SEARCH.ROOT) {
210-
const searchParams = currentParams?.params;
211-
const queryJSON = SearchQueryUtils.buildSearchQueryJSON(searchParams.q);
212-
if (!queryJSON) {
213-
return null;
214-
}
205+
const stateWithSearchFullscreenNavigator = stackRouter.getStateForAction(state, action, configOptions);
215206

216-
if (!queryJSON.policyID) {
217-
const policyID = getPolicyIDFromState(state as State<RootNavigatorParamList>);
207+
if (!stateWithSearchFullscreenNavigator) {
208+
Log.hmmm('[handlePushSettingsAction] SearchFullscreenNavigator has not been found in the navigation state.');
209+
return null;
210+
}
218211

219-
if (policyID) {
220-
queryJSON.policyID = policyID;
221-
} else {
222-
delete queryJSON.policyID;
223-
}
224-
} else {
225-
setActiveWorkspaceID(queryJSON.policyID);
226-
}
212+
const lastFullScreenRoute = stateWithSearchFullscreenNavigator.routes.at(-1);
213+
const actionPayloadScreen = action.payload?.params && 'screen' in action.payload.params ? action.payload?.params?.screen : undefined;
227214

228-
updatedAction = {
229-
...action,
230-
payload: {
231-
...action.payload,
232-
params: {
233-
...action.payload.params,
234-
params: {
235-
q: SearchQueryUtils.buildSearchQueryString(queryJSON),
236-
},
237-
},
238-
},
239-
};
215+
// Transitioning to SCREENS.SEARCH.MONEY_REQUEST_REPORT should be animated
216+
if (actionPayloadScreen === SCREENS.SEARCH.MONEY_REQUEST_REPORT && lastFullScreenRoute?.key) {
217+
searchFullscreenWithEnteringAnimation.add(lastFullScreenRoute.key);
240218
}
241219

242-
return stackRouter.getStateForAction(state, updatedAction, configOptions);
220+
return stateWithSearchFullscreenNavigator;
243221
}
244222

245223
function handleReplaceReportsSplitNavigatorAction(
@@ -309,6 +287,7 @@ export {
309287
handleSwitchPolicyIDAction,
310288
handleSwitchPolicyIDFromSearchAction,
311289
reportsSplitsWithEnteringAnimation,
290+
searchFullscreenWithEnteringAnimation,
312291
settingsSplitWithEnteringAnimation,
313292
workspaceSplitsWithoutEnteringAnimation,
314293
};

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ function RootStackRouter(options: RootStackNavigatorRouterOptions) {
111111
}
112112

113113
if (action.payload.name === NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR) {
114-
return handlePushSearchPageAction(state, action, configOptions, stackRouter, setActiveWorkspaceID);
114+
return handlePushSearchPageAction(state, action, configOptions, stackRouter);
115115
}
116116

117117
if (action.payload.name === NAVIGATORS.SETTINGS_SPLIT_NAVIGATOR) {

0 commit comments

Comments
 (0)