diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 09fe7c4abcfd..6d197d350cb0 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -151,7 +151,7 @@ const ROUTES = { SETTINGS_PRIORITY_MODE: 'settings/preferences/priority-mode', SETTINGS_LANGUAGE: 'settings/preferences/language', SETTINGS_THEME: 'settings/preferences/theme', - SETTINGS_WORKSPACES: 'settings/workspaces', + SETTINGS_WORKSPACES: {route: 'settings/workspaces', getRoute: (backTo?: string) => getUrlWithBackToParam('settings/workspaces', backTo)}, SETTINGS_SECURITY: 'settings/security', SETTINGS_CLOSE: 'settings/security/closeAccount', SETTINGS_ADD_DELEGATE: 'settings/security/delegate', diff --git a/src/components/Navigation/BottomTabBar/index.tsx b/src/components/Navigation/BottomTabBar/index.tsx index eb9170a1d3fe..754258f0702e 100644 --- a/src/components/Navigation/BottomTabBar/index.tsx +++ b/src/components/Navigation/BottomTabBar/index.tsx @@ -191,7 +191,7 @@ function BottomTabBar({selectedTab, isTooltipAllowed = false}: BottomTabBarProps // If there is settings workspace screen in the settings navigator, then we should open the settings workspaces as it should be "remembered". if (state?.routes?.at(-1)?.name === SCREENS.SETTINGS.WORKSPACES) { - Navigation.navigate(ROUTES.SETTINGS_WORKSPACES); + Navigation.navigate(ROUTES.SETTINGS_WORKSPACES.route); return; } diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index 90d14b50890a..928f41fe6012 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -1546,7 +1546,7 @@ const config: LinkingOptions['config'] = { screens: { [SCREENS.SETTINGS.ROOT]: ROUTES.SETTINGS, [SCREENS.SETTINGS.WORKSPACES]: { - path: ROUTES.SETTINGS_WORKSPACES, + path: ROUTES.SETTINGS_WORKSPACES.route, exact: true, }, [SCREENS.SETTINGS.PROFILE.ROOT]: { diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index e38ab9a6d8fb..ddee8f9147b3 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -221,6 +221,7 @@ type SettingsNavigatorParamList = { }; [SCREENS.WORKSPACE.DOWNGRADE]: { policyID?: string; + backTo?: Routes; }; [SCREENS.WORKSPACE.CATEGORIES_SETTINGS]: { policyID: string; @@ -1599,7 +1600,9 @@ type ReportsSplitNavigatorParamList = { type SettingsSplitNavigatorParamList = { [SCREENS.SETTINGS.ROOT]: undefined; - [SCREENS.SETTINGS.WORKSPACES]: undefined; + [SCREENS.SETTINGS.WORKSPACES]: { + backTo?: Routes; + }; [SCREENS.SETTINGS.PREFERENCES.ROOT]: undefined; [SCREENS.SETTINGS.SECURITY]: undefined; [SCREENS.SETTINGS.PROFILE.ROOT]: undefined; diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index b066ddddcab2..1817dc384c18 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -520,7 +520,7 @@ function getPolicyEmployeeListByIdWithoutCurrentUser(policies: OnyxCollection { if (getIsSmallScreenWidth()) { Navigation.navigate(ROUTES.SETTINGS); } - Navigation.navigate(ROUTES.SETTINGS_WORKSPACES); + Navigation.navigate(ROUTES.SETTINGS_WORKSPACES.route); }; export default navigateAfterJoinRequest; diff --git a/src/libs/navigateAfterJoinRequest/index.ts b/src/libs/navigateAfterJoinRequest/index.ts index 60cbf64cda90..176081dc53fb 100644 --- a/src/libs/navigateAfterJoinRequest/index.ts +++ b/src/libs/navigateAfterJoinRequest/index.ts @@ -4,6 +4,6 @@ import ROUTES from '@src/ROUTES'; const navigateAfterJoinRequest = () => { Navigation.goBack(undefined, {shouldPopToTop: true}); Navigation.navigate(ROUTES.SETTINGS); - Navigation.navigate(ROUTES.SETTINGS_WORKSPACES); + Navigation.navigate(ROUTES.SETTINGS_WORKSPACES.route); }; export default navigateAfterJoinRequest; diff --git a/src/libs/navigateAfterJoinRequest/index.web.ts b/src/libs/navigateAfterJoinRequest/index.web.ts index d63fcb25aaf7..127a9d0e5ed4 100644 --- a/src/libs/navigateAfterJoinRequest/index.web.ts +++ b/src/libs/navigateAfterJoinRequest/index.web.ts @@ -7,6 +7,6 @@ const navigateAfterJoinRequest = () => { if (getIsSmallScreenWidth()) { Navigation.navigate(ROUTES.SETTINGS); } - Navigation.navigate(ROUTES.SETTINGS_WORKSPACES); + Navigation.navigate(ROUTES.SETTINGS_WORKSPACES.route); }; export default navigateAfterJoinRequest; diff --git a/src/pages/home/sidebar/AllSettingsScreen.tsx b/src/pages/home/sidebar/AllSettingsScreen.tsx index 0025e6b429c5..ae7509672e0e 100644 --- a/src/pages/home/sidebar/AllSettingsScreen.tsx +++ b/src/pages/home/sidebar/AllSettingsScreen.tsx @@ -9,9 +9,9 @@ import useLocalize from '@hooks/useLocalize'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import useWaitForNavigation from '@hooks/useWaitForNavigation'; +import {buildOldDotURL, openOldDotLink} from '@libs/actions/Link'; import Navigation from '@libs/Navigation/Navigation'; import {hasGlobalWorkspaceSettingsRBR} from '@libs/WorkspacesSettingsUtils'; -import * as Link from '@userActions/Link'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -39,7 +39,7 @@ function AllSettingsScreen() { icon: Expensicons.Building, action: () => { waitForNavigate(() => { - Navigation.navigate(ROUTES.SETTINGS_WORKSPACES); + Navigation.navigate(ROUTES.SETTINGS_WORKSPACES.route); })(); }, focused: !shouldUseNarrowLayout, @@ -51,11 +51,11 @@ function AllSettingsScreen() { translationKey: 'allSettingsScreen.subscription', icon: Expensicons.MoneyBag, action: () => { - Link.openOldDotLink(CONST.OLDDOT_URLS.ADMIN_POLICIES_URL); + openOldDotLink(CONST.OLDDOT_URLS.ADMIN_POLICIES_URL); }, shouldShowRightIcon: true, iconRight: Expensicons.NewWindow, - link: () => Link.buildOldDotURL(CONST.OLDDOT_URLS.ADMIN_POLICIES_URL), + link: () => buildOldDotURL(CONST.OLDDOT_URLS.ADMIN_POLICIES_URL), }, ] : []), @@ -63,11 +63,11 @@ function AllSettingsScreen() { translationKey: 'allSettingsScreen.domains', icon: Expensicons.Globe, action: () => { - Link.openOldDotLink(CONST.OLDDOT_URLS.ADMIN_DOMAINS_URL); + openOldDotLink(CONST.OLDDOT_URLS.ADMIN_DOMAINS_URL); }, shouldShowRightIcon: true, iconRight: Expensicons.NewWindow, - link: () => Link.buildOldDotURL(CONST.OLDDOT_URLS.ADMIN_DOMAINS_URL), + link: () => buildOldDotURL(CONST.OLDDOT_URLS.ADMIN_DOMAINS_URL), }, ]; return baseMenuItems.map((item) => ({ diff --git a/src/pages/settings/InitialSettingsPage.tsx b/src/pages/settings/InitialSettingsPage.tsx index 821b5b5eb2c2..64b98111a4f2 100755 --- a/src/pages/settings/InitialSettingsPage.tsx +++ b/src/pages/settings/InitialSettingsPage.tsx @@ -190,7 +190,7 @@ function InitialSettingsPage({currentUserPersonalDetails}: InitialSettingsPagePr icon: Expensicons.Buildings, screenName: SCREENS.SETTINGS.WORKSPACES, brickRoadIndicator: hasGlobalWorkspaceSettingsRBR(policies, allConnectionSyncProgresses) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, - action: () => Navigation.navigate(ROUTES.SETTINGS_WORKSPACES), + action: () => Navigation.navigate(ROUTES.SETTINGS_WORKSPACES.route), }, { translationKey: 'allSettingsScreen.domains', diff --git a/src/pages/settings/Subscription/RequestEarlyCancellationPage/index.tsx b/src/pages/settings/Subscription/RequestEarlyCancellationPage/index.tsx index 922293dc0651..4ae55707794e 100644 --- a/src/pages/settings/Subscription/RequestEarlyCancellationPage/index.tsx +++ b/src/pages/settings/Subscription/RequestEarlyCancellationPage/index.tsx @@ -13,9 +13,9 @@ import TextLink from '@components/TextLink'; import useCancellationType from '@hooks/useCancellationType'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; +import {navigateToConciergeChat} from '@libs/actions/Report'; +import {cancelBillingSubscription} from '@libs/actions/Subscription'; import Navigation from '@libs/Navigation/Navigation'; -import * as Report from '@userActions/Report'; -import * as Subscription from '@userActions/Subscription'; import type {CancellationType, FeedbackSurveyOptionID} from '@src/CONST'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -31,7 +31,7 @@ function RequestEarlyCancellationPage() { const handleSubmit = (cancellationReason: FeedbackSurveyOptionID, cancellationNote = '') => { setIsLoading(true); - Subscription.cancelBillingSubscription(cancellationReason, cancellationNote); + cancelBillingSubscription(cancellationReason, cancellationNote); }; const acknowledgementText = useMemo( @@ -52,7 +52,7 @@ function RequestEarlyCancellationPage() { {translate('subscription.requestEarlyCancellation.requestSubmitted.title')} {translate('subscription.requestEarlyCancellation.requestSubmitted.subtitle.part1')} - Report.navigateToConciergeChat()}>{translate('subscription.requestEarlyCancellation.requestSubmitted.subtitle.link')} + navigateToConciergeChat()}>{translate('subscription.requestEarlyCancellation.requestSubmitted.subtitle.link')} {translate('subscription.requestEarlyCancellation.requestSubmitted.subtitle.part2')} @@ -78,7 +78,7 @@ function RequestEarlyCancellationPage() { {translate('subscription.requestEarlyCancellation.subscriptionCanceled.info')} {translate('subscription.requestEarlyCancellation.subscriptionCanceled.preventFutureActivity.part1')} - Navigation.navigate(ROUTES.SETTINGS_WORKSPACES)}> + Navigation.navigate(ROUTES.SETTINGS_WORKSPACES.route)}> {translate('subscription.requestEarlyCancellation.subscriptionCanceled.preventFutureActivity.link')} {translate('subscription.requestEarlyCancellation.subscriptionCanceled.preventFutureActivity.part2')} diff --git a/src/pages/workspace/AccessOrNotFoundWrapper.tsx b/src/pages/workspace/AccessOrNotFoundWrapper.tsx index e60d4a62c5ed..eaf1dbff8c87 100644 --- a/src/pages/workspace/AccessOrNotFoundWrapper.tsx +++ b/src/pages/workspace/AccessOrNotFoundWrapper.tsx @@ -92,7 +92,7 @@ function PageNotFoundFallback({policyID, fullPageNotFoundViewProps, isFeatureEna shouldShowOfflineIndicator={false} onBackButtonPress={() => { if (isPolicyNotAccessible) { - Navigation.goBack(ROUTES.SETTINGS_WORKSPACES); + Navigation.goBack(ROUTES.SETTINGS_WORKSPACES.route); return; } Navigation.goBack(policyID && !isMoneyRequest ? ROUTES.WORKSPACE_OVERVIEW.getRoute(policyID) : undefined); diff --git a/src/pages/workspace/WorkspaceInitialPage.tsx b/src/pages/workspace/WorkspaceInitialPage.tsx index 8048e7707db9..3357fc38ba2d 100644 --- a/src/pages/workspace/WorkspaceInitialPage.tsx +++ b/src/pages/workspace/WorkspaceInitialPage.tsx @@ -442,7 +442,7 @@ function WorkspaceInitialPage({policyDraft, policy: policyProp, route}: Workspac > Navigation.goBack(route.params?.backTo ?? ROUTES.SETTINGS_WORKSPACES)} + onBackButtonPress={() => Navigation.goBack(route.params?.backTo ?? ROUTES.SETTINGS_WORKSPACES.route)} policyAvatar={policyAvatar} style={styles.headerBarDesktopHeight} /> diff --git a/src/pages/workspace/WorkspaceNewRoomPage.tsx b/src/pages/workspace/WorkspaceNewRoomPage.tsx index 000f61510acd..4fe57ffd0de7 100644 --- a/src/pages/workspace/WorkspaceNewRoomPage.tsx +++ b/src/pages/workspace/WorkspaceNewRoomPage.tsx @@ -222,7 +222,7 @@ function WorkspaceNewRoomPage() { success large text={translate('footer.learnMore')} - onPress={() => Navigation.navigate(ROUTES.SETTINGS_WORKSPACES)} + onPress={() => Navigation.navigate(ROUTES.SETTINGS_WORKSPACES.route)} style={[styles.mh5, styles.mb5]} /> {isSmallScreenWidth && ( diff --git a/src/pages/workspace/WorkspacePageWithSections.tsx b/src/pages/workspace/WorkspacePageWithSections.tsx index e6bc5fed299b..948214b32be9 100644 --- a/src/pages/workspace/WorkspacePageWithSections.tsx +++ b/src/pages/workspace/WorkspacePageWithSections.tsx @@ -175,7 +175,7 @@ function WorkspacePageWithSections({ shouldShowOfflineIndicatorInWideScreen={shouldShowOfflineIndicatorInWideScreen && !shouldShow} > Navigation.goBack(ROUTES.SETTINGS_WORKSPACES)} + onBackButtonPress={() => Navigation.goBack(ROUTES.SETTINGS_WORKSPACES.route)} onLinkPress={Navigation.goBackToHome} shouldShow={shouldShow} subtitleKey={shouldShowPolicy ? 'workspace.common.notAuthorized' : undefined} diff --git a/src/pages/workspace/WorkspacesListPage.tsx b/src/pages/workspace/WorkspacesListPage.tsx index 7d9f57c649ce..54b88cc97a08 100755 --- a/src/pages/workspace/WorkspacesListPage.tsx +++ b/src/pages/workspace/WorkspacesListPage.tsx @@ -1,3 +1,4 @@ +import {useRoute} from '@react-navigation/native'; import React, {useCallback, useMemo, useState} from 'react'; import {FlatList, View} from 'react-native'; import {useOnyx} from 'react-native-onyx'; @@ -35,12 +36,16 @@ import interceptAnonymousUser from '@libs/interceptAnonymousUser'; import localeCompare from '@libs/LocaleCompare'; import resetPolicyIDInNavigationState from '@libs/Navigation/helpers/resetPolicyIDInNavigationState'; import Navigation from '@libs/Navigation/Navigation'; +import type {PlatformStackRouteProp} from '@libs/Navigation/PlatformStackNavigation/types'; +import type {SettingsSplitNavigatorParamList} from '@libs/Navigation/types'; import {getPolicy, getPolicyBrickRoadIndicatorStatus, getWorkspaceAccountID, isPolicyAdmin, shouldShowPolicy} from '@libs/PolicyUtils'; import {getDefaultWorkspaceAvatar} from '@libs/ReportUtils'; import type {AvatarSource} from '@libs/UserUtils'; +import useHandleBackButton from '@pages/Search/useHandleBackButton'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; +import type SCREENS from '@src/SCREENS'; import type {Policy as PolicyType} from '@src/types/onyx'; import type * as OnyxCommon from '@src/types/onyx/OnyxCommon'; import type {PolicyDetailsForNonMembers} from '@src/types/onyx/Policy'; @@ -120,6 +125,7 @@ function WorkspacesListPage() { const [activePolicyID] = useOnyx(ONYXKEYS.NVP_ACTIVE_POLICY_ID); const [isLoadingApp] = useOnyx(ONYXKEYS.IS_LOADING_APP); const shouldShowLoadingIndicator = isLoadingApp && !isOffline; + const route = useRoute>(); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [policyIDToDelete, setPolicyIDToDelete] = useState(); @@ -429,6 +435,13 @@ function WorkspacesListPage() { /> ); + const onBackButtonPress = () => { + Navigation.goBack(route.params?.backTo ?? ROUTES.SETTINGS); + return true; + }; + + useHandleBackButton(onBackButtonPress); + if (isEmptyObject(workspaces)) { return ( Navigation.goBack(ROUTES.SETTINGS)} + onBackButtonPress={onBackButtonPress} icon={Illustrations.Buildings} shouldUseHeadlineHeader /> @@ -482,7 +495,7 @@ function WorkspacesListPage() { title={translate('common.workspaces')} shouldShowBackButton={shouldUseNarrowLayout} shouldDisplaySearchRouter - onBackButtonPress={() => Navigation.goBack(ROUTES.SETTINGS)} + onBackButtonPress={onBackButtonPress} icon={Illustrations.Buildings} shouldUseHeadlineHeader > diff --git a/src/pages/workspace/downgrade/DowngradeIntro.tsx b/src/pages/workspace/downgrade/DowngradeIntro.tsx index e6f24ab2cf38..e7623f176943 100644 --- a/src/pages/workspace/downgrade/DowngradeIntro.tsx +++ b/src/pages/workspace/downgrade/DowngradeIntro.tsx @@ -13,15 +13,17 @@ import {openLink} from '@libs/actions/Link'; import Navigation from '@libs/Navigation/Navigation'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; +import type {Route} from '@src/ROUTES'; type Props = { buttonDisabled?: boolean; loading?: boolean; onDowngrade: () => void; policyID?: string; + backTo?: Route; }; -function DowngradeIntro({onDowngrade, buttonDisabled, loading, policyID}: Props) { +function DowngradeIntro({onDowngrade, buttonDisabled, loading, policyID, backTo}: Props) { const styles = useThemeStyles(); const {translate} = useLocalize(); const {environmentURL} = useEnvironment(); @@ -93,7 +95,7 @@ function DowngradeIntro({onDowngrade, buttonDisabled, loading, policyID}: Props)