diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 2da202fba65c7..f2f518a02722d 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -3222,6 +3222,7 @@ const ROUTES = { getRoute: (backTo?: string) => getUrlWithBackToParam(`workspace/confirmation`, backTo), }, WORKSPACE_CONFIRMATION_OWNER_SELECTOR: 'workspace/confirmation/owner-selector', + WORKSPACE_CONFIRMATION_SUCCESS: 'workspace/confirmation/success', MIGRATED_USER_WELCOME_MODAL: { route: 'onboarding/migrated-user-welcome', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index 7e3bf21212745..bd2041c980c66 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -514,7 +514,7 @@ const SCREENS = { ROOT: 'ReportChangeWorkspace_Root', }, - WORKSPACE_CONFIRMATION: {ROOT: 'Workspace_Confirmation_Root', OWNER_SELECTOR: 'Workspace_Confirmation_Owner_Selector'}, + WORKSPACE_CONFIRMATION: {ROOT: 'Workspace_Confirmation_Root', OWNER_SELECTOR: 'Workspace_Confirmation_Owner_Selector', SUCCESS: 'Workspace_Confirmation_Success'}, WORKSPACE_DUPLICATE: {ROOT: 'Workspace_Duplicate_Root', SELECT_FEATURES: 'Workspace_Duplicate_Select_Features'}, WORKSPACES_LIST: 'Workspaces_List', diff --git a/src/languages/de.ts b/src/languages/de.ts index 804bd94a6a2a0..80ceef504c868 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -4201,6 +4201,10 @@ ${amount} für ${merchant} – ${date}`, budgetTypeForNotificationMessage: {tag: 'Tag', category: 'Kategorie'}, deepDiveExpensifyCard: `Transaktionen der Expensify Karte werden automatisch in ein „Expensify Karte Verbindlichkeitskonto“ exportiert, das mit unserer Integration erstellt wird.`, }, + createdForClient: { + title: 'Du hast einen Workspace für deinen Kunden erstellt!', + description: 'Großartige Neuigkeiten 🎉. Kontaktiere uns, wenn sie Hilfe bei der Einrichtung benötigen.', + }, receiptPartners: { uber: { subtitle: (organizationName: string) => diff --git a/src/languages/en.ts b/src/languages/en.ts index 177e54d4603f8..52a46e120d21b 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -4271,6 +4271,10 @@ const translations = { policyExpenseChatName: (displayName: string) => `${displayName}'s expenses`, deepDiveExpensifyCard: `Expensify Card transactions will automatically export to an "Expensify Card Liability Account" created with our integration.`, }, + createdForClient: { + title: "You've created a workspace for your client!", + description: 'Great news 🎉. Reach out to us if they need any help with the setup.', + }, receiptPartners: { uber: { subtitle: (organizationName: string) => (organizationName ? `Connected to ${organizationName}` : 'Automate travel and meal delivery expenses across your organization.'), diff --git a/src/languages/es.ts b/src/languages/es.ts index 08e608ff3c893..d4d4f6bef2a35 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -4134,6 +4134,10 @@ ${amount} para ${merchant} - ${date}`, policyExpenseChatName: (displayName) => `${displayName}'s gastos`, deepDiveExpensifyCard: `Las transacciones de la Tarjeta Expensify se exportan automáticamente a una "Cuenta de Responsabilidad de la Tarjeta Expensify" creada con nuestra integración.`, }, + createdForClient: { + title: '¡Has creado un espacio de trabajo para tu cliente!', + description: 'Excelentes noticias 🎉. Contáctanos si necesitan ayuda con la configuración.', + }, receiptPartners: { uber: { subtitle: (organizationName) => (organizationName ? `Conectado a ${organizationName}` : 'Automatice los gastos de viajes y entrega de comidas en toda su organización.'), diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 889ba7bd3327b..82d24a3dc400b 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -4211,6 +4211,10 @@ ${amount} pour ${merchant} - ${date}`, policyExpenseChatName: (displayName: string) => `Dépenses de ${displayName}`, deepDiveExpensifyCard: `Les transactions de la Carte Expensify seront automatiquement exportées vers un « compte de passif Carte Expensify » créé avec notre intégration.`, }, + createdForClient: { + title: 'Vous avez créé un espace de travail pour votre client !', + description: "Excellente nouvelle 🎉. Contactez-nous si votre client a besoin d'aide pour la configuration.", + }, receiptPartners: { uber: { subtitle: (organizationName: string) => diff --git a/src/languages/it.ts b/src/languages/it.ts index 1dbbdf39e215a..45e7967d3b81d 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -4189,6 +4189,10 @@ ${amount} per ${merchant} - ${date}`, budgetTypeForNotificationMessage: {tag: 'etichetta', category: 'categoria'}, deepDiveExpensifyCard: `Le transazioni della Carta Expensify verranno esportate automaticamente in un "Conto Passivo Carta Expensify" creato con la nostra integrazione.`, }, + createdForClient: { + title: 'Hai creato uno spazio di lavoro per il tuo cliente!', + description: 'Ottime notizie 🎉. Contattaci se hanno bisogno di aiuto con la configurazione.', + }, receiptPartners: { uber: { subtitle: (organizationName: string) => diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 15845d5a9c3c2..a2fabc1da25ab 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -4159,6 +4159,10 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' budgetFrequencyUnit: {monthly: '月', yearly: '年'}, budgetTypeForNotificationMessage: {tag: 'タグ', category: 'カテゴリ'}, }, + createdForClient: { + title: 'クライアントのワークスペースを作成しました!', + description: '素晴らしいニュースです 🎉。セットアップにサポートが必要な場合はお問い合わせください。', + }, receiptPartners: { uber: { subtitle: (organizationName: string) => (organizationName ? `${organizationName} に接続しました` : '組織全体の出張費や飲食デリバリー経費を自動化しましょう。'), diff --git a/src/languages/nl.ts b/src/languages/nl.ts index f021695962964..d00adb9dd5355 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -4187,6 +4187,10 @@ ${amount} voor ${merchant} - ${date}`, budgetTypeForNotificationMessage: {tag: 'tag', category: 'categorie'}, deepDiveExpensifyCard: `Transacties met de Expensify Kaart worden automatisch geëxporteerd naar een "Expensify Kaart Passivarekening" dat wordt aangemaakt via onze integratie.`, }, + createdForClient: { + title: 'Je hebt een werkruimte voor je klant aangemaakt!', + description: 'Geweldig nieuws 🎉. Neem contact met ons op als ze hulp nodig hebben bij de configuratie.', + }, receiptPartners: { uber: { subtitle: (organizationName: string) => (organizationName ? `Verbonden met ${organizationName}` : 'Automatiseer reis- en maaltijdbezorgingskosten in uw hele organisatie.'), diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 8b04775a09441..30fbbfb244647 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -4179,6 +4179,10 @@ ${amount} dla ${merchant} - ${date}`, policyExpenseChatName: (displayName: string) => `Wydatki ${displayName}`, deepDiveExpensifyCard: `Transakcje z Karty Expensify będą automatycznie eksportowane do „Konta zobowiązań Karty Expensify” utworzonego dzięki naszej integracji.`, }, + createdForClient: { + title: 'Utworzyłeś przestrzeń roboczą dla swojego klienta!', + description: 'Świetna wiadomość 🎉. Skontaktuj się z nami, jeśli potrzebują pomocy przy konfiguracji.', + }, receiptPartners: { uber: { subtitle: (organizationName: string) => diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 9238e47c4625d..e328ccd62c96b 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -4180,6 +4180,10 @@ ${amount} para ${merchant} - ${date}`, budgetTypeForNotificationMessage: {tag: 'etiqueta', category: 'categoria'}, deepDiveExpensifyCard: `As transações do Cartão Expensify serão exportadas automaticamente para uma “Conta de Responsabilidade do Cartão Expensify” criada com nossa integração.`, }, + createdForClient: { + title: 'Você criou um espaço de trabalho para seu cliente!', + description: 'Ótimas notícias 🎉. Entre em contato conosco se precisarem de ajuda com a configuração.', + }, receiptPartners: { uber: { subtitle: (organizationName: string) => diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 34e4c9d2daf3a..b0d1eb6e8b24a 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -4082,6 +4082,10 @@ ${amount},商户:${merchant} - 日期:${date}`, policyExpenseChatName: (displayName: string) => `${displayName} 的报销费用`, deepDiveExpensifyCard: `Expensify 卡交易将自动导出到使用我们的集成创建的“Expensify 卡负债账户”。`, }, + createdForClient: { + title: '您已为客户创建了工作区!', + description: '好消息 🎉。如果他们在设置方面需要帮助,请联系我们。', + }, receiptPartners: { uber: { subtitle: (organizationName: string) => (organizationName ? `已连接到 ${organizationName}` : '在整个组织内自动化管理差旅和外卖餐饮报销。'), diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 0fdf0251f7bf8..8ef7cb5a32628 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -280,6 +280,7 @@ const ReportSettingsModalStackNavigator = createModalStackNavigator({ [SCREENS.WORKSPACE_CONFIRMATION.ROOT]: () => require('../../../../pages/workspace/WorkspaceConfirmationPage').default, [SCREENS.WORKSPACE_CONFIRMATION.OWNER_SELECTOR]: () => require('../../../../pages/workspace/WorkspaceConfirmationOwnerSelectorPage').default, + [SCREENS.WORKSPACE_CONFIRMATION.SUCCESS]: () => require('../../../../pages/workspace/WorkspaceConfirmationSuccessPage').default, [SCREENS.CURRENCY.SELECTION]: () => require('../../../../pages/CurrencySelectionPage').default, }); diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index f7842ce2442fb..da57b976acf1c 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -1595,6 +1595,7 @@ const config: LinkingOptions['config'] = { screens: { [SCREENS.WORKSPACE_CONFIRMATION.ROOT]: ROUTES.WORKSPACE_CONFIRMATION.route, [SCREENS.WORKSPACE_CONFIRMATION.OWNER_SELECTOR]: ROUTES.WORKSPACE_CONFIRMATION_OWNER_SELECTOR, + [SCREENS.WORKSPACE_CONFIRMATION.SUCCESS]: ROUTES.WORKSPACE_CONFIRMATION_SUCCESS, [SCREENS.CURRENCY.SELECTION]: ROUTES.CURRENCY_SELECTION.route, }, }, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 6053b255c2b57..e349a37528986 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -2180,6 +2180,7 @@ type WorkspaceConfirmationNavigatorParamList = { backTo?: Routes; }; [SCREENS.WORKSPACE_CONFIRMATION.OWNER_SELECTOR]: undefined; + [SCREENS.WORKSPACE_CONFIRMATION.SUCCESS]: undefined; [SCREENS.CURRENCY.SELECTION]: { // 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; diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index db13afeb333e3..7b096ffa4b747 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -2341,7 +2341,7 @@ function createDraftInitialWorkspace( id: policyID, type: type || CONST.POLICY.TYPE.TEAM, name: workspaceName, - role: CONST.POLICY.ROLE.ADMIN, + role: makeMeAdmin || !policyOwnerEmail || policyOwnerEmail === deprecatedSessionEmail ? CONST.POLICY.ROLE.ADMIN : undefined, owner: deprecatedSessionEmail, ownerAccountID: deprecatedSessionAccountID, isPolicyExpenseChatEnabled: true, @@ -2503,7 +2503,7 @@ function buildPolicyData(options: BuildPolicyDataOptions): OnyxData { const policyID = params.policyID || generatePolicyID(); - const routeToNavigate = isSmallScreenWidth ? ROUTES.WORKSPACE_INITIAL.getRoute(policyID) : ROUTES.WORKSPACE_OVERVIEW.getRoute(policyID); + const isDifferentOwner = !!params.owner && params.owner !== (currentUserPersonalDetails.email ?? ''); + const shouldShowSuccessPage = isDifferentOwner && !params.makeMeAdmin; + const workspaceRoute = isSmallScreenWidth ? ROUTES.WORKSPACE_INITIAL.getRoute(policyID) : ROUTES.WORKSPACE_OVERVIEW.getRoute(policyID); + const routeToNavigate = shouldShowSuccessPage ? ROUTES.WORKSPACE_CONFIRMATION_SUCCESS : workspaceRoute; createWorkspaceWithPolicyDraftAndNavigateToIt({ introSelected, policyOwnerEmail: params.owner, diff --git a/src/pages/workspace/WorkspaceConfirmationSuccessPage.tsx b/src/pages/workspace/WorkspaceConfirmationSuccessPage.tsx new file mode 100644 index 0000000000000..5d24cf0597c93 --- /dev/null +++ b/src/pages/workspace/WorkspaceConfirmationSuccessPage.tsx @@ -0,0 +1,39 @@ +import React, {useCallback} from 'react'; +import ConfirmationPage from '@components/ConfirmationPage'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import ScreenWrapper from '@components/ScreenWrapper'; +import useLocalize from '@hooks/useLocalize'; +import useThemeStyles from '@hooks/useThemeStyles'; +import Navigation from '@libs/Navigation/Navigation'; + +function WorkspaceConfirmationSuccessPage() { + const styles = useThemeStyles(); + const {translate} = useLocalize(); + const closePage = useCallback(() => { + Navigation.closeRHPFlow(); + }, []); + + return ( + + + + + ); +} + +WorkspaceConfirmationSuccessPage.displayName = 'WorkspaceConfirmationSuccessPage'; + +export default WorkspaceConfirmationSuccessPage;