diff --git a/src/languages/en.ts b/src/languages/en.ts index 1667f328a60f..71a915b1fc7b 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -2713,6 +2713,7 @@ const translations = { submitExpense: 'Submit your expenses below:', defaultCategory: 'Default category', viewTransactions: 'View transactions', + leaveConfirmation: "Are you sure you want to leave this workspace? Once you leave, you'll lose access to all data and settings associated with this workspace.", }, perDiem: { subtitle: 'Set per diem rates to control daily employee spend. ', diff --git a/src/languages/es.ts b/src/languages/es.ts index f4b309b48224..fb9a7c7c38d2 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -2738,6 +2738,8 @@ const translations = { submitExpense: 'Envía tus gastos a continuación:', defaultCategory: 'Categoría predeterminada', viewTransactions: 'Ver transacciones', + leaveConfirmation: + '¿Estás seguro de que quieres salir de este espacio de trabajo? Una vez que salgas, perderás el acceso a todos los datos y configuraciones asociadas con este espacio de trabajo.', }, perDiem: { subtitle: 'Establece las tasas per diem para controlar los gastos diarios de los empleados. ', diff --git a/src/pages/workspace/WorkspaceProfilePage.tsx b/src/pages/workspace/WorkspaceProfilePage.tsx index 8379f3e94caa..a121ef0710de 100644 --- a/src/pages/workspace/WorkspaceProfilePage.tsx +++ b/src/pages/workspace/WorkspaceProfilePage.tsx @@ -20,7 +20,7 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeIllustrations from '@hooks/useThemeIllustrations'; import useThemeStyles from '@hooks/useThemeStyles'; import {clearInviteDraft} from '@libs/actions/Policy/Member'; -import {clearAvatarErrors, clearPolicyErrorField, deleteWorkspace, deleteWorkspaceAvatar, openPolicyProfilePage, updateWorkspaceAvatar} from '@libs/actions/Policy/Policy'; +import {clearAvatarErrors, clearPolicyErrorField, deleteWorkspace, deleteWorkspaceAvatar, leaveWorkspace, openPolicyProfilePage, updateWorkspaceAvatar} from '@libs/actions/Policy/Policy'; import {getLatestErrorField} from '@libs/ErrorUtils'; import getTopmostBottomTabRoute from '@libs/Navigation/getTopmostBottomTabRoute'; import Navigation, {navigationRef} from '@libs/Navigation/Navigation'; @@ -49,6 +49,7 @@ function WorkspaceProfilePage({policyDraft, policy: policyProp, route}: Workspac const illustrations = useThemeIllustrations(); const {activeWorkspaceID, setActiveWorkspaceID} = useActiveWorkspace(); const {canUseSpotnanaTravel} = usePermissions(); + const [isLeaveModalOpen, setIsLeaveModalOpen] = useState(false); const [currencyList = {}] = useOnyx(ONYXKEYS.CURRENCY_LIST); const [currentUserAccountID = -1] = useOnyx(ONYXKEYS.SESSION, {selector: (session) => session?.accountID}); @@ -156,16 +157,23 @@ function WorkspaceProfilePage({policyDraft, policy: policyProp, route}: Workspac const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); - const confirmDeleteAndHideModal = useCallback(() => { - if (!policy?.id || !policyName) { - return; - } + const handleWorkspaceAction = useCallback( + (action: 'delete' | 'leave') => { + if (!policy?.id || !policyName) { + return; + } - deleteWorkspace(policy.id, policyName); - setIsDeleteModalOpen(false); + if (action === 'delete') { + deleteWorkspace(policy.id, policyName); + setIsDeleteModalOpen(false); + } else { + leaveWorkspace(policy.id); + } + + if (activeWorkspaceID !== policy?.id) { + return; + } - // If the workspace being deleted is the active workspace, switch to the "All Workspaces" view - if (activeWorkspaceID === policy.id) { setActiveWorkspaceID(undefined); Navigation.dismissModal(); const rootState = navigationRef.current?.getRootState() as State; @@ -173,10 +181,10 @@ function WorkspaceProfilePage({policyDraft, policy: policyProp, route}: Workspac if (topmostBottomTabRoute?.name === SCREENS.SETTINGS.ROOT) { Navigation.setParams({policyID: undefined}, topmostBottomTabRoute?.key); } - } - goBackFromInvalidPolicy(); - }, [policy?.id, policyName, activeWorkspaceID, setActiveWorkspaceID]); - + goBackFromInvalidPolicy(); + }, + [policy?.id, policyName, activeWorkspaceID, setActiveWorkspaceID], + ); return ( { if (!policy?.id) { return; @@ -367,17 +375,37 @@ function WorkspaceProfilePage({policyDraft, policy: policyProp, route}: Workspac )} )} + {!(isPolicyAdmin || isOwner) && ( + +