Skip to content

Commit 9cb33cd

Browse files
authored
Merge pull request #88361 from mananjadhav/mj-83368-dr-change-approver
2 parents f082f75 + b760d8a commit 9cb33cd

11 files changed

Lines changed: 31 additions & 25 deletions

File tree

src/ROUTES.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,10 @@ const DYNAMIC_ROUTES = {
352352
path: 'exit-survey/confirm',
353353
entryScreens: [SCREENS.SETTINGS.DYNAMIC_EXIT_SURVEY_REASON, SCREENS.SETTINGS.TROUBLESHOOT],
354354
},
355+
REPORT_CHANGE_APPROVER: {
356+
path: 'change-approver',
357+
entryScreens: [SCREENS.REPORT, SCREENS.RIGHT_MODAL.SEARCH_REPORT, SCREENS.RIGHT_MODAL.EXPENSE_REPORT, SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT],
358+
},
355359
FLAG_COMMENT: {
356360
path: 'flag/:reportID/:reportActionID',
357361
entryScreens: [SCREENS.REPORT, SCREENS.RIGHT_MODAL.SEARCH_REPORT, SCREENS.RIGHT_MODAL.EXPENSE_REPORT, SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT],
@@ -1069,12 +1073,6 @@ const ROUTES = {
10691073
// eslint-disable-next-line no-restricted-syntax -- Legacy route generation
10701074
getRoute: (reportID: string, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/settings` as const, backTo),
10711075
},
1072-
REPORT_CHANGE_APPROVER: {
1073-
route: 'r/:reportID/change-approver',
1074-
1075-
// eslint-disable-next-line no-restricted-syntax -- Legacy route generation
1076-
getRoute: (reportID: string, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/change-approver` as const, backTo),
1077-
},
10781076
REPORT_CHANGE_APPROVER_ADD_APPROVER: {
10791077
route: 'r/:reportID/change-approver/add',
10801078
getRoute: (reportID: string) => `r/${reportID}/change-approver/add` as const,

src/SCREENS.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -974,7 +974,7 @@ const SCREENS = {
974974
CONFIRMATION: 'ScheduleCall_Confirmation',
975975
},
976976
REPORT_CHANGE_APPROVER: {
977-
ROOT: 'Report_Change_Approver_Root',
977+
DYNAMIC_ROOT: 'Dynamic_Report_Change_Approver_Root',
978978
ADD_APPROVER: 'Report_Change_Approver_Add_Approver',
979979
},
980980
TEST_TOOLS_MODAL: {

src/hooks/useExpenseActions.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import initSplitExpense from '@libs/actions/SplitExpenses';
1515
import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID';
1616
import {getExistingTransactionID} from '@libs/IOUUtils';
1717
import Log from '@libs/Log';
18+
import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute';
1819
import Navigation from '@libs/Navigation/Navigation';
1920
import {isPolicyAccessible} from '@libs/PolicyUtils';
2021
import {getIOUActionForTransactionID, getOriginalMessage, isMoneyRequestAction} from '@libs/ReportActionsUtils';
@@ -43,7 +44,7 @@ import {getNavigationUrlOnMoneyRequestDelete} from '@userActions/IOU/DeleteMoney
4344
import {setDeleteTransactionNavigateBackUrl} from '@userActions/Report';
4445
import CONST from '@src/CONST';
4546
import ONYXKEYS from '@src/ONYXKEYS';
46-
import ROUTES from '@src/ROUTES';
47+
import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES';
4748
import type {Route} from '@src/ROUTES';
4849
import type * as OnyxTypes from '@src/types/onyx';
4950
import useConfirmModal from './useConfirmModal';
@@ -451,7 +452,7 @@ function useExpenseActions({reportID, isReportInSearch = false, backTo, onDuplic
451452
Log.warn('Change approver secondary action triggered without moneyRequestReport data.');
452453
return;
453454
}
454-
Navigation.navigate(ROUTES.REPORT_CHANGE_APPROVER.getRoute(moneyRequestReport.reportID, Navigation.getActiveRoute()));
455+
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.REPORT_CHANGE_APPROVER.path));
455456
},
456457
},
457458
[CONST.REPORT.SECONDARY_ACTIONS.DELETE]: {

src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ const ReportChangeWorkspaceModalStackNavigator = createModalStackNavigator<Repor
267267
});
268268

269269
const ReportChangeApproverModalStackNavigator = createModalStackNavigator<ReportChangeApproverParamList>({
270-
[SCREENS.REPORT_CHANGE_APPROVER.ROOT]: () => require<ReactComponentModule>('../../../../pages/ReportChangeApproverPage').default,
270+
[SCREENS.REPORT_CHANGE_APPROVER.DYNAMIC_ROOT]: () => require<ReactComponentModule>('../../../../pages/DynamicReportChangeApproverPage').default,
271271
[SCREENS.REPORT_CHANGE_APPROVER.ADD_APPROVER]: () => require<ReactComponentModule>('../../../../pages/ReportAddApproverPage').default,
272272
});
273273

src/libs/Navigation/linkingConfig/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2117,7 +2117,7 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
21172117
},
21182118
[SCREENS.RIGHT_MODAL.REPORT_CHANGE_APPROVER]: {
21192119
screens: {
2120-
[SCREENS.REPORT_CHANGE_APPROVER.ROOT]: ROUTES.REPORT_CHANGE_APPROVER.route,
2120+
[SCREENS.REPORT_CHANGE_APPROVER.DYNAMIC_ROOT]: DYNAMIC_ROUTES.REPORT_CHANGE_APPROVER.path,
21212121
[SCREENS.REPORT_CHANGE_APPROVER.ADD_APPROVER]: ROUTES.REPORT_CHANGE_APPROVER_ADD_APPROVER.route,
21222122
},
21232123
},

src/libs/Navigation/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3200,7 +3200,7 @@ type ScheduleCallParamList = {
32003200
};
32013201

32023202
type ReportChangeApproverParamList = {
3203-
[SCREENS.REPORT_CHANGE_APPROVER.ROOT]: {
3203+
[SCREENS.REPORT_CHANGE_APPROVER.DYNAMIC_ROOT]: {
32043204
reportID: string;
32053205
};
32063206
[SCREENS.REPORT_CHANGE_APPROVER.ADD_APPROVER]: {

src/pages/ReportChangeApproverPage.tsx renamed to src/pages/DynamicReportChangeApproverPage.tsx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import SelectionList from '@components/SelectionList';
99
import RadioListItem from '@components/SelectionList/ListItem/RadioListItem';
1010
import type {ListItem} from '@components/SelectionList/types';
1111
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
12+
import useDynamicBackPath from '@hooks/useDynamicBackPath';
1213
import useEnvironment from '@hooks/useEnvironment';
1314
import useLocalize from '@hooks/useLocalize';
1415
import useOnyx from '@hooks/useOnyx';
@@ -22,7 +23,7 @@ import {isControlPolicy, isPolicyAdmin} from '@libs/PolicyUtils';
2223
import {hasViolations as hasViolationsReportUtils, isAllowedToApproveExpenseReport, isMoneyRequestReport, isMoneyRequestReportPendingDeletion} from '@libs/ReportUtils';
2324
import CONST from '@src/CONST';
2425
import ONYXKEYS from '@src/ONYXKEYS';
25-
import ROUTES from '@src/ROUTES';
26+
import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES';
2627
import type SCREENS from '@src/SCREENS';
2728
import {isEmptyObject} from '@src/types/utils/EmptyObject';
2829
import NotFoundPage from './ErrorPage/NotFoundPage';
@@ -36,9 +37,9 @@ const APPROVER_TYPE = {
3637

3738
type ApproverType = ValueOf<typeof APPROVER_TYPE>;
3839

39-
type ReportChangeApproverPageProps = WithReportOrNotFoundProps & PlatformStackScreenProps<ReportChangeApproverParamList, typeof SCREENS.REPORT_CHANGE_APPROVER.ROOT>;
40+
type DynamicReportChangeApproverPageProps = WithReportOrNotFoundProps & PlatformStackScreenProps<ReportChangeApproverParamList, typeof SCREENS.REPORT_CHANGE_APPROVER.DYNAMIC_ROOT>;
4041

41-
function ReportChangeApproverPage({report, policy, isLoadingReportData}: ReportChangeApproverPageProps) {
42+
function DynamicReportChangeApproverPage({report, policy, isLoadingReportData}: DynamicReportChangeApproverPageProps) {
4243
const reportID = report?.reportID;
4344
const {translate} = useLocalize();
4445
const styles = useThemeStyles();
@@ -53,6 +54,11 @@ function ReportChangeApproverPage({report, policy, isLoadingReportData}: ReportC
5354
const [reportNextStep] = useOnyx(`${ONYXKEYS.COLLECTION.NEXT_STEP}${reportID}`);
5455
const hasAutoAppliedRef = useRef(false);
5556
const hasNavigatedToAddApproverRef = useRef(false);
57+
const backPath = useDynamicBackPath(DYNAMIC_ROUTES.REPORT_CHANGE_APPROVER.path);
58+
59+
const goBack = () => {
60+
Navigation.goBack(backPath);
61+
};
5662

5763
const changeApprover = useCallback(() => {
5864
if (!selectedApproverType) {
@@ -140,13 +146,13 @@ function ReportChangeApproverPage({report, policy, isLoadingReportData}: ReportC
140146

141147
return (
142148
<ScreenWrapper
143-
testID="ReportChangeApproverPage"
149+
testID="DynamicReportChangeApproverPage"
144150
includeSafeAreaPaddingBottom
145151
shouldEnableMaxHeight
146152
>
147153
<HeaderWithBackButton
148154
title={translate('iou.changeApprover.title')}
149-
onBackButtonPress={Navigation.goBack}
155+
onBackButtonPress={goBack}
150156
/>
151157
<SelectionList
152158
data={approverTypes}
@@ -176,6 +182,6 @@ function ReportChangeApproverPage({report, policy, isLoadingReportData}: ReportC
176182
);
177183
}
178184

179-
export default withReportOrNotFound()(ReportChangeApproverPage);
185+
export default withReportOrNotFound()(DynamicReportChangeApproverPage);
180186
export {APPROVER_TYPE};
181187
export type {ApproverType};

src/pages/ReportAddApproverPage.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import useOnyx from '@hooks/useOnyx';
1111
import usePermissions from '@hooks/usePermissions';
1212
import useThemeStyles from '@hooks/useThemeStyles';
1313
import {addReportApprover} from '@libs/actions/IOU/ReportWorkflow';
14+
import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute';
1415
import Navigation from '@libs/Navigation/Navigation';
1516
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
1617
import type {ReportChangeApproverParamList} from '@libs/Navigation/types';
@@ -24,7 +25,7 @@ import {
2425
} from '@libs/ReportUtils';
2526
import CONST from '@src/CONST';
2627
import ONYXKEYS from '@src/ONYXKEYS';
27-
import ROUTES from '@src/ROUTES';
28+
import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES';
2829
import type SCREENS from '@src/SCREENS';
2930
import type {WithReportOrNotFoundProps} from './inbox/report/withReportOrNotFound';
3031
import withReportOrNotFound from './inbox/report/withReportOrNotFound';
@@ -128,7 +129,7 @@ function ReportAddApproverPage({report, isLoadingReportData, policy}: ReportAddA
128129
testID="ReportAddApproverPage"
129130
headerTitle={translate('iou.changeApprover.actions.addApprover')}
130131
onBackButtonPress={() => {
131-
Navigation.goBack(ROUTES.REPORT_CHANGE_APPROVER.getRoute(report.reportID), {compareParams: false});
132+
Navigation.goBack(createDynamicRoute(DYNAMIC_ROUTES.REPORT_CHANGE_APPROVER.path, ROUTES.REPORT_WITH_ID.getRoute(report.reportID)), {compareParams: false});
132133
}}
133134
subtitle={<Text style={[styles.ph5, styles.pb3]}>{translate('iou.changeApprover.addApprover.subtitle')}</Text>}
134135
isLoadingReportData={isLoadingReportData}

src/pages/Search/SearchChangeApproverPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ import {openBulkChangeApproverPage} from '@libs/actions/Search';
2323
import Navigation from '@libs/Navigation/Navigation';
2424
import {isControlPolicy, isPolicyAdmin} from '@libs/PolicyUtils';
2525
import {hasViolations as hasViolationsReportUtils, isAllowedToApproveExpenseReport} from '@libs/ReportUtils';
26-
import {APPROVER_TYPE} from '@pages/ReportChangeApproverPage';
27-
import type {ApproverType} from '@pages/ReportChangeApproverPage';
26+
import {APPROVER_TYPE} from '@pages/DynamicReportChangeApproverPage';
27+
import type {ApproverType} from '@pages/DynamicReportChangeApproverPage';
2828
import CONST from '@src/CONST';
2929
import ONYXKEYS from '@src/ONYXKEYS';
3030
import ROUTES from '@src/ROUTES';

src/pages/inbox/report/withReportOrNotFound.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ type ScreenProps =
5959
| PlatformStackScreenProps<ReportSettingsNavigatorParamList, typeof SCREENS.REPORT_SETTINGS.DYNAMIC_SETTINGS_VISIBILITY>
6060
| PlatformStackScreenProps<RoomMembersNavigatorParamList, typeof SCREENS.ROOM_MEMBERS.DETAILS>
6161
| PlatformStackScreenProps<ReportChangeWorkspaceNavigatorParamList, typeof SCREENS.REPORT_CHANGE_WORKSPACE.ROOT>
62-
| PlatformStackScreenProps<ReportChangeApproverParamList, typeof SCREENS.REPORT_CHANGE_APPROVER.ROOT>;
62+
| PlatformStackScreenProps<ReportChangeApproverParamList, typeof SCREENS.REPORT_CHANGE_APPROVER.DYNAMIC_ROOT>;
6363

6464
type WithReportOrNotFoundProps = WithReportOrNotFoundOnyxProps & {
6565
route: ScreenProps['route'];

0 commit comments

Comments
 (0)