diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 0228af844325..dfdc47a7a1e2 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -6145,7 +6145,6 @@ const CONST = { VIDEO_URL: `${CLOUDFRONT_URL}/videos/guided-setup-track-business-v2.mp4`, LEARN_MORE_LINK: `${USE_EXPENSIFY_URL}/track-expenses`, }, - TEST_DRIVE_COVER_ASPECT_RATIO: 1000 / 508, }, /** @@ -8005,7 +8004,6 @@ const CONST = { START_CHAT: 'FABMenu-StartChat', SEND_INVOICE: 'FABMenu-SendInvoice', BOOK_TRAVEL: 'FABMenu-BookTravel', - TEST_DRIVE: 'FABMenu-TestDrive', NEW_WORKSPACE: 'FABMenu-NewWorkspace', QUICK_ACTION: 'FABMenu-QuickAction', }, @@ -8346,10 +8344,6 @@ const CONST = { DISCOVER_SECTION: { TEST_DRIVE: 'DiscoverSection-TestDrive', }, - TEST_DRIVE_MODAL: { - SKIP: 'TestDriveModal-Skip', - START: 'TestDriveModal-Start', - }, HOME_PAGE: { WIDGET_ITEM: 'HomePage-WidgetItem', GETTING_STARTED_ROW: 'HomePage-GettingStartedRow', diff --git a/src/NAVIGATORS.ts b/src/NAVIGATORS.ts index 7f24aedd382e..5b7369b7dddf 100644 --- a/src/NAVIGATORS.ts +++ b/src/NAVIGATORS.ts @@ -8,7 +8,6 @@ export default { ONBOARDING_MODAL_NAVIGATOR: 'OnboardingModalNavigator', FEATURE_TRAINING_MODAL_NAVIGATOR: 'FeatureTrainingModalNavigator', MIGRATED_USER_MODAL_NAVIGATOR: 'MigratedUserModalNavigator', - TEST_DRIVE_MODAL_NAVIGATOR: 'TestDriveModalNavigator', TEST_DRIVE_DEMO_NAVIGATOR: 'TestDriveDemoNavigator', REPORTS_SPLIT_NAVIGATOR: 'ReportsSplitNavigator', SETTINGS_SPLIT_NAVIGATOR: 'SettingsSplitNavigator', diff --git a/src/ROUTES.ts b/src/ROUTES.ts index ea12ca2a6b09..ad0a95104a98 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -3380,10 +3380,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), }, - TEST_DRIVE_MODAL_ROOT: { - route: 'onboarding/test-drive', - getRoute: (bossEmail?: string) => `onboarding/test-drive${bossEmail ? `?bossEmail=${encodeURIComponent(bossEmail)}` : ''}` as const, - }, TEST_DRIVE_DEMO_ROOT: 'onboarding/test-drive/demo', AUTO_SUBMIT_MODAL_ROOT: '/auto-submit', WORKSPACE_CONFIRMATION: { diff --git a/src/SCREENS.ts b/src/SCREENS.ts index adf6ea66043f..1eac043c8897 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -975,9 +975,6 @@ const SCREENS = { ROOT: 'MigratedUserWelcomeModal_Root', }, - TEST_DRIVE_MODAL: { - ROOT: 'TestDrive_Modal_Root', - }, TEST_DRIVE_DEMO: { ROOT: 'TestDrive_Demo_Root', }, diff --git a/src/components/FeatureTrainingModal.tsx b/src/components/FeatureTrainingModal.tsx index 970831c88cc0..e5f058eda17a 100644 --- a/src/components/FeatureTrainingModal.tsx +++ b/src/components/FeatureTrainingModal.tsx @@ -157,5 +157,3 @@ function FeatureTrainingModal({ } export default FeatureTrainingModal; - -export type {FeatureTrainingModalProps}; diff --git a/src/components/TestDrive/Modal/AdminTestDriveModal.tsx b/src/components/TestDrive/Modal/AdminTestDriveModal.tsx deleted file mode 100644 index 05beead52ea1..000000000000 --- a/src/components/TestDrive/Modal/AdminTestDriveModal.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react'; -import {shouldOpenRHPVariant} from '@components/SidePanel/RHPVariantTest'; -import useLocalize from '@hooks/useLocalize'; -import useOnyx from '@hooks/useOnyx'; -import Log from '@libs/Log'; -import Navigation from '@libs/Navigation/Navigation'; -import TransitionTracker from '@libs/Navigation/TransitionTracker'; -import {isAdminRoom} from '@libs/ReportUtils'; -import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; -import BaseTestDriveModal from './BaseTestDriveModal'; - -function AdminTestDriveModal() { - const {translate} = useLocalize(); - const [onboarding] = useOnyx(ONYXKEYS.NVP_ONBOARDING); - const [onboardingReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${onboarding?.chatReportID}`); - - const navigate = () => { - Log.hmmm('[AdminTestDriveModal] Navigate function called'); - TransitionTracker.runAfterTransitions({ - callback: () => { - Log.hmmm('[AdminTestDriveModal] Calling Navigation.navigate()'); - Navigation.navigate(ROUTES.TEST_DRIVE_DEMO_ROOT); - }, - waitForUpcomingTransition: true, - }); - }; - - const skipTestDrive = () => { - Log.hmmm('[AdminTestDriveModal] Skip test drive function called'); - Navigation.dismissModal(); - - if (shouldOpenRHPVariant()) { - Log.hmmm('[AdminTestDriveModal] User was redirected to Workspace Editor, skipping navigation to admin room'); - return; - } - - Log.hmmm('[AdminTestDriveModal] Running after interactions'); - Navigation.setNavigationActionToMicrotaskQueue(() => { - if (!isAdminRoom(onboardingReport)) { - Log.hmmm('[AdminTestDriveModal] Not an admin room'); - return; - } - - Log.hmmm('[AdminTestDriveModal] Navigating to report', {reportID: onboardingReport?.reportID}); - Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(onboardingReport?.reportID)); - }); - }; - - return ( - - ); -} - -export default AdminTestDriveModal; diff --git a/src/components/TestDrive/Modal/BaseTestDriveModal.tsx b/src/components/TestDrive/Modal/BaseTestDriveModal.tsx deleted file mode 100644 index ce30a798bdb7..000000000000 --- a/src/components/TestDrive/Modal/BaseTestDriveModal.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import React, {useEffect} from 'react'; -import TestDrive from '@assets/images/test-drive.svg'; -import type {FeatureTrainingModalProps} from '@components/FeatureTrainingModal'; -import FeatureTrainingModal from '@components/FeatureTrainingModal'; -import useLocalize from '@hooks/useLocalize'; -import useResponsiveLayout from '@hooks/useResponsiveLayout'; -import useThemeStyles from '@hooks/useThemeStyles'; -import {setOnboardingTestDriveModalDismissed} from '@libs/actions/Welcome'; -import Navigation from '@libs/Navigation/Navigation'; -import CONST from '@src/CONST'; - -type BaseTestDriveModalProps = Pick< - FeatureTrainingModalProps, - | 'children' - | 'description' - | 'onConfirm' - | 'shouldCloseOnConfirm' - | 'shouldRenderHTMLDescription' - | 'avoidKeyboard' - | 'shouldShowConfirmationLoader' - | 'canConfirmWhileOffline' - | 'onHelp' - | 'shouldCallOnHelpWhenModalHidden' ->; - -function BaseTestDriveModal({ - description, - onConfirm, - onHelp, - children, - shouldCloseOnConfirm, - shouldRenderHTMLDescription, - avoidKeyboard, - shouldShowConfirmationLoader, - canConfirmWhileOffline, - shouldCallOnHelpWhenModalHidden, -}: BaseTestDriveModalProps) { - const styles = useThemeStyles(); - const {translate} = useLocalize(); - const {shouldUseNarrowLayout} = useResponsiveLayout(); - - useEffect( - () => () => { - // On Android, when the app is closed, this callback still gets executed, and `currentRoute` is set to an empty string (`''`). - const currentRoute = Navigation.getActiveRoute(); - if (!currentRoute) { - return; - } - setOnboardingTestDriveModalDismissed(); - }, - [], - ); - - return ( - - {children} - - ); -} - -export default BaseTestDriveModal; diff --git a/src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx b/src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx deleted file mode 100644 index 4521035faba7..000000000000 --- a/src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx +++ /dev/null @@ -1,155 +0,0 @@ -import {useRoute} from '@react-navigation/native'; -import {validTransactionDraftIDsSelector} from '@selectors/TransactionDraft'; -import {format} from 'date-fns'; -import {Str} from 'expensify-common'; -import React, {useCallback, useMemo, useState} from 'react'; -import TestReceipt from '@assets/images/fake-test-drive-employee-receipt.jpg'; -import TextInput from '@components/TextInput'; -import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; -import useLocalize from '@hooks/useLocalize'; -import useOnboardingMessages from '@hooks/useOnboardingMessages'; -import useOnyx from '@hooks/useOnyx'; -import usePersonalPolicy from '@hooks/usePersonalPolicy'; -import { - initMoneyRequest, - setMoneyRequestAmount, - setMoneyRequestCreated, - setMoneyRequestDescription, - setMoneyRequestMerchant, - setMoneyRequestParticipants, -} from '@libs/actions/IOU/MoneyRequest'; -import {setMoneyRequestReceipt} from '@libs/actions/IOU/Receipt'; -import {verifyTestDriveRecipient} from '@libs/actions/Onboarding'; -import setTestReceipt from '@libs/actions/setTestReceipt'; -import type AccountExistsError from '@libs/Errors/AccountExistsError'; -import Log from '@libs/Log'; -import Navigation from '@libs/Navigation/Navigation'; -import type {PlatformStackRouteProp} from '@libs/Navigation/PlatformStackNavigation/types'; -import type {TestDriveModalNavigatorParamList} from '@libs/Navigation/types'; -import {hasOnlyPersonalPolicies as hasOnlyPersonalPoliciesUtil} from '@libs/PolicyUtils'; -import {generateReportID} from '@libs/ReportUtils'; -import {generateAccountID} from '@libs/UserUtils'; -import CONST from '@src/CONST'; -import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; -import type SCREENS from '@src/SCREENS'; -import BaseTestDriveModal from './BaseTestDriveModal'; - -function EmployeeTestDriveModal() { - const {translate} = useLocalize(); - const reportID = generateReportID(); - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`); - const [parentReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${report?.parentReportID}`); - const [currentDate] = useOnyx(ONYXKEYS.CURRENT_DATE); - const route = useRoute>(); - const [bossEmail, setBossEmail] = useState(route.params?.bossEmail ?? ''); - const [formError, setFormError] = useState(); - const [isLoading, setIsLoading] = useState(false); - const {testDrive} = useOnboardingMessages(); - const currentUserPersonalDetails = useCurrentUserPersonalDetails(); - const personalPolicy = usePersonalPolicy(); - const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY); - const hasOnlyPersonalPolicies = useMemo(() => hasOnlyPersonalPoliciesUtil(allPolicies), [allPolicies]); - const [draftTransactionIDs] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_DRAFT, {selector: validTransactionDraftIDsSelector}); - - const onBossEmailChange = useCallback((value: string) => { - setBossEmail(value); - setFormError(undefined); - }, []); - - const navigate = () => { - Log.hmmm('[EmployeeTestDriveModal] Navigate function called', {bossEmail}); - const loginTrim = bossEmail.trim(); - if (!loginTrim || !Str.isValidEmail(loginTrim)) { - setFormError(translate('common.error.email')); - return; - } - - setIsLoading(true); - - verifyTestDriveRecipient(bossEmail) - .then(() => { - Log.hmmm('[EmployeeTestDriveModal] Test drive recipient verified'); - setTestReceipt( - TestReceipt, - 'jpg', - (source, _, filename) => { - const transactionID = CONST.IOU.OPTIMISTIC_TRANSACTION_ID; - - initMoneyRequest({ - reportID, - personalPolicy, - isFromGlobalCreate: false, - newIouRequestType: CONST.IOU.REQUEST_TYPE.SCAN, - report, - parentReport, - currentDate, - currentUserPersonalDetails, - hasOnlyPersonalPolicies, - draftTransactionIDs, - }); - - setMoneyRequestReceipt(transactionID, source, filename, true, CONST.TEST_RECEIPT.FILE_TYPE, false, true); - - setMoneyRequestParticipants(transactionID, [ - { - accountID: generateAccountID(bossEmail), - login: bossEmail, - displayName: bossEmail, - selected: true, - }, - ]); - setMoneyRequestAmount(transactionID, testDrive.EMPLOYEE_FAKE_RECEIPT.AMOUNT, testDrive.EMPLOYEE_FAKE_RECEIPT.CURRENCY); - setMoneyRequestDescription(transactionID, testDrive.EMPLOYEE_FAKE_RECEIPT.DESCRIPTION, true); - setMoneyRequestMerchant(transactionID, testDrive.EMPLOYEE_FAKE_RECEIPT.MERCHANT, true); - setMoneyRequestCreated(transactionID, format(new Date(), CONST.DATE.FNS_FORMAT_STRING), true); - - Log.hmmm('[EmployeeTestDriveModal] Running after interactions'); - Navigation.goBack(); - Log.hmmm('[EmployeeTestDriveModal] Calling Navigation.goBack() and Navigation.navigate()'); - Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(CONST.IOU.ACTION.CREATE, CONST.IOU.TYPE.SUBMIT, transactionID, reportID)); - }, - () => { - Log.hmmm('[EmployeeTestDriveModal] Error setting test receipt'); - setIsLoading(false); - setFormError(translate('common.genericErrorMessage')); - }, - ); - }) - .catch((e: AccountExistsError) => { - Log.hmmm('[EmployeeTestDriveModal] Error verifying test drive recipient', {error: e}); - setIsLoading(false); - setFormError(e.translationKey ? translate(e.translationKey) : 'common.genericErrorMessage'); - }); - }; - - const skipTestDrive = () => { - Navigation.dismissModal(); - }; - - return ( - - - - ); -} - -export default EmployeeTestDriveModal; diff --git a/src/components/TestDrive/Modal/index.tsx b/src/components/TestDrive/Modal/index.tsx deleted file mode 100644 index 0135f421c801..000000000000 --- a/src/components/TestDrive/Modal/index.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import useOnyx from '@hooks/useOnyx'; -import isTrackOnboardingChoice from '@libs/OnboardingUtils'; -import CONST from '@src/CONST'; -import ONYXKEYS from '@src/ONYXKEYS'; -import AdminTestDriveModal from './AdminTestDriveModal'; -import EmployeeTestDriveModal from './EmployeeTestDriveModal'; - -function TestDriveModal() { - const [introSelected] = useOnyx(ONYXKEYS.NVP_INTRO_SELECTED); - const isAdminTester = introSelected?.choice === CONST.ONBOARDING_CHOICES.MANAGE_TEAM || isTrackOnboardingChoice(introSelected?.choice); - - return isAdminTester ? : ; -} - -export default TestDriveModal; diff --git a/src/components/TestDrive/TestDriveDemo.tsx b/src/components/TestDrive/TestDriveDemo.tsx index 6e90b8a1601a..14cab1d5525e 100644 --- a/src/components/TestDrive/TestDriveDemo.tsx +++ b/src/components/TestDrive/TestDriveDemo.tsx @@ -109,7 +109,7 @@ function TestDriveDemo() { Navigation.goBack(); if (shouldOpenRHPVariant()) { - Log.hmmm('[AdminTestDriveModal] User was redirected to Workspace Editor, skipping navigation to admin room'); + Log.hmmm('[TestDriveDemo] User was redirected to Workspace Editor, skipping navigation to admin room'); return; } if (isAdminRoom(onboardingReport)) { diff --git a/src/languages/de.ts b/src/languages/de.ts index 6b151b307610..cd08ee09f298 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -3375,9 +3375,6 @@ ${amount} für ${merchant} – ${date}`, testDrive: { name: ({testDriveURL}: {testDriveURL?: string}) => (testDriveURL ? `Machen Sie eine [Probefahrt](${testDriveURL})` : 'Mach eine Probefahrt'), embeddedDemoIframeTitle: 'Testversion', - employeeFakeReceipt: { - description: 'Mein Probefahrtbeleg!', - }, }, messages: { onboardingEmployerOrSubmitMessage: 'Geld zurückzubekommen ist so einfach wie das Senden einer Nachricht. Gehen wir die Grundlagen durch.', @@ -9773,18 +9770,6 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc quickAction: { takeATwoMinuteTestDrive: 'Mach eine 2-minütige Probefahrt', }, - modal: { - title: 'Probier uns aus', - description: 'Machen Sie eine kurze Produkttour, um sich schnell zurechtzufinden.', - confirmText: 'Testversion starten', - helpText: 'Überspringen', - employee: { - description: - 'Verschaffe deinem Team 3 kostenlose Monate Expensify! Gib unten einfach die E-Mail-Adresse deiner oder deines Vorgesetzten ein und sende eine Testausgabe.', - email: 'Gib die E-Mail-Adresse deiner Chefin/deines Chefs ein', - error: 'Dieses Mitglied besitzt einen Arbeitsbereich, bitte gib ein neues Mitglied zum Testen ein.', - }, - }, banner: { currentlyTestDrivingExpensify: 'Du testest Expensify gerade ausprobieren', readyForTheRealThing: 'Bereit für das Richtige?', diff --git a/src/languages/en.ts b/src/languages/en.ts index 882c80fbcd9a..fad593ace422 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -3469,9 +3469,6 @@ const translations = { testDrive: { name: ({testDriveURL}: {testDriveURL?: string}) => (testDriveURL ? `Take a [test drive](${testDriveURL})` : 'Take a test drive'), embeddedDemoIframeTitle: 'Test Drive', - employeeFakeReceipt: { - description: 'My test drive receipt!', - }, }, messages: { onboardingEmployerOrSubmitMessage: 'Getting paid back is as easy as sending a message. Let’s go over the basics.', @@ -9849,17 +9846,6 @@ const translations = { quickAction: { takeATwoMinuteTestDrive: 'Take a 2-minute test drive', }, - modal: { - title: 'Take us for a test drive', - description: 'Take a quick product tour to get up to speed fast.', - confirmText: 'Start test drive', - helpText: 'Skip', - employee: { - description: 'Get your team 3 free months of Expensify! Just enter your boss’s email below and send them a test expense.', - email: "Enter your boss's email", - error: 'That member owns a workspace, please input a new member to test.', - }, - }, banner: { currentlyTestDrivingExpensify: "You're currently test driving Expensify", readyForTheRealThing: 'Ready for the real thing?', diff --git a/src/languages/es.ts b/src/languages/es.ts index 646adfc067b1..4d9590669067 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -3251,9 +3251,6 @@ ${amount} para ${merchant} - ${date}`, testDrive: { name: ({testDriveURL}) => (testDriveURL ? `Haz una [prueba](${testDriveURL})` : 'Haz una prueba'), embeddedDemoIframeTitle: 'Prueba', - employeeFakeReceipt: { - description: '¡Mi recibo de prueba!', - }, }, messages: { onboardingEmployerOrSubmitMessage: 'Que te reembolsen es tan fácil como enviar un mensaje. Repasemos lo básico.', @@ -9928,18 +9925,6 @@ ${amount} para ${merchant} - ${date}`, quickAction: { takeATwoMinuteTestDrive: 'Haz una prueba de 2 minutos', }, - modal: { - title: 'Haz una prueba con nosotros', - description: 'Haz un recorrido rápido por el producto para ponerte al día rápidamente.', - confirmText: 'Iniciar prueba', - helpText: 'Saltar', - employee: { - description: - 'Consigue 3 meses gratis de Expensify para tu equipo. Solo introduce el correo electrónico de tu jefe abajo para enviarle un gasto escaneado de prueba.', - email: 'Introduce el correo electrónico de tu jefe', - error: 'Ese miembro es propietario de un espacio de trabajo, por favor introduce un nuevo miembro para probar.', - }, - }, banner: { currentlyTestDrivingExpensify: 'Actualmente estás probando Expensify', readyForTheRealThing: '¿Listo para la versión real?', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 4228dd926b5d..6fba206d3815 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -3383,9 +3383,6 @@ ${amount} pour ${merchant} - ${date}`, testDrive: { name: ({testDriveURL}: {testDriveURL?: string}) => (testDriveURL ? `Faites un [essai](${testDriveURL})` : 'Faites un essai'), embeddedDemoIframeTitle: 'Essai gratuit', - employeeFakeReceipt: { - description: "Mon reçu d'essai routier !", - }, }, messages: { onboardingEmployerOrSubmitMessage: 'Se faire rembourser est aussi simple qu’envoyer un message. Passons en revue les bases.', @@ -9805,18 +9802,6 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e quickAction: { takeATwoMinuteTestDrive: 'Faites un essai de 2 minutes', }, - modal: { - title: 'Testez-nous en conditions réelles', - description: 'Faites une brève visite du produit pour vous familiariser rapidement.', - confirmText: 'Commencer l’essai', - helpText: 'Ignorer', - employee: { - description: - 'Offrez à votre équipe 3 mois gratuits d’Expensify ! Il suffit de saisir l’e‑mail de votre responsable ci‑dessous et de lui envoyer une dépense test.', - email: 'Saisissez l’e-mail de votre responsable', - error: 'Ce membre possède un espace de travail, veuillez saisir un nouveau membre pour effectuer le test.', - }, - }, banner: { currentlyTestDrivingExpensify: 'Vous êtes actuellement en train de tester Expensify', readyForTheRealThing: 'Prêt pour de vrai ?', diff --git a/src/languages/it.ts b/src/languages/it.ts index 6d49a476e78a..044b9df68b6e 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -3368,9 +3368,6 @@ ${amount} per ${merchant} - ${date}`, testDrive: { name: ({testDriveURL}: {testDriveURL?: string}) => (testDriveURL ? `Fai un [giro di prova](${testDriveURL})` : 'Fai un giro di prova'), embeddedDemoIframeTitle: 'Prova su strada', - employeeFakeReceipt: { - description: 'La ricevuta del mio test drive!', - }, }, messages: { onboardingEmployerOrSubmitMessage: 'Essere rimborsati è facile quanto inviare un messaggio. Vediamo le basi.', @@ -9761,18 +9758,6 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`, quickAction: { takeATwoMinuteTestDrive: 'Fai una prova di 2 minuti', }, - modal: { - title: 'Mettici alla prova', - description: 'Fai un breve tour del prodotto per metterti subito al passo.', - confirmText: 'Avvia prova di guida', - helpText: 'Salta', - employee: { - description: - 'Ottieni per il tuo team 3 mesi gratuiti di Expensify! Ti basta inserire l’email del tuo capo qui sotto e inviargli una spesa di prova.', - email: "Inserisci l'email del tuo capo", - error: 'Quella persona è titolare di uno spazio di lavoro, inserisci un nuovo membro per effettuare il test.', - }, - }, banner: { currentlyTestDrivingExpensify: 'Al momento stai provando Expensify', readyForTheRealThing: 'Pronto per la cosa reale?', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index a1d3ec6671d0..4d0e008a9db9 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -3344,9 +3344,6 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' testDrive: { name: ({testDriveURL}: {testDriveURL?: string}) => (testDriveURL ? `[テストドライブ](${testDriveURL})を試す` : '試してみる'), embeddedDemoIframeTitle: '試用ドライブ', - employeeFakeReceipt: { - description: '私の試乗の領収書!', - }, }, messages: { onboardingEmployerOrSubmitMessage: '返金を受け取るのは、メッセージを送るくらい簡単です。基本を確認しましょう。', @@ -9638,18 +9635,6 @@ ${reportName}`, quickAction: { takeATwoMinuteTestDrive: '2分間のテストドライブを試す', }, - modal: { - title: 'まずはお試しください', - description: '短時間のプロダクトツアーで、すぐに使いこなせるようになりましょう。', - confirmText: '試用を開始', - helpText: 'スキップ', - employee: { - description: - 'あなたのチームにExpensify を3か月間無料で提供しましょう!以下に上司のメールアドレスを入力して、テスト経費を送信してください。', - email: '上司のメールアドレスを入力してください', - error: 'そのメンバーはワークスペースの所有者です。テストするために新しいメンバーを入力してください。', - }, - }, banner: { currentlyTestDrivingExpensify: '現在、Expensify を試用中です', readyForTheRealThing: '本番の準備はできましたか?', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 444312f5b10b..d593c5ea66fe 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -3365,9 +3365,6 @@ ${amount} voor ${merchant} - ${date}`, testDrive: { name: ({testDriveURL}: {testDriveURL?: string}) => (testDriveURL ? `Maak een [proefrit](${testDriveURL})` : 'Maak een proefrit'), embeddedDemoIframeTitle: 'Proefrit', - employeeFakeReceipt: { - description: 'Mijn testritbonnetje!', - }, }, messages: { onboardingEmployerOrSubmitMessage: 'Terugbetaald worden is net zo eenvoudig als een bericht sturen. Laten we de basis doornemen.', @@ -9727,18 +9724,6 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`, quickAction: { takeATwoMinuteTestDrive: 'Maak een proefrit van 2 minuten', }, - modal: { - title: 'Probeer ons uit', - description: 'Volg een korte producttour om snel op de hoogte te zijn.', - confirmText: 'Proefrit starten', - helpText: 'Overslaan', - employee: { - description: - 'Geef je team 3 gratis maanden Expensify! Vul hieronder het e-mailadres van je baas in en stuur hem of haar een proefdeclaratie.', - email: 'Voer het e-mailadres van je/uw baas in', - error: 'Dat lid is eigenaar van een werkruimte, voer een nieuw lid in om te testen.', - }, - }, banner: { currentlyTestDrivingExpensify: 'Je bent Expensify momenteel aan het uitproberen', readyForTheRealThing: 'Klaar voor het echte werk?', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 3ef4e94af024..33fa19eb160a 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -3358,9 +3358,6 @@ ${amount} dla ${merchant} - ${date}`, testDrive: { name: ({testDriveURL}: {testDriveURL?: string}) => (testDriveURL ? `Zrób [jazdę próbną](${testDriveURL})` : 'Wypróbuj wersję testową'), embeddedDemoIframeTitle: 'Jazda próbna', - employeeFakeReceipt: { - description: 'Mój paragon za jazdę próbną!', - }, }, messages: { onboardingEmployerOrSubmitMessage: 'Otrzymanie zwrotu jest tak proste jak wysłanie wiadomości. Omówmy podstawy.', @@ -9712,18 +9709,6 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, quickAction: { takeATwoMinuteTestDrive: 'Wypróbuj w 2 minuty', }, - modal: { - title: 'Wypróbuj nas w praktyce', - description: 'Zrób krótkie wprowadzenie do produktu, aby szybko się wdrożyć.', - confirmText: 'Rozpocznij jazdę testową', - helpText: 'Pomiń', - employee: { - description: - 'Zapewnij swojemu zespołowi 3 darmowe miesiące Expensify! Wpisz poniżej adres e-mail swojego szefa i wyślij mu przykładowy wydatek.', - email: 'Wpisz adres e-mail swojego szefa', - error: 'Ten członek jest właścicielem przestrzeni roboczej, wprowadź nowego członka do przetestowania.', - }, - }, banner: { currentlyTestDrivingExpensify: 'Aktualnie testujesz Expensify', readyForTheRealThing: 'Gotowy na prawdziwe wyzwanie?', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 81ac25ce8f49..bbc335ec4d3b 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -3355,9 +3355,6 @@ ${amount} para ${merchant} - ${date}`, testDrive: { name: ({testDriveURL}: {testDriveURL?: string}) => (testDriveURL ? `Faça um [test drive](${testDriveURL})` : 'Faça um test drive'), embeddedDemoIframeTitle: 'Test Drive', - employeeFakeReceipt: { - description: 'Meu recibo de test drive!', - }, }, messages: { onboardingEmployerOrSubmitMessage: 'Ser reembolsado é tão fácil quanto enviar uma mensagem. Vamos revisar o básico.', @@ -9716,18 +9713,6 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`, quickAction: { takeATwoMinuteTestDrive: 'Faça um test drive de 2 minutos', }, - modal: { - title: 'Faça um test drive conosco', - description: 'Faça um rápido tour pelo produto para se atualizar rapidamente.', - confirmText: 'Iniciar test drive', - helpText: 'Pular', - employee: { - description: - 'Garanta para sua equipe 3 meses grátis de Expensify! Basta inserir o e-mail da sua chefia abaixo e enviar uma despesa de teste.', - email: 'Insira o e-mail do seu chefe', - error: 'Essa pessoa já é dona de um espaço de trabalho, insira uma nova pessoa para testar.', - }, - }, banner: { currentlyTestDrivingExpensify: 'Você está testando o Expensify no momento', readyForTheRealThing: 'Pronto para o que vale de verdade?', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index d7f6e1eecc2b..e80892c9ed77 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -3271,9 +3271,6 @@ ${amount},商户:${merchant} - 日期:${date}`, testDrive: { name: ({testDriveURL}: {testDriveURL?: string}) => (testDriveURL ? `进行[试用体验](${testDriveURL})` : '试用体验'), embeddedDemoIframeTitle: '试用', - employeeFakeReceipt: { - description: '我的试驾收据!', - }, }, messages: { onboardingEmployerOrSubmitMessage: '报销就像发消息一样简单。让我们先了解一下基础内容。', @@ -9455,17 +9452,6 @@ ${reportName}`, quickAction: { takeATwoMinuteTestDrive: '体验 2 分钟试用', }, - modal: { - title: '试用一下我们的产品', - description: '快速浏览产品,立即上手使用。', - confirmText: '开始试用', - helpText: '跳过', - employee: { - description: '为你的团队获取3 个月免费的 Expensify!只需在下面输入你老板的邮箱并发送一笔测试报销。', - email: '输入你老板的邮箱', - error: '该成员拥有一个工作区,请输入一位新成员进行测试。', - }, - }, banner: { currentlyTestDrivingExpensify: '您目前正在试用 Expensify', readyForTheRealThing: '准备好来点真正的了吗?', diff --git a/src/libs/API/parameters/VerifyTestDriveRecipientParams.ts b/src/libs/API/parameters/VerifyTestDriveRecipientParams.ts deleted file mode 100644 index 905179406a15..000000000000 --- a/src/libs/API/parameters/VerifyTestDriveRecipientParams.ts +++ /dev/null @@ -1,5 +0,0 @@ -type VerifyTestDriveRecipientParams = { - email: string; -}; - -export default VerifyTestDriveRecipientParams; diff --git a/src/libs/API/parameters/index.ts b/src/libs/API/parameters/index.ts index cc5a170a55bf..f769632dfe53 100644 --- a/src/libs/API/parameters/index.ts +++ b/src/libs/API/parameters/index.ts @@ -499,7 +499,6 @@ export type {default as SetVacationDelegateParams} from './SetVacationDelegatePa export type {default as ExportMultiLevelTagsSpreadSheetParams} from './ExportMultiLevelTagsSpreadSheetParams'; export type {default as ReopenReportParams} from './ReopenReportParams'; export type {default as OpenUnreportedExpensesPageParams} from './OpenUnreportedExpensesPageParams'; -export type {default as VerifyTestDriveRecipientParams} from './VerifyTestDriveRecipientParams'; export type {default as ExportSearchWithTemplateParams} from './ExportSearchWithTemplateParams'; export type {default as QueueExportSearchItemsToCSVParams} from './QueueExportSearchItemsToCSVParams'; export type {default as QueueExportSearchWithTemplateParams} from './QueueExportSearchWithTemplateParams'; diff --git a/src/libs/API/types.ts b/src/libs/API/types.ts index a2953e06b524..0ac47d89085b 100644 --- a/src/libs/API/types.ts +++ b/src/libs/API/types.ts @@ -1517,7 +1517,6 @@ const SIDE_EFFECT_REQUEST_COMMANDS = { LOG_OUT: 'LogOut', CREATE_DIGITAL_WALLET: 'CreateDigitalWallet', - VERIFY_TEST_DRIVE_RECIPIENT: 'VerifyTestDriveRecipient', LOCK_ACCOUNT: 'LockAccount', SET_VACATION_DELEGATE: 'SetVacationDelegate', CALCULATE_BILL_NEW_DOT: 'CalculateBillNewDot', @@ -1562,7 +1561,6 @@ type SideEffectRequestCommandParameters = { [SIDE_EFFECT_REQUEST_COMMANDS.ADD_WORK_EMAIL]: Parameters.AddWorkEmailParams; [SIDE_EFFECT_REQUEST_COMMANDS.LOG_OUT]: Parameters.LogOutParams; [SIDE_EFFECT_REQUEST_COMMANDS.CREATE_DIGITAL_WALLET]: Parameters.CreateDigitalWalletParams; - [SIDE_EFFECT_REQUEST_COMMANDS.VERIFY_TEST_DRIVE_RECIPIENT]: Parameters.VerifyTestDriveRecipientParams; [SIDE_EFFECT_REQUEST_COMMANDS.LOCK_ACCOUNT]: Parameters.LockAccountParams; [SIDE_EFFECT_REQUEST_COMMANDS.SET_VACATION_DELEGATE]: Parameters.SetVacationDelegateParams; [SIDE_EFFECT_REQUEST_COMMANDS.CALCULATE_BILL_NEW_DOT]: null; diff --git a/src/libs/Errors/AccountExistsError.ts b/src/libs/Errors/AccountExistsError.ts deleted file mode 100644 index 4bf3ca199b7f..000000000000 --- a/src/libs/Errors/AccountExistsError.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type {TranslationPaths} from '@src/languages/types'; - -class AccountExistsError extends Error { - translationKey: TranslationPaths; - - constructor(accountExists: boolean | undefined) { - super(); - // If accountExists is undefined, it means we couldn't determine the account status due to an unstable internet connection. - this.translationKey = accountExists === undefined ? 'common.unstableInternetConnection' : 'testDrive.modal.employee.error'; - } -} - -export default AccountExistsError; diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index d2b0c1bf7346..66a88a54d9f8 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -60,7 +60,6 @@ import FeatureTrainingModalNavigator from './Navigators/FeatureTrainingModalNavi import MigratedUserWelcomeModalNavigator from './Navigators/MigratedUserWelcomeModalNavigator'; import MultifactorAuthenticationModalNavigator from './Navigators/MultifactorAuthenticationModalNavigator'; import OnboardingModalNavigator from './Navigators/OnboardingModalNavigator'; -import TestDriveModalNavigator from './Navigators/TestDriveModalNavigator'; import TestToolsModalNavigator from './Navigators/TestToolsModalNavigator'; import TestDriveDemoNavigator from './TestDriveDemoNavigator'; import ThreeDSAuthHandler from './ThreeDSAuthHandler'; @@ -306,11 +305,6 @@ function AuthScreens() { options={rootNavigatorScreenOptions.centeredModalNavigator} component={MigratedUserWelcomeModalNavigator} /> - (); - -function TestDriveModalNavigator() { - const {shouldUseNarrowLayout} = useResponsiveLayout(); - return ( - - - - - - - - ); -} - -export default TestDriveModalNavigator; diff --git a/src/libs/Navigation/AppNavigator/createRootStackNavigator/GetStateForActionHandlers.ts b/src/libs/Navigation/AppNavigator/createRootStackNavigator/GetStateForActionHandlers.ts index 5662a7220080..b0604b6cf80f 100644 --- a/src/libs/Navigation/AppNavigator/createRootStackNavigator/GetStateForActionHandlers.ts +++ b/src/libs/Navigation/AppNavigator/createRootStackNavigator/GetStateForActionHandlers.ts @@ -36,7 +36,6 @@ const MODAL_ROUTES_TO_DISMISS = new Set([ NAVIGATORS.ONBOARDING_MODAL_NAVIGATOR, NAVIGATORS.FEATURE_TRAINING_MODAL_NAVIGATOR, NAVIGATORS.SHARE_MODAL_NAVIGATOR, - NAVIGATORS.TEST_DRIVE_MODAL_NAVIGATOR, NAVIGATORS.TEST_TOOLS_MODAL_NAVIGATOR, SCREENS.NOT_FOUND, SCREENS.REPORT_ATTACHMENTS, diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index b5aa0a4456c6..500a31e6bd20 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -53,15 +53,6 @@ const config: LinkingOptions['config'] = { }, }, - [NAVIGATORS.TEST_DRIVE_MODAL_NAVIGATOR]: { - screens: { - [SCREENS.TEST_DRIVE_MODAL.ROOT]: { - path: ROUTES.TEST_DRIVE_MODAL_ROOT.route, - exact: true, - }, - }, - }, - [NAVIGATORS.TEST_DRIVE_DEMO_NAVIGATOR]: { screens: { [SCREENS.TEST_DRIVE_DEMO.ROOT]: { diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 70c9c2f4bea4..33e4b68febe6 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -2962,12 +2962,6 @@ type MigratedUserModalNavigatorParamList = { [SCREENS.MIGRATED_USER_WELCOME_MODAL.ROOT]: undefined; }; -type TestDriveModalNavigatorParamList = { - [SCREENS.TEST_DRIVE_MODAL.ROOT]: { - bossEmail?: string; - }; -}; - type TestDriveDemoNavigatorParamList = { [SCREENS.TEST_DRIVE_DEMO.ROOT]: undefined; }; @@ -3136,7 +3130,6 @@ type AuthScreensParamList = SharedScreensParamList & [NAVIGATORS.ONBOARDING_MODAL_NAVIGATOR]: NavigatorScreenParams; [NAVIGATORS.FEATURE_TRAINING_MODAL_NAVIGATOR]: NavigatorScreenParams; [NAVIGATORS.MIGRATED_USER_MODAL_NAVIGATOR]: NavigatorScreenParams; - [NAVIGATORS.TEST_DRIVE_MODAL_NAVIGATOR]: NavigatorScreenParams; [NAVIGATORS.TEST_DRIVE_DEMO_NAVIGATOR]: NavigatorScreenParams; [SCREENS.CONNECTION_COMPLETE]: undefined; [NAVIGATORS.SHARE_MODAL_NAVIGATOR]: NavigatorScreenParams; @@ -3422,7 +3415,6 @@ export type { PolicyCopySettingsNavigatorParamList, TwoFactorAuthNavigatorParamList, ScheduleCallParamList, - TestDriveModalNavigatorParamList, WorkspaceScreenName, TestDriveDemoNavigatorParamList, SplitExpenseParamList, diff --git a/src/libs/actions/Onboarding.ts b/src/libs/actions/Onboarding.ts index 2fdfc8117474..926a18c5bf54 100644 --- a/src/libs/actions/Onboarding.ts +++ b/src/libs/actions/Onboarding.ts @@ -1,7 +1,4 @@ import Onyx from 'react-native-onyx'; -import * as API from '@libs/API'; -import {SIDE_EFFECT_REQUEST_COMMANDS} from '@libs/API/types'; -import AccountExistsError from '@libs/Errors/AccountExistsError'; import ONYXKEYS from '@src/ONYXKEYS'; /** @@ -18,17 +15,4 @@ function setPersonalDetails(firstName: string, lastName: string) { Onyx.merge(ONYXKEYS.FORMS.ONBOARDING_PERSONAL_DETAILS_FORM, {firstName, lastName}); } -function verifyTestDriveRecipient(email: string) { - // eslint-disable-next-line rulesdir/no-api-side-effects-method - return API.makeRequestWithSideEffects(SIDE_EFFECT_REQUEST_COMMANDS.VERIFY_TEST_DRIVE_RECIPIENT, {email}).then((response) => { - // If accountExists is undefined, it means we couldn't determine the account status due to an unstable internet connection. - if (response?.accountExists === false) { - // We can invite this user since they do not have an account yet - return; - } - - throw new AccountExistsError(response?.accountExists); - }); -} - -export {clearPersonalDetailsDraft, setPersonalDetails, verifyTestDriveRecipient}; +export {clearPersonalDetailsDraft, setPersonalDetails}; diff --git a/src/libs/actions/Welcome/OnboardingFlow.ts b/src/libs/actions/Welcome/OnboardingFlow.ts index 06950b078d27..ca56105fec7c 100644 --- a/src/libs/actions/Welcome/OnboardingFlow.ts +++ b/src/libs/actions/Welcome/OnboardingFlow.ts @@ -183,12 +183,6 @@ const getOnboardingMessages = (locale?: Locale) => { ONBOARDING_TASK_NAME: translate(resolvedLocale, 'onboarding.testDrive.name', {}), EMBEDDED_DEMO_WHITELIST: ['http://', 'https://', 'about:'] as string[], EMBEDDED_DEMO_IFRAME_TITLE: translate(resolvedLocale, 'onboarding.testDrive.embeddedDemoIframeTitle'), - EMPLOYEE_FAKE_RECEIPT: { - AMOUNT: 2000, - CURRENCY: 'USD', - DESCRIPTION: translate(resolvedLocale, 'onboarding.testDrive.employeeFakeReceipt.description'), - MERCHANT: "Tommy's Tires", - }, }; const addExpenseApprovalsTask: OnboardingTask = { type: CONST.ONBOARDING_TASK_TYPE.ADD_EXPENSE_APPROVALS, diff --git a/src/libs/actions/Welcome/index.ts b/src/libs/actions/Welcome/index.ts index 17514ad70d94..ab8bcc1cbf45 100644 --- a/src/libs/actions/Welcome/index.ts +++ b/src/libs/actions/Welcome/index.ts @@ -94,10 +94,6 @@ function setOnboardingMergeAccountStepValue(value: boolean, skipped = false) { Onyx.merge(ONYXKEYS.NVP_ONBOARDING, {isMergeAccountStepCompleted: value, isMergeAccountStepSkipped: skipped}); } -function setOnboardingTestDriveModalDismissed() { - Onyx.merge(ONYXKEYS.NVP_ONBOARDING, {testDriveModalDismissed: true}); -} - function completeHybridAppOnboarding() { if (!CONFIG.IS_HYBRID_APP) { return; @@ -223,7 +219,6 @@ export { updateOnboardingValuesAndNavigation, setOnboardingUserReportedIntegration, setOnboardingPersonalTrackGoal, - setOnboardingTestDriveModalDismissed, addWorkEmailFormError, clearWorkEmailFormErrors, }; diff --git a/src/libs/actions/setTestReceipt/getFile/index.ios.ts b/src/libs/actions/setTestReceipt/getFile/index.ios.ts deleted file mode 100644 index 998109baaeb5..000000000000 --- a/src/libs/actions/setTestReceipt/getFile/index.ios.ts +++ /dev/null @@ -1,12 +0,0 @@ -import ReactNativeBlobUtil from 'react-native-blob-util'; -import type GetFile from './types'; - -const getFile: GetFile = (source, path, assetExtension) => { - return ReactNativeBlobUtil.config({ - fileCache: true, - appendExt: assetExtension, - path, - }).fetch('GET', source); -}; - -export default getFile; diff --git a/src/libs/actions/setTestReceipt/getFile/index.ts b/src/libs/actions/setTestReceipt/getFile/index.ts deleted file mode 100644 index 9514a69969e7..000000000000 --- a/src/libs/actions/setTestReceipt/getFile/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import ReactNativeBlobUtil from 'react-native-blob-util'; -import RNFS from 'react-native-fs'; -import CONFIG from '@src/CONFIG'; -import CONST from '@src/CONST'; -import type GetFile from './types'; - -const getFile: GetFile = (source, path, assetExtension) => { - if (CONFIG.ENVIRONMENT === CONST.ENVIRONMENT.DEV) { - return ReactNativeBlobUtil.config({ - fileCache: true, - appendExt: assetExtension, - path, - }).fetch('GET', source); - } - - return RNFS.copyFileRes(`${source}.${assetExtension}`, path); -}; - -export default getFile; diff --git a/src/libs/actions/setTestReceipt/getFile/types.ts b/src/libs/actions/setTestReceipt/getFile/types.ts deleted file mode 100644 index 3d1300e248c5..000000000000 --- a/src/libs/actions/setTestReceipt/getFile/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type {FetchBlobResponse} from 'react-native-blob-util'; -import type {AssetExtension} from '@userActions/setTestReceipt/types'; - -type GetFile = (source: string, path: string, assetExtension: AssetExtension) => Promise; - -export default GetFile; diff --git a/src/libs/actions/setTestReceipt/index.native.ts b/src/libs/actions/setTestReceipt/index.native.ts deleted file mode 100644 index f1d3ed701b54..000000000000 --- a/src/libs/actions/setTestReceipt/index.native.ts +++ /dev/null @@ -1,37 +0,0 @@ -import {Image} from 'react-native'; -import ReactNativeBlobUtil from 'react-native-blob-util'; -import Log from '@libs/Log'; -import CONST from '@src/CONST'; -import type {FileObject} from '@src/types/utils/Attachment'; -import getFile from './getFile'; -import type {SetTestReceipt} from './types'; - -const setTestReceipt: SetTestReceipt = (asset, assetExtension, onFileRead, onFileError) => { - const filename = `${CONST.TEST_RECEIPT.FILENAME}_${Date.now()}.${assetExtension}`; - const path = `${ReactNativeBlobUtil.fs.dirs.CacheDir}/${filename}`; - const source = Image.resolveAssetSource(asset).uri; - - getFile(source, path, assetExtension) - .then(() => { - const file: FileObject = { - uri: `file://${path}`, - name: filename, - type: CONST.TEST_RECEIPT.FILE_TYPE, - size: 0, - }; - - if (!file.uri) { - Log.warn('Error reading test receipt'); - return; - } - - onFileRead(file.uri, file, filename); - }) - .catch((error) => { - Log.warn('Error reading test receipt:', {message: error}); - - onFileError?.(error); - }); -}; - -export default setTestReceipt; diff --git a/src/libs/actions/setTestReceipt/index.ts b/src/libs/actions/setTestReceipt/index.ts deleted file mode 100644 index 790e3c099f0f..000000000000 --- a/src/libs/actions/setTestReceipt/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {readFileAsync} from '@libs/fileDownload/FileUtils'; -import Log from '@libs/Log'; -import CONST from '@src/CONST'; -import type {SetTestReceipt} from './types'; - -const setTestReceipt: SetTestReceipt = (asset, assetExtension, onFileRead, onFileError) => { - const filename = `${CONST.TEST_RECEIPT.FILENAME}_${Date.now()}.${assetExtension}`; - readFileAsync( - asset as string, - filename, - (file) => { - const source = URL.createObjectURL(file); - - onFileRead(source, file, filename); - }, - (error) => { - Log.warn('Error reading test receipt:', {message: error}); - - onFileError?.(error); - }, - CONST.TEST_RECEIPT.FILE_TYPE, - ); -}; - -export default setTestReceipt; diff --git a/src/libs/actions/setTestReceipt/types.ts b/src/libs/actions/setTestReceipt/types.ts deleted file mode 100644 index 1e705b2b9c1c..000000000000 --- a/src/libs/actions/setTestReceipt/types.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type {ImageSourcePropType} from 'react-native'; -import type {FileObject} from '@src/types/utils/Attachment'; - -type OnFileRead = (source: string, file: FileObject, filename: string) => void; - -type OnFileError = (error: unknown) => void; - -type AssetExtension = 'jpg' | 'png'; - -type SetTestReceipt = (asset: ImageSourcePropType, assetExtension: AssetExtension, onFileRead: OnFileRead, onFileError?: OnFileError) => void; - -export type {AssetExtension, SetTestReceipt}; diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index 7be52d6d3536..50d03f2ff167 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -593,12 +593,6 @@ function IOURequestStepConfirmation({ return; } - // If the user came from Test Drive modal, we need to take him back there - if (transaction?.receipt?.isTestDriveReceipt && (transaction.participants?.length ?? 0) > 0) { - Navigation.goBack(ROUTES.TEST_DRIVE_MODAL_ROOT.getRoute(transaction.participants?.at(0)?.login)); - return; - } - // This has selected the participants from the beginning and the participant field shouldn't be editable. navigateToStartMoneyRequestStep(requestType, iouType, initialTransactionID, reportID, action, backToReport); }, [ @@ -607,8 +601,6 @@ function IOURequestStepConfirmation({ isCreatingTrackExpense, transaction?.isFromGlobalCreate, transaction?.receipt?.isTestReceipt, - transaction?.receipt?.isTestDriveReceipt, - transaction?.participants, transaction?.participantsAutoAssigned, transaction?.reportID, requestType, diff --git a/src/styles/index.ts b/src/styles/index.ts index 9d3cd9822b43..1f25b2b6032c 100644 --- a/src/styles/index.ts +++ b/src/styles/index.ts @@ -6614,13 +6614,6 @@ const dynamicStyles = (theme: ThemeColors) => return {maxHeight: Math.min(CONST.POPOVER_DROPDOWN_MAX_HEIGHT, windowHeight * heightRatio)}; }, - testDriveModalContainer: (shouldUseNarrowLayout: boolean) => ({ - // On small/medium screens, we need to remove the top padding - paddingTop: 0, - // On larger screens, we need to prevent the modal from becoming too big - maxWidth: shouldUseNarrowLayout ? undefined : 500, - }), - getMoneyRequestViewImage: (showBorderless: boolean) => ({ ...spacing.mh5, overflow: 'hidden', diff --git a/src/types/onyx/Onboarding.ts b/src/types/onyx/Onboarding.ts index af4dfcefaf3e..5faed3345f57 100644 --- a/src/types/onyx/Onboarding.ts +++ b/src/types/onyx/Onboarding.ts @@ -32,9 +32,6 @@ type Onboarding = { /** A Boolean that tells whether the onboarding flow is loading */ isLoading?: boolean; - - /** A Boolean that tells whether the test drive modal has been dismissed */ - testDriveModalDismissed?: boolean; }; export default Onboarding; diff --git a/tests/actions/IOUTest/TrackExpenseTest.ts b/tests/actions/IOUTest/TrackExpenseTest.ts index 35d07099a589..acd0644585f0 100644 --- a/tests/actions/IOUTest/TrackExpenseTest.ts +++ b/tests/actions/IOUTest/TrackExpenseTest.ts @@ -132,7 +132,9 @@ describe('actions/IOU/TrackExpense', () => { return Onyx.clear().then(waitForBatchedUpdates); }); - afterEach(() => { + afterEach(async () => { + await mockFetch?.resume?.(); + await waitForBatchedUpdates(); jest.clearAllMocks(); }); @@ -141,6 +143,10 @@ describe('actions/IOU/TrackExpense', () => { const selfDMReport: Report = { ...createRandomReport(1, CONST.REPORT.CHAT_TYPE.SELF_DM), type: CONST.REPORT.TYPE.CHAT, + // createRandomReport randomizes isPinned/isOwnPolicyExpenseChat; either being true would force a hidden + // report to display in the LHN (shouldOverrideHidden), so pin them down to keep this test deterministic. + isPinned: false, + isOwnPolicyExpenseChat: false, participants: { [RORY_ACCOUNT_ID]: {notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN}, }, diff --git a/tests/actions/ReportTest.ts b/tests/actions/ReportTest.ts index 856226840a2e..03325c7b2881 100644 --- a/tests/actions/ReportTest.ts +++ b/tests/actions/ReportTest.ts @@ -4587,46 +4587,6 @@ describe('actions/Report', () => { }); }); - it('should not overwrite testDriveModalDismissed when it is already true', async () => { - const TEST_USER_ACCOUNT_ID = 1; - const TEST_USER_LOGIN = 'test@test.com'; - - await Onyx.set(ONYXKEYS.SESSION, {email: TEST_USER_LOGIN, accountID: TEST_USER_ACCOUNT_ID}); - await Onyx.set(ONYXKEYS.NVP_ONBOARDING, {testDriveModalDismissed: true}); - await waitForBatchedUpdates(); - - const adminsChatReportID = '7957055873634067'; - const onboardingPolicyID = 'A70D00C752416807'; - const engagementChoice = CONST.INTRO_CHOICES.MANAGE_TEAM; - const {onboardingMessages} = getOnboardingMessages(); - - Report.completeOnboarding({ - engagementChoice, - onboardingMessage: onboardingMessages[engagementChoice], - adminsChatReportID, - onboardingPolicyID, - companySize: CONST.ONBOARDING_COMPANY_SIZE.MICRO, - userReportedIntegration: null, - introSelected: {choice: engagementChoice}, - isSelfTourViewed: false, - }); - - await waitForBatchedUpdates(); - - const onboarding = await new Promise>((resolve) => { - const connection = Onyx.connect({ - key: ONYXKEYS.NVP_ONBOARDING, - callback: (data) => { - Onyx.disconnect(connection); - resolve(data); - }, - }); - }); - - // testDriveModalDismissed should remain true and not be overwritten to false - expect(onboarding?.testDriveModalDismissed).toBe(true); - }); - describe('openReport with introSelected', () => { it('should call OpenReport API with introSelected parameter', async () => { global.fetch = TestHelper.getGlobalFetchMock();