From 46e252577d25630e33bc5e23f8992004b5d06ccb Mon Sep 17 00:00:00 2001 From: Wojciech Boman Date: Mon, 23 Dec 2024 09:34:39 +0100 Subject: [PATCH 1/3] Fix navigating after deleting active workspace --- src/pages/workspace/WorkspaceProfilePage.tsx | 18 ++++++++++++------ src/pages/workspace/WorkspacesListPage.tsx | 11 +++++++++-- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/pages/workspace/WorkspaceProfilePage.tsx b/src/pages/workspace/WorkspaceProfilePage.tsx index 04dd1885d486..76116cbfc4ef 100644 --- a/src/pages/workspace/WorkspaceProfilePage.tsx +++ b/src/pages/workspace/WorkspaceProfilePage.tsx @@ -21,9 +21,10 @@ import useThemeIllustrations from '@hooks/useThemeIllustrations'; import useThemeStyles from '@hooks/useThemeStyles'; import DistanceRequestUtils from '@libs/DistanceRequestUtils'; import * as ErrorUtils from '@libs/ErrorUtils'; -import Navigation from '@libs/Navigation/Navigation'; +import getTopmostBottomTabRoute from '@libs/Navigation/getTopmostBottomTabRoute'; +import Navigation, {navigationRef} from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; -import type {FullScreenNavigatorParamList} from '@libs/Navigation/types'; +import type {FullScreenNavigatorParamList, RootStackParamList, State} from '@libs/Navigation/types'; import Parser from '@libs/Parser'; import * as PolicyUtils from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; @@ -33,7 +34,7 @@ import * as Policy from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import type SCREENS from '@src/SCREENS'; +import SCREENS from '@src/SCREENS'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import type {WithPolicyProps} from './withPolicy'; import withPolicy from './withPolicy'; @@ -165,13 +166,18 @@ function WorkspaceProfilePage({policyDraft, policy: policyProp, route}: Workspac return; } - Policy.deleteWorkspace(policy.id, policyName); + Policy.deleteWorkspace(policy?.id, policyName); setIsDeleteModalOpen(false); // If the workspace being deleted is the active workspace, switch to the "All Workspaces" view - if (activeWorkspaceID === policy.id) { + if (activeWorkspaceID === policy?.id) { setActiveWorkspaceID(undefined); - Navigation.navigateWithSwitchPolicyID({policyID: undefined}); + Navigation.dismissModal(); + const rootState = navigationRef.current?.getRootState() as State; + const topmostBottomTabRoute = getTopmostBottomTabRoute(rootState); + if (topmostBottomTabRoute?.name === SCREENS.SETTINGS.ROOT) { + Navigation.setParams({policyID: undefined}, topmostBottomTabRoute?.key); + } } }, [policy?.id, policyName, activeWorkspaceID, setActiveWorkspaceID]); diff --git a/src/pages/workspace/WorkspacesListPage.tsx b/src/pages/workspace/WorkspacesListPage.tsx index 591f97064ea1..36198baf4c30 100755 --- a/src/pages/workspace/WorkspacesListPage.tsx +++ b/src/pages/workspace/WorkspacesListPage.tsx @@ -28,7 +28,9 @@ import useThemeStyles from '@hooks/useThemeStyles'; import {isConnectionInProgress} from '@libs/actions/connections'; import interceptAnonymousUser from '@libs/interceptAnonymousUser'; import localeCompare from '@libs/LocaleCompare'; -import Navigation from '@libs/Navigation/Navigation'; +import getTopmostBottomTabRoute from '@libs/Navigation/getTopmostBottomTabRoute'; +import Navigation, {navigationRef} from '@libs/Navigation/Navigation'; +import type {RootStackParamList, State} from '@libs/Navigation/types'; import * as PolicyUtils from '@libs/PolicyUtils'; import * as ReportUtils from '@libs/ReportUtils'; import type {AvatarSource} from '@libs/UserUtils'; @@ -38,6 +40,7 @@ import * as Session from '@userActions/Session'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; +import 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'; @@ -149,7 +152,11 @@ function WorkspacesListPage() { // If the workspace being deleted is the active workspace, switch to the "All Workspaces" view if (activeWorkspaceID === policyIDToDelete) { setActiveWorkspaceID(undefined); - Navigation.navigateWithSwitchPolicyID({policyID: undefined}); + const rootState = navigationRef.current?.getRootState() as State; + const topmostBottomTabRoute = getTopmostBottomTabRoute(rootState); + if (topmostBottomTabRoute?.name === SCREENS.SETTINGS.ROOT) { + Navigation.setParams({policyID: undefined}, topmostBottomTabRoute?.key); + } } }; From f5f3934466c1f644ca705dff2421742505e1d8f8 Mon Sep 17 00:00:00 2001 From: Wojciech Boman Date: Mon, 30 Dec 2024 10:30:48 +0100 Subject: [PATCH 2/3] Remove unnecessary optional chaining from confirmDeleteAndHideModal --- src/pages/workspace/WorkspaceProfilePage.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/workspace/WorkspaceProfilePage.tsx b/src/pages/workspace/WorkspaceProfilePage.tsx index 76116cbfc4ef..75ce33eec22d 100644 --- a/src/pages/workspace/WorkspaceProfilePage.tsx +++ b/src/pages/workspace/WorkspaceProfilePage.tsx @@ -166,11 +166,11 @@ function WorkspaceProfilePage({policyDraft, policy: policyProp, route}: Workspac return; } - Policy.deleteWorkspace(policy?.id, policyName); + Policy.deleteWorkspace(policy.id, policyName); setIsDeleteModalOpen(false); // If the workspace being deleted is the active workspace, switch to the "All Workspaces" view - if (activeWorkspaceID === policy?.id) { + if (activeWorkspaceID === policy.id) { setActiveWorkspaceID(undefined); Navigation.dismissModal(); const rootState = navigationRef.current?.getRootState() as State; From cc66dd51af15812e7e9287ea2af4f41551dadf48 Mon Sep 17 00:00:00 2001 From: Wojciech Boman Date: Mon, 30 Dec 2024 11:09:39 +0100 Subject: [PATCH 3/3] Add key to route returned from getTopmostBottomTabRoute --- src/libs/Navigation/getTopmostBottomTabRoute.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/Navigation/getTopmostBottomTabRoute.ts b/src/libs/Navigation/getTopmostBottomTabRoute.ts index 48a8d80f4096..231e815a0016 100644 --- a/src/libs/Navigation/getTopmostBottomTabRoute.ts +++ b/src/libs/Navigation/getTopmostBottomTabRoute.ts @@ -15,7 +15,7 @@ function getTopmostBottomTabRoute(state: State | undefined): throw new Error('BottomTabNavigator route have no routes.'); } - return {name: topmostBottomTabRoute.name as BottomTabName, params: topmostBottomTabRoute.params}; + return {name: topmostBottomTabRoute.name as BottomTabName, params: topmostBottomTabRoute.params, key: topmostBottomTabRoute.key}; } export default getTopmostBottomTabRoute;