diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 717ccc1bbe6d..d2016eddd594 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -312,6 +312,14 @@ const DYNAMIC_ROUTES = { }), queryParams: ['fieldName', 'fieldValue', 'policyID'], }, + EXIT_SURVEY_REASON: { + path: 'exit-survey/reason', + entryScreens: [SCREENS.SETTINGS.TROUBLESHOOT], + }, + EXIT_SURVEY_CONFIRM: { + path: 'exit-survey/confirm', + entryScreens: [SCREENS.SETTINGS.DYNAMIC_EXIT_SURVEY_REASON, SCREENS.SETTINGS.TROUBLESHOOT], + }, FLAG_COMMENT: { path: 'flag/:reportID/:reportActionID', entryScreens: [SCREENS.REPORT, SCREENS.RIGHT_MODAL.SEARCH_REPORT, SCREENS.RIGHT_MODAL.EXPENSE_REPORT, SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT], @@ -869,14 +877,6 @@ const ROUTES = { SETTINGS_VACATION_DELEGATE: 'settings/profile/status/vacation-delegate', SETTINGS_TROUBLESHOOT: 'settings/troubleshoot', SETTINGS_HELP: 'settings/help', - SETTINGS_EXIT_SURVEY_REASON: 'settings/exit-survey/reason', - - SETTINGS_EXIT_SURVEY_CONFIRM: { - route: 'settings/exit-survey/confirm', - - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getRoute: (backTo?: string) => getUrlWithBackToParam('settings/exit-survey/confirm', backTo), - }, SETTINGS_SAVE_THE_WORLD: 'settings/teachersunite', SETTINGS_SAVE_THE_WORLD_ADD_PAYMENT_CARD: 'settings/teachersunite/add-payment-card', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index 83801778f079..fc15d40a7fc7 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -131,6 +131,8 @@ const SCREENS = { HELP: 'Settings_Help', DYNAMIC_VERIFY_ACCOUNT: 'Dynamic_Verify_Account', DYNAMIC_ADD_BANK_ACCOUNT_VERIFY_ACCOUNT: 'Dynamic_Add_Bank_Account_Verify_Account', + DYNAMIC_EXIT_SURVEY_CONFIRM: 'Dynamic_ExitSurvey_Confirm', + DYNAMIC_EXIT_SURVEY_REASON: 'Dynamic_ExitSurvey_Reason', DYNAMIC_KEYBOARD_SHORTCUTS: 'Dynamic_Keyboard_Shortcuts', PROFILE: { @@ -226,9 +228,7 @@ const SCREENS = { }, EXIT_SURVEY: { - REASON: 'Settings_ExitSurvey_Reason', RESPONSE: 'Settings_ExitSurvey_Response', - CONFIRM: 'Settings_ExitSurvey_Confirm', }, DELEGATE: { diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index f5dcf67b4aa2..db3837342191 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -651,8 +651,8 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/settings/Wallet/ReportCardLostPage').default, [SCREENS.SETTINGS.REPORT_CARD_LOST_OR_DAMAGED_CONFIRM_MAGIC_CODE]: () => require('../../../../pages/settings/Wallet/ReportCardLostConfirmMagicCodePage').default, [SCREENS.SETTINGS.DYNAMIC_KEYBOARD_SHORTCUTS]: () => require('../../../../pages/settings/DynamicKeyboardShortcutsPage').default, - [SCREENS.SETTINGS.EXIT_SURVEY.REASON]: () => require('../../../../pages/settings/ExitSurvey/ExitSurveyReasonPage').default, - [SCREENS.SETTINGS.EXIT_SURVEY.CONFIRM]: () => require('../../../../pages/settings/ExitSurvey/ExitSurveyConfirmPage').default, + [SCREENS.SETTINGS.DYNAMIC_EXIT_SURVEY_REASON]: () => require('../../../../pages/settings/ExitSurvey/DynamicExitSurveyReasonPage').default, + [SCREENS.SETTINGS.DYNAMIC_EXIT_SURVEY_CONFIRM]: () => require('../../../../pages/settings/ExitSurvey/DynamicExitSurveyConfirmPage').default, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_IMPORT]: () => require('../../../../pages/workspace/accounting/qbo/import/QuickbooksImportPage').default, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_CHART_OF_ACCOUNTS]: () => require('../../../../pages/workspace/accounting/qbo/import/QuickbooksChartOfAccountsPage').default, diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts index 7e59623ed3ac..f697b3d8ad4c 100755 --- a/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts +++ b/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts @@ -114,7 +114,7 @@ const SETTINGS_TO_RHP: Partial['config'] = { [SCREENS.SETTINGS.SHARE_CODE]: { path: ROUTES.SETTINGS_SHARE_CODE, }, - [SCREENS.SETTINGS.EXIT_SURVEY.REASON]: { - path: ROUTES.SETTINGS_EXIT_SURVEY_REASON, + [SCREENS.SETTINGS.DYNAMIC_EXIT_SURVEY_REASON]: { + path: DYNAMIC_ROUTES.EXIT_SURVEY_REASON.path, }, - [SCREENS.SETTINGS.EXIT_SURVEY.CONFIRM]: { - path: ROUTES.SETTINGS_EXIT_SURVEY_CONFIRM.route, + [SCREENS.SETTINGS.DYNAMIC_EXIT_SURVEY_CONFIRM]: { + path: DYNAMIC_ROUTES.EXIT_SURVEY_CONFIRM.path, }, [SCREENS.WORKSPACE.TAX_CREATE]: { path: ROUTES.WORKSPACE_TAX_CREATE.route, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 4de218abacf6..c05235bc7833 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -150,6 +150,8 @@ type SettingsNavigatorParamList = { [SCREENS.SETTINGS.LOCK.FAILED_TO_LOCK_ACCOUNT]: undefined; [SCREENS.SETTINGS.DYNAMIC_VERIFY_ACCOUNT]: undefined; [SCREENS.SETTINGS.DYNAMIC_ADD_BANK_ACCOUNT_VERIFY_ACCOUNT]: undefined; + [SCREENS.SETTINGS.DYNAMIC_EXIT_SURVEY_REASON]: undefined; + [SCREENS.SETTINGS.DYNAMIC_EXIT_SURVEY_CONFIRM]: undefined; [SCREENS.SETTINGS.WALLET.CARDS_DIGITAL_DETAILS_UPDATE_ADDRESS]: undefined; [SCREENS.SETTINGS.WALLET.DOMAIN_CARD]: { /** cardID of selected card */ @@ -1162,14 +1164,6 @@ type SettingsNavigatorParamList = { reason: ReplacementReason; }; [SCREENS.SETTINGS.DYNAMIC_KEYBOARD_SHORTCUTS]: undefined; - [SCREENS.SETTINGS.EXIT_SURVEY.REASON]: { - // eslint-disable-next-line no-restricted-syntax -- `backTo` usages in this file are legacy. Do not add new `backTo` params to screens. See contributingGuides/NAVIGATION.md - backTo: Routes; - }; - [SCREENS.SETTINGS.EXIT_SURVEY.CONFIRM]: { - // eslint-disable-next-line no-restricted-syntax -- `backTo` usages in this file are legacy. Do not add new `backTo` params to screens. See contributingGuides/NAVIGATION.md - backTo: Routes; - }; [SCREENS.WORKSPACE.TAX_CREATE]: { policyID: string; }; diff --git a/src/pages/settings/ExitSurvey/ExitSurveyConfirmPage.tsx b/src/pages/settings/ExitSurvey/DynamicExitSurveyConfirmPage.tsx similarity index 76% rename from src/pages/settings/ExitSurvey/ExitSurveyConfirmPage.tsx rename to src/pages/settings/ExitSurvey/DynamicExitSurveyConfirmPage.tsx index cac1c76fa261..d982de502ae3 100644 --- a/src/pages/settings/ExitSurvey/ExitSurveyConfirmPage.tsx +++ b/src/pages/settings/ExitSurvey/DynamicExitSurveyConfirmPage.tsx @@ -1,4 +1,4 @@ -import React, {useCallback, useEffect} from 'react'; +import React, {useMemo} from 'react'; import {View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import Icon from '@components//Icon'; @@ -7,31 +7,28 @@ import FixedFooter from '@components/FixedFooter'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import ScreenWrapper from '@components/ScreenWrapper'; import Text from '@components/Text'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import {useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; import useThemeStyles from '@hooks/useThemeStyles'; -import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import Navigation from '@navigation/Navigation'; -import type {SettingsNavigatorParamList} from '@navigation/types'; import variables from '@styles/variables'; import {switchToOldDot} from '@userActions/ExitSurvey'; import {openOldDotLink} from '@userActions/Link'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; -import type SCREENS from '@src/SCREENS'; +import type {Route} from '@src/ROUTES'; +import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; import type {ExitSurveyResponseForm} from '@src/types/form/ExitSurveyResponseForm'; import RESPONSE_INPUT_IDS from '@src/types/form/ExitSurveyResponseForm'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import ExitSurveyOffline from './ExitSurveyOffline'; -type ExitSurveyConfirmPageProps = PlatformStackScreenProps; - const exitResponseSelector = (value: OnyxEntry) => value?.[RESPONSE_INPUT_IDS.RESPONSE]; -function ExitSurveyConfirmPage({route, navigation}: ExitSurveyConfirmPageProps) { +function DynamicExitSurveyConfirmPage() { const {translate} = useLocalize(); const {isOffline} = useNetwork(); const styles = useThemeStyles(); @@ -43,34 +40,28 @@ function ExitSurveyConfirmPage({route, navigation}: ExitSurveyConfirmPageProps) const shouldShowQuickTips = isEmptyObject(tryNewDot) || tryNewDot?.classicRedirect?.dismissed === true || (!isEmptyObject(tryNewDot) && tryNewDot?.classicRedirect?.dismissed === undefined); - const getBackToParam = useCallback(() => { - if (isOffline) { + const parentBackPath = useDynamicBackPath(DYNAMIC_ROUTES.EXIT_SURVEY_CONFIRM.path); + const backPath: Route = useMemo(() => { + if (isOffline || !exitSurveyResponse) { return ROUTES.SETTINGS; } - if (exitSurveyResponse) { - return ROUTES.SETTINGS_EXIT_SURVEY_REASON; - } - return ROUTES.SETTINGS; - }, [isOffline, exitSurveyResponse]); - const {backTo} = route.params || {}; - useEffect(() => { - const newBackTo = getBackToParam(); - if (backTo === newBackTo) { - return; + + const reasonPathSuffix = DYNAMIC_ROUTES.EXIT_SURVEY_REASON.path; + if (parentBackPath.endsWith(reasonPathSuffix)) { + return parentBackPath; } - navigation.setParams({ - backTo: newBackTo, - }); - }, [backTo, getBackToParam, navigation]); + + return `${parentBackPath.replace(/\/+$/, '')}/${reasonPathSuffix}` as Route; + }, [isOffline, exitSurveyResponse, parentBackPath]); return ( Navigation.goBack(backTo)} + onBackButtonPress={() => Navigation.goBack(backPath)} /> {isOffline && } @@ -107,4 +98,4 @@ function ExitSurveyConfirmPage({route, navigation}: ExitSurveyConfirmPageProps) ); } -export default ExitSurveyConfirmPage; +export default DynamicExitSurveyConfirmPage; diff --git a/src/pages/settings/ExitSurvey/ExitSurveyReasonPage.tsx b/src/pages/settings/ExitSurvey/DynamicExitSurveyReasonPage.tsx similarity index 90% rename from src/pages/settings/ExitSurvey/ExitSurveyReasonPage.tsx rename to src/pages/settings/ExitSurvey/DynamicExitSurveyReasonPage.tsx index 93c85ff105df..43c860112258 100644 --- a/src/pages/settings/ExitSurvey/ExitSurveyReasonPage.tsx +++ b/src/pages/settings/ExitSurvey/DynamicExitSurveyReasonPage.tsx @@ -8,6 +8,7 @@ import ScreenWrapper from '@components/ScreenWrapper'; import Text from '@components/Text'; import TextInput from '@components/TextInput'; import useAutoFocusInput from '@hooks/useAutoFocusInput'; +import useDynamicBackPath from '@hooks/useDynamicBackPath'; import useKeyboardShortcut from '@hooks/useKeyboardShortcut'; import useKeyboardState from '@hooks/useKeyboardState'; import useLocalize from '@hooks/useLocalize'; @@ -18,12 +19,13 @@ import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; import useWindowDimensions from '@hooks/useWindowDimensions'; import {saveResponse} from '@libs/actions/ExitSurvey'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import StatusBar from '@libs/StatusBar'; import Navigation from '@navigation/Navigation'; import variables from '@styles/variables'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; import type {ExitSurveyResponseForm} from '@src/types/form/ExitSurveyResponseForm'; import INPUT_IDS from '@src/types/form/ExitSurveyResponseForm'; import type {Errors} from '@src/types/onyx/OnyxCommon'; @@ -31,9 +33,10 @@ import ExitSurveyOffline from './ExitSurveyOffline'; const draftResponseSelector = (value: OnyxEntry) => value?.[INPUT_IDS.RESPONSE]; -function ExitSurveyReasonPage() { +function DynamicExitSurveyReasonPage() { const {isOffline} = useNetwork(); const [draftResponse = ''] = useOnyx(ONYXKEYS.FORMS.EXIT_SURVEY_RESPONSE_FORM_DRAFT, {selector: draftResponseSelector}); + const backPath = useDynamicBackPath(DYNAMIC_ROUTES.EXIT_SURVEY_REASON.path); const {translate} = useLocalize(); const styles = useThemeStyles(); const StyleUtils = useStyleUtils(); @@ -47,7 +50,7 @@ function ExitSurveyReasonPage() { const submitForm = useCallback(() => { saveResponse(draftResponse); - Navigation.navigate(ROUTES.SETTINGS_EXIT_SURVEY_CONFIRM.getRoute(ROUTES.SETTINGS_EXIT_SURVEY_REASON)); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.EXIT_SURVEY_CONFIRM.path), {forceReplace: true}); }, [draftResponse]); useKeyboardShortcut(CONST.KEYBOARD_SHORTCUTS.CTRL_ENTER, submitForm); @@ -67,10 +70,10 @@ function ExitSurveyReasonPage() { ); return ( - + Navigation.goBack()} + onBackButtonPress={() => Navigation.goBack(backPath)} /> { if (shouldOpenSurveyReasonPage) { - Navigation.navigate(ROUTES.SETTINGS_EXIT_SURVEY_REASON); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.EXIT_SURVEY_REASON.path)); return; } - Navigation.navigate(ROUTES.SETTINGS_EXIT_SURVEY_CONFIRM.route); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.EXIT_SURVEY_CONFIRM.path)); }); }, }), diff --git a/src/pages/settings/Troubleshoot/TroubleshootPage.tsx b/src/pages/settings/Troubleshoot/TroubleshootPage.tsx index 708c4224cf9a..1a275e1dc12f 100644 --- a/src/pages/settings/Troubleshoot/TroubleshootPage.tsx +++ b/src/pages/settings/Troubleshoot/TroubleshootPage.tsx @@ -30,6 +30,7 @@ import {openOldDotLink} from '@libs/actions/Link'; import {setShouldMaskOnyxState} from '@libs/actions/MaskOnyx'; import {openTroubleshootSettingsPage} from '@libs/actions/User'; import ExportOnyxState from '@libs/ExportOnyxState'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan'; import {shouldHideOldAppRedirect} from '@libs/TryNewDotUtils'; @@ -39,7 +40,7 @@ import CONFIG from '@src/CONFIG'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; import {isTrackingSelector} from '@src/selectors/GPSDraftDetails'; import type IconAsset from '@src/types/utils/IconAsset'; import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue'; @@ -141,10 +142,10 @@ function TroubleshootPage() { resetExitSurveyForm(() => { if (shouldOpenSurveyReasonPage) { - Navigation.navigate(ROUTES.SETTINGS_EXIT_SURVEY_REASON); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.EXIT_SURVEY_REASON.path)); return; } - Navigation.navigate(ROUTES.SETTINGS_EXIT_SURVEY_CONFIRM.route); + Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.EXIT_SURVEY_CONFIRM.path)); }); }, }),