diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 171a73946b5b..8988a36ecb28 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -6329,8 +6329,6 @@ const CONST = { EXPENSIFY_ICON_NAME: 'Expensify', - WELCOME_VIDEO_URL: `${CLOUDFRONT_URL}/videos/intro-1280.mp4`, - ONBOARDING_CHOICES: {...onboardingChoices}, SELECTABLE_ONBOARDING_CHOICES: {...selectableOnboardingChoices}, CREATE_EXPENSE_ONBOARDING_CHOICES: {...createExpenseOnboardingChoices}, diff --git a/src/NAVIGATORS.ts b/src/NAVIGATORS.ts index 23f0755290cc..7f24aedd382e 100644 --- a/src/NAVIGATORS.ts +++ b/src/NAVIGATORS.ts @@ -7,7 +7,6 @@ export default { RIGHT_MODAL_NAVIGATOR: 'RightModalNavigator', ONBOARDING_MODAL_NAVIGATOR: 'OnboardingModalNavigator', FEATURE_TRAINING_MODAL_NAVIGATOR: 'FeatureTrainingModalNavigator', - EXPLANATION_MODAL_NAVIGATOR: 'ExplanationModalNavigator', MIGRATED_USER_MODAL_NAVIGATOR: 'MigratedUserModalNavigator', TEST_DRIVE_MODAL_NAVIGATOR: 'TestDriveModalNavigator', TEST_DRIVE_DEMO_NAVIGATOR: 'TestDriveDemoNavigator', diff --git a/src/ROUTES.ts b/src/ROUTES.ts index d37f9e39d1e1..ac8e4a090e64 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -3349,7 +3349,6 @@ const ROUTES = { // eslint-disable-next-line @typescript-eslint/no-deprecated -- Legacy route generation, consistent with other onboarding routes getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/personaltrackcase`, backTo), }, - EXPLANATION_MODAL_ROOT: 'onboarding/explanation', TEST_DRIVE_MODAL_ROOT: { route: 'onboarding/test-drive', getRoute: (bossEmail?: string) => `onboarding/test-drive${bossEmail ? `?bossEmail=${encodeURIComponent(bossEmail)}` : ''}` as const, diff --git a/src/SCREENS.ts b/src/SCREENS.ts index d1f17873afa7..198dee4b21da 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -964,10 +964,6 @@ const SCREENS = { SELECTION: 'Currency_Selection', }, - EXPLANATION_MODAL: { - ROOT: 'Explanation_Modal_Root', - }, - MIGRATED_USER_WELCOME_MODAL: { ROOT: 'MigratedUserWelcomeModal_Root', }, diff --git a/src/components/ExplanationModal.tsx b/src/components/ExplanationModal.tsx deleted file mode 100644 index 5768d184fffa..000000000000 --- a/src/components/ExplanationModal.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import useLocalize from '@hooks/useLocalize'; -import * as Welcome from '@userActions/Welcome'; -import CONST from '@src/CONST'; -import FeatureTrainingModal from './FeatureTrainingModal'; - -function ExplanationModal() { - const {translate} = useLocalize(); - - return ( - - ); -} - -export default ExplanationModal; diff --git a/src/hooks/useOnboardingFlow.ts b/src/hooks/useOnboardingFlow.ts index 82f17e6c3552..c9eca3491caf 100644 --- a/src/hooks/useOnboardingFlow.ts +++ b/src/hooks/useOnboardingFlow.ts @@ -6,6 +6,7 @@ import getCurrentUrl from '@libs/Navigation/currentUrl'; import Navigation from '@libs/Navigation/Navigation'; import TransitionTracker from '@libs/Navigation/TransitionTracker'; import {isLoggingInAsNewUser} from '@libs/SessionUtils'; +import {completeHybridAppOnboarding} from '@userActions/Welcome'; import {startOnboardingFlow} from '@userActions/Welcome/OnboardingFlow'; import CONFIG from '@src/CONFIG'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -72,9 +73,10 @@ function useOnboardingFlowRouter() { return; } - // When user is transitioning from OldDot to NewDot, we usually show the explanation modal + // Make sure hybrid app onboarding is completed and will not start startOnboardingFlow for users that switched from OldDot. if (isHybridAppOnboardingCompleted === false) { - Navigation.navigate(ROUTES.EXPLANATION_MODAL_ROOT); + completeHybridAppOnboarding(); + return; } } @@ -89,8 +91,7 @@ function useOnboardingFlowRouter() { // We use startOnboardingFlow (which calls resetRoot) instead of Navigation.navigate because // navigate goes through the router where OnboardingGuard would block the navigation. // waitForProtectedRoutes ensures navigation is ready, which is critical during fresh login. - // Skip when HybridApp explanation modal is active (OldDot-transitioning users). - if (isOnboardingCompleted === false && !(CONFIG.IS_HYBRID_APP && isHybridAppOnboardingCompleted === false)) { + if (isOnboardingCompleted === false) { Navigation.waitForProtectedRoutes().then(() => { startOnboardingFlow({ onboardingValuesParam: onboardingValues ?? undefined, diff --git a/src/languages/de.ts b/src/languages/de.ts index 19bfc47eb786..27f21933473b 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -3046,12 +3046,6 @@ ${amount} für ${merchant} – ${date}`, welcome: 'Willkommen!', welcomeSignOffTitleManageTeam: 'Sobald du die Aufgaben oben abgeschlossen hast, können wir weitere Funktionen wie Genehmigungs-Workflows und Regeln erkunden!', welcomeSignOffTitle: 'Schön, dich kennenzulernen!', - explanationModal: { - title: 'Willkommen bei Expensify', - description: - 'Eine App, um Ihre geschäftlichen und privaten Ausgaben in Chat-Geschwindigkeit zu verwalten. Probieren Sie es aus und sagen Sie uns, was Sie denken. Da kommt noch viel mehr!', - secondaryDescription: 'Um zurück zu Expensify Classic zu wechseln, tippe einfach auf dein Profilbild > Gehe zu Expensify Classic.', - }, getStarted: 'Loslegen', whatsYourName: 'Wie heißt du?', peopleYouMayKnow: 'Prüfen Sie, ob Ihr Team in Expensify ist', diff --git a/src/languages/en.ts b/src/languages/en.ts index 249922ef75c3..e937737c3ae1 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -3127,11 +3127,6 @@ const translations = { welcome: 'Welcome!', welcomeSignOffTitleManageTeam: 'Once you finish the tasks above, we can explore more functionality like approval workflows and rules!', welcomeSignOffTitle: "It's great to meet you!", - explanationModal: { - title: 'Welcome to Expensify', - description: 'One app to handle your business and personal spend at the speed of chat. Try it out and let us know what you think. Much more to come!', - secondaryDescription: 'To switch back to Expensify Classic, just tap your profile picture > Go to Expensify Classic.', - }, getStarted: 'Get started', whatsYourName: "What's your name?", peopleYouMayKnow: "See if your team's in Expensify", diff --git a/src/languages/es.ts b/src/languages/es.ts index 265f586ddb67..8c40e566d5ef 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -2916,11 +2916,6 @@ ${amount} para ${merchant} - ${date}`, welcome: '¡Bienvenido!', welcomeSignOffTitle: '¡Es un placer conocerte!', welcomeSignOffTitleManageTeam: 'Una vez que termines las tareas anteriores, podemos explorar más funcionalidades como flujos de aprobación y reglas.', - explanationModal: { - title: 'Bienvenido a Expensify', - description: 'Una aplicación para gestionar en un chat todos los gastos de tu empresa y personales. Inténtalo y dinos qué te parece. ¡Hay mucho más por venir!', - secondaryDescription: 'Para volver a Expensify Classic, simplemente haz click en tu foto de perfil > Ir a Expensify Classic.', - }, getStarted: 'Comenzar', whatsYourName: '¿Cómo te llamas?', peopleYouMayKnow: 'Comprueba si tu equipo está en Expensify', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 4cf2fd8b049b..5b95484f7ba5 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -3053,12 +3053,6 @@ ${amount} pour ${merchant} - ${date}`, welcomeSignOffTitleManageTeam: 'Une fois que vous aurez terminé les tâches ci-dessus, nous pourrons explorer davantage de fonctionnalités, comme les workflows d’approbation et les règles !', welcomeSignOffTitle: 'Ravi de faire votre connaissance !', - explanationModal: { - title: 'Bienvenue sur Expensify', - description: - 'Une seule application pour gérer vos dépenses professionnelles et personnelles à la vitesse d’un chat. Essayez-la et dites-nous ce que vous en pensez. Et ce n’est qu’un début !', - secondaryDescription: 'Pour revenir à Expensify Classic, appuyez simplement sur votre photo de profil > Aller à Expensify Classic.', - }, getStarted: 'Commencer', whatsYourName: 'Comment vous appelez-vous ?', peopleYouMayKnow: 'Vérifier si votre équipe est sur Expensify', diff --git a/src/languages/it.ts b/src/languages/it.ts index f0d69d047dd1..e2e74784ef3d 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -3040,11 +3040,6 @@ ${amount} per ${merchant} - ${date}`, welcome: 'Benvenuto!', welcomeSignOffTitleManageTeam: 'Una volta completate le attività sopra, potremo esplorare altre funzionalità come i flussi di approvazione e le regole!', welcomeSignOffTitle: 'È un piacere conoscerti!', - explanationModal: { - title: 'Benvenuto in Expensify', - description: 'Un’unica app per gestire le spese aziendali e personali alla velocità di una chat. Provala e facci sapere cosa ne pensi. E non è che l’inizio!', - secondaryDescription: 'Per tornare a Expensify Classic, tocca l’immagine del tuo profilo > Vai a Expensify Classic.', - }, getStarted: 'Inizia', whatsYourName: 'Come ti chiami?', peopleYouMayKnow: 'Verifica se il tuo team è su Expensify', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index ba3525bacb0d..0e0e69b707b4 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -3016,12 +3016,6 @@ ${date} の ${merchant} への ${amount}`, welcome: 'ようこそ!', welcomeSignOffTitleManageTeam: '上記のタスクが完了したら、承認ワークフローやルールなど、さらに多くの機能を試してみましょう!', welcomeSignOffTitle: 'お会いできてうれしいです!', - explanationModal: { - title: 'Expensify へようこそ', - description: - '1つのアプリで、ビジネスとプライベートの支出をチャットのスピードで管理しましょう。ぜひお試しいただき、ご意見をお聞かせください。今後もさらに機能を追加していきます!', - secondaryDescription: 'Expensify Classic に戻るには、プロフィール写真をタップし、「Expensify Classic に移動」を選択してください。', - }, getStarted: 'はじめる', whatsYourName: 'あなたの名前は何ですか?', peopleYouMayKnow: 'あなたのチームが Expensify を利用しているか確認する', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 67e4df8c19e2..bc07604c0eca 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -3037,12 +3037,6 @@ ${amount} voor ${merchant} - ${date}`, welcome: 'Welkom!', welcomeSignOffTitleManageTeam: 'Zodra je de bovenstaande taken hebt afgerond, kunnen we meer functionaliteit verkennen, zoals goedkeuringsworkflows en regels!', welcomeSignOffTitle: 'Leuk om je te ontmoeten!', - explanationModal: { - title: 'Welkom bij Expensify', - description: - 'Eén app om je zakelijke en persoonlijke uitgaven af te handelen met de snelheid van chat. Probeer het uit en laat ons weten wat je ervan vindt. Er komt nog veel meer aan!', - secondaryDescription: 'Om terug te schakelen naar Expensify Classic, tik je gewoon op je profielfoto > Ga naar Expensify Classic.', - }, getStarted: 'Aan de slag', whatsYourName: 'Hoe heet je?', peopleYouMayKnow: 'Kijk of je team al in Expensify zit', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 74b96e778077..06dceafe2c84 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -3031,11 +3031,6 @@ ${amount} dla ${merchant} - ${date}`, welcome: 'Witamy!', welcomeSignOffTitleManageTeam: 'Gdy ukończysz powyższe zadania, będziemy mogli poznać więcej funkcji, takich jak przepływy akceptacji i reguły!', welcomeSignOffTitle: 'Miło cię poznać!', - explanationModal: { - title: 'Witamy w Expensify', - description: 'Jedna aplikacja do obsługi firmowych i prywatnych wydatków w tempie czatu. Wypróbuj ją i daj nam znać, co o niej myślisz. To dopiero początek!', - secondaryDescription: 'Aby wrócić do Expensify Classic, po prostu stuknij swoje zdjęcie profilowe > Przejdź do Expensify Classic.', - }, getStarted: 'Rozpocznij', whatsYourName: 'Jak masz na imię?', peopleYouMayKnow: 'Sprawdź, czy twój zespół jest w Expensify', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 840a91c35bea..772b8bc3d855 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -3027,11 +3027,6 @@ ${amount} para ${merchant} - ${date}`, welcome: 'Bem-vindo!', welcomeSignOffTitleManageTeam: 'Quando você concluir as tarefas acima, poderemos explorar mais funcionalidades, como fluxos de aprovação e regras!', welcomeSignOffTitle: 'É ótimo conhecer você!', - explanationModal: { - title: 'Bem-vindo ao Expensify', - description: 'Um só app para gerenciar seus gastos empresariais e pessoais na velocidade de um chat. Experimente e conte para a gente o que achou. Muito mais vindo por aí!', - secondaryDescription: 'Para voltar para o Expensify Classic, basta tocar na sua foto de perfil > Ir para Expensify Classic.', - }, getStarted: 'Começar', whatsYourName: 'Qual é o seu nome?', peopleYouMayKnow: 'Veja se sua equipe está no Expensify', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index df3c294b01c1..18036ce4bfba 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -2950,11 +2950,6 @@ ${amount},商户:${merchant} - 日期:${date}`, welcome: '欢迎!', welcomeSignOffTitleManageTeam: '完成以上任务后,我们就可以探索更多功能,比如审批流程和规则!', welcomeSignOffTitle: '很高兴见到你!', - explanationModal: { - title: '欢迎使用 Expensify', - description: '一款应用,以聊天的速度处理您的商务和个人支出。试试看,并告诉我们您的想法。更多精彩功能即将上线!', - secondaryDescription: '要切换回 Expensify Classic,只需点按您的头像 > 前往 Expensify Classic。', - }, getStarted: '开始使用', whatsYourName: '你叫什么名字?', peopleYouMayKnow: '查看你的团队是否已在 Expensify 中', diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index a79e1158e3aa..1b4ac7b2c2aa 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -56,7 +56,6 @@ import DelegatorConnectGuard from './DelegatorConnectGate'; import hideKeyboardOnSwipe from './hideKeyboardOnSwipe'; import KeyboardShortcutsHandler from './KeyboardShortcutsHandler'; import {ShareModalStackNavigator} from './ModalStackNavigators'; -import ExplanationModalNavigator from './Navigators/ExplanationModalNavigator'; import FeatureTrainingModalNavigator from './Navigators/FeatureTrainingModalNavigator'; import MigratedUserWelcomeModalNavigator from './Navigators/MigratedUserWelcomeModalNavigator'; import MultifactorAuthenticationModalNavigator from './Navigators/MultifactorAuthenticationModalNavigator'; @@ -302,11 +301,6 @@ function AuthScreens() { component={ShareModalStackNavigator} listeners={modalScreenListeners} /> - (); - -function ExplanationModalNavigator() { - const {shouldUseNarrowLayout} = useResponsiveLayout(); - return ( - - - - - - - - ); -} - -export default ExplanationModalNavigator; diff --git a/src/libs/Navigation/guards/OnboardingGuard.ts b/src/libs/Navigation/guards/OnboardingGuard.ts index 2076fa19db9b..6efb64ddf97e 100644 --- a/src/libs/Navigation/guards/OnboardingGuard.ts +++ b/src/libs/Navigation/guards/OnboardingGuard.ts @@ -169,7 +169,7 @@ const OnboardingGuard: NavigationGuard = { const isOnboardingCompleted = hasCompletedGuidedSetupFlowSelector(onboarding) ?? false; const isMigratedUser = tryNewDot?.hasBeenAddedToNudgeMigration ?? false; const isSingleEntry = hybridApp?.isSingleNewDotEntry ?? false; - const needsExplanationModal = (CONFIG.IS_HYBRID_APP && tryNewDot?.isHybridAppOnboardingCompleted !== true) ?? false; + const isFirstTimeHybridAppTransition = (CONFIG.IS_HYBRID_APP && tryNewDot?.isHybridAppOnboardingCompleted !== true) ?? false; // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing const isInvitedOrGroupMember = (hasNonPersonalPolicy || wasInvitedToNewDot) ?? false; @@ -192,7 +192,7 @@ const OnboardingGuard: NavigationGuard = { isMigratedUser || isInvitedOrGroupMember || isSingleEntry || - needsExplanationModal || + isFirstTimeHybridAppTransition || isNavigatingWithReplace; if (shouldSkipOnboarding) { @@ -218,7 +218,7 @@ const OnboardingGuard: NavigationGuard = { isOnboardingCompleted, isMigratedUser, isSingleEntry, - needsExplanationModal, + isFirstTimeHybridAppTransition, isInvitedOrGroupMember, isNavigatingWithReplace, }); diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index 6d75bb519d38..366806f51ab4 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -44,15 +44,6 @@ const config: LinkingOptions['config'] = { [SCREENS.DYNAMIC_CHANGE_POLICY_EDUCATIONAL_ROOT]: DYNAMIC_ROUTES.CHANGE_POLICY_EDUCATIONAL.path, }, }, - [NAVIGATORS.EXPLANATION_MODAL_NAVIGATOR]: { - screens: { - [SCREENS.EXPLANATION_MODAL.ROOT]: { - path: ROUTES.EXPLANATION_MODAL_ROOT, - exact: true, - }, - }, - }, - [NAVIGATORS.MIGRATED_USER_MODAL_NAVIGATOR]: { screens: { [SCREENS.MIGRATED_USER_WELCOME_MODAL.ROOT]: { diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 27d4930de83f..4a4452b00f9f 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -2920,10 +2920,6 @@ type OnboardingModalNavigatorParamList = { }; }; -type ExplanationModalNavigatorParamList = { - [SCREENS.EXPLANATION_MODAL.ROOT]: undefined; -}; - type MigratedUserModalNavigatorParamList = { [SCREENS.MIGRATED_USER_WELCOME_MODAL.ROOT]: undefined; }; @@ -3101,7 +3097,6 @@ type AuthScreensParamList = SharedScreensParamList & [NAVIGATORS.RIGHT_MODAL_NAVIGATOR]: NavigatorScreenParams; [NAVIGATORS.ONBOARDING_MODAL_NAVIGATOR]: NavigatorScreenParams; [NAVIGATORS.FEATURE_TRAINING_MODAL_NAVIGATOR]: NavigatorScreenParams; - [NAVIGATORS.EXPLANATION_MODAL_NAVIGATOR]: NavigatorScreenParams; [NAVIGATORS.MIGRATED_USER_MODAL_NAVIGATOR]: NavigatorScreenParams; [NAVIGATORS.TEST_DRIVE_MODAL_NAVIGATOR]: NavigatorScreenParams; [NAVIGATORS.TEST_DRIVE_DEMO_NAVIGATOR]: NavigatorScreenParams; @@ -3327,7 +3322,6 @@ export type { EditRequestNavigatorParamList, EnablePaymentsNavigatorParamList, TabNavigatorParamList, - ExplanationModalNavigatorParamList, FeatureTrainingNavigatorParamList, FlagCommentNavigatorParamList, FullScreenName, diff --git a/src/libs/actions/Welcome/index.ts b/src/libs/actions/Welcome/index.ts index 2104cec90c69..17514ad70d94 100644 --- a/src/libs/actions/Welcome/index.ts +++ b/src/libs/actions/Welcome/index.ts @@ -121,7 +121,7 @@ function completeHybridAppOnboarding() { return; } - // No matter what the response is, we want to mark the onboarding as completed (user saw the explanation modal) + // No matter what the response is, we want to mark the onboarding as completed. Log.info(`[HybridApp] Onboarding status has changed. Propagating new value to OldDot`, true); HybridAppModule.completeOnboarding({status: true}); }); diff --git a/tests/ui/components/FeatureTrainingModalTest.tsx b/tests/ui/components/FeatureTrainingModalTest.tsx index 7641e2afdbcf..3ff063fe0df9 100644 --- a/tests/ui/components/FeatureTrainingModalTest.tsx +++ b/tests/ui/components/FeatureTrainingModalTest.tsx @@ -41,7 +41,7 @@ describe('FeatureTrainingModal', () => { , );