From f971aa193350c0f02e30da27904a0818183af78c Mon Sep 17 00:00:00 2001 From: truph01 Date: Thu, 6 Mar 2025 00:11:44 +0700 Subject: [PATCH 1/3] fix: User navigated to incorrect section when opening notification and tapping back button --- src/ROUTES.ts | 4 ++-- src/libs/Navigation/Navigation.ts | 10 +++++++--- src/libs/Navigation/types.ts | 1 + .../subscribePushNotification/index.ts | 2 +- src/pages/home/ReportScreen.tsx | 7 ++++++- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 09fe7c4abcfd..fd358942ac06 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -310,13 +310,13 @@ const ROUTES = { REPORT: 'r', REPORT_WITH_ID: { route: 'r/:reportID?/:reportActionID?', - getRoute: (reportID: string | undefined, reportActionID?: string, referrer?: string) => { + getRoute: (reportID: string | undefined, reportActionID?: string, referrer?: string, backTo?: string) => { if (!reportID) { Log.warn('Invalid reportID is used to build the REPORT_WITH_ID route'); } const baseRoute = reportActionID ? (`r/${reportID}/${reportActionID}` as const) : (`r/${reportID}` as const); const referrerParam = referrer ? `?referrer=${encodeURIComponent(referrer)}` : ''; - return `${baseRoute}${referrerParam}` as const; + return getUrlWithBackToParam(`${baseRoute}${referrerParam}` as const, backTo); }, }, REPORT_AVATAR: { diff --git a/src/libs/Navigation/Navigation.ts b/src/libs/Navigation/Navigation.ts index 26399ca62664..dea03d6c5e91 100644 --- a/src/libs/Navigation/Navigation.ts +++ b/src/libs/Navigation/Navigation.ts @@ -468,20 +468,20 @@ function waitForProtectedRoutes() { }); } -type NavigateToReportWithPolicyCheckPayload = {report?: OnyxEntry; reportID?: string; reportActionID?: string; referrer?: string; policyIDToCheck?: string}; +type NavigateToReportWithPolicyCheckPayload = {report?: OnyxEntry; reportID?: string; reportActionID?: string; referrer?: string; policyIDToCheck?: string; backTo?: string}; /** * Navigates to a report passed as a param (as an id or report object) and checks whether the target object belongs to the currently selected workspace. * If not, the current workspace is set to global. */ -function navigateToReportWithPolicyCheck({report, reportID, reportActionID, referrer, policyIDToCheck}: NavigateToReportWithPolicyCheckPayload, ref = navigationRef) { +function navigateToReportWithPolicyCheck({report, reportID, reportActionID, referrer, policyIDToCheck, backTo}: NavigateToReportWithPolicyCheckPayload, ref = navigationRef) { const targetReport = reportID ? {reportID, ...allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${reportID}`]} : report; const policyID = policyIDToCheck ?? getPolicyIDFromState(navigationRef.getRootState() as State); const policyMemberAccountIDs = getPolicyEmployeeAccountIDs(policyID); const shouldOpenAllWorkspace = isEmptyObject(targetReport) ? true : !doesReportBelongToWorkspace(targetReport, policyMemberAccountIDs, policyID); if ((shouldOpenAllWorkspace && !policyID) || !shouldOpenAllWorkspace) { - linkTo(ref.current, ROUTES.REPORT_WITH_ID.getRoute(targetReport?.reportID, reportActionID, referrer)); + linkTo(ref.current, ROUTES.REPORT_WITH_ID.getRoute(targetReport?.reportID, reportActionID, referrer, backTo)); return; } @@ -497,6 +497,10 @@ function navigateToReportWithPolicyCheck({report, reportID, reportActionID, refe params.referrer = referrer; } + if (backTo) { + params.backTo = backTo; + } + ref.dispatch( StackActions.push(NAVIGATORS.REPORTS_SPLIT_NAVIGATOR, { policyID: undefined, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index e38ab9a6d8fb..1d05913074d0 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -1594,6 +1594,7 @@ type ReportsSplitNavigatorParamList = { reportID: string; openOnAdminRoom?: boolean; referrer?: string; + backTo?: string; }; }; diff --git a/src/libs/Notification/PushNotification/subscribePushNotification/index.ts b/src/libs/Notification/PushNotification/subscribePushNotification/index.ts index e866eebcb792..a19388cce222 100644 --- a/src/libs/Notification/PushNotification/subscribePushNotification/index.ts +++ b/src/libs/Notification/PushNotification/subscribePushNotification/index.ts @@ -121,7 +121,7 @@ function navigateToReport({reportID, reportActionID}: ReportActionPushNotificati } Log.info('[PushNotification] onSelected() - Navigation is ready. Navigating...', false, {reportID, reportActionID}); - Navigation.navigateToReportWithPolicyCheck({reportID: String(reportID), policyIDToCheck: policyID}); + Navigation.navigateToReportWithPolicyCheck({reportID: String(reportID), policyIDToCheck: policyID, backTo: Navigation.getActiveRoute()}); updateLastVisitedPath(ROUTES.REPORT_WITH_ID.getRoute(String(reportID))); } catch (error) { let errorMessage = String(error); diff --git a/src/pages/home/ReportScreen.tsx b/src/pages/home/ReportScreen.tsx index f29a4d85fc56..ff28a1fdd839 100644 --- a/src/pages/home/ReportScreen.tsx +++ b/src/pages/home/ReportScreen.tsx @@ -79,6 +79,7 @@ import { } from '@userActions/Report'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; +import type {Route} from '@src/ROUTES'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import type * as OnyxTypes from '@src/types/onyx'; @@ -315,8 +316,12 @@ function ReportScreen({route, navigation}: ReportScreenProps) { Navigation.dismissModal(); return; } + if (route.params?.backTo) { + Navigation.goBack(route.params?.backTo as Route, {shouldPopToTop: true}); + return; + } Navigation.goBack(undefined, {shouldPopToTop: true}); - }, [isInNarrowPaneModal]); + }, [isInNarrowPaneModal, route]); let headerView = ( Date: Mon, 24 Mar 2025 17:21:18 +0700 Subject: [PATCH 2/3] fix: conflict --- src/libs/Navigation/Navigation.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libs/Navigation/Navigation.ts b/src/libs/Navigation/Navigation.ts index b8ea35137108..b200b9a85d3e 100644 --- a/src/libs/Navigation/Navigation.ts +++ b/src/libs/Navigation/Navigation.ts @@ -520,6 +520,9 @@ function navigateToReportWithPolicyCheck( return; } + if (backTo) { + params.backTo = backTo; + } ref.dispatch( StackActions.push(NAVIGATORS.REPORTS_SPLIT_NAVIGATOR, { policyID: undefined, From 083e0988853e2da79ab5cf9b021fa6a334224005 Mon Sep 17 00:00:00 2001 From: truph01 Date: Wed, 2 Apr 2025 23:51:45 +0700 Subject: [PATCH 3/3] fix: lint --- src/libs/Navigation/Navigation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/Navigation/Navigation.ts b/src/libs/Navigation/Navigation.ts index b200b9a85d3e..b82f64e037bb 100644 --- a/src/libs/Navigation/Navigation.ts +++ b/src/libs/Navigation/Navigation.ts @@ -493,7 +493,7 @@ function navigateToReportWithPolicyCheck( const shouldOpenAllWorkspace = isEmptyObject(targetReport) ? true : !doesReportBelongToWorkspace(targetReport, policyMemberAccountIDs, policyID); if ((shouldOpenAllWorkspace && !policyID) || !shouldOpenAllWorkspace) { - linkTo(ref.current, ROUTES.REPORT_WITH_ID.getRoute(targetReport?.reportID, reportActionID, referrer, backTo), {forceReplace: !!forceReplace}); + linkTo(ref.current, ROUTES.REPORT_WITH_ID.getRoute(targetReport?.reportID, reportActionID, referrer, undefined, undefined, backTo), {forceReplace: !!forceReplace}); return; }