From f257382a9bdc12bca5e39596f9172e062d38a984 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 11 Aug 2025 08:58:16 -1000 Subject: [PATCH 1/4] Add logging for FeatureTrainingModal and MigratedUserWelcomeModal --- src/components/FeatureTrainingModal.tsx | 29 +++++++++++++++++++-- src/components/MigratedUserWelcomeModal.tsx | 7 +++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/components/FeatureTrainingModal.tsx b/src/components/FeatureTrainingModal.tsx index 2fe96f351fe6..78de6d08a7da 100644 --- a/src/components/FeatureTrainingModal.tsx +++ b/src/components/FeatureTrainingModal.tsx @@ -14,6 +14,7 @@ import useSafeAreaInsets from '@hooks/useSafeAreaInsets'; import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; import {parseFSAttributes} from '@libs/Fullstory'; +import Log from '@libs/Log'; import Navigation from '@libs/Navigation/Navigation'; import variables from '@styles/variables'; import {dismissTrackTrainingModal} from '@userActions/User'; @@ -336,23 +337,47 @@ function FeatureTrainingModal({ const toggleWillShowAgain = useCallback(() => setWillShowAgain((prevWillShowAgain) => !prevWillShowAgain), []); const closeModal = useCallback(() => { + Log.info(`[FeatureTrainingModal] closeModal called - willShowAgain: ${willShowAgain}, shouldGoBack: ${shouldGoBack}, hasOnClose: ${!!onClose}`); + if (!willShowAgain) { + Log.info('[FeatureTrainingModal] Dismissing track training modal'); dismissTrackTrainingModal(); } + + Log.info('[FeatureTrainingModal] Setting modal invisible'); setIsModalVisible(false); + InteractionManager.runAfterInteractions(() => { + Log.info(`[FeatureTrainingModal] Running after interactions - shouldGoBack: ${shouldGoBack}, hasOnClose: ${!!onClose}`); + if (shouldGoBack) { + Log.info('[FeatureTrainingModal] Navigating back'); Navigation.goBack(); } - onClose?.(); + + if (onClose) { + Log.info('[FeatureTrainingModal] Calling onClose callback'); + onClose(); + } else { + Log.info('[FeatureTrainingModal] No onClose callback provided'); + } }); }, [onClose, shouldGoBack, willShowAgain]); const closeAndConfirmModal = useCallback(() => { + Log.info(`[FeatureTrainingModal] Button pressed - shouldCloseOnConfirm: ${shouldCloseOnConfirm}, hasOnConfirm: ${!!onConfirm}, willShowAgain: ${willShowAgain}`); + if (shouldCloseOnConfirm) { + Log.info('[FeatureTrainingModal] Calling closeModal'); closeModal(); } - onConfirm?.(willShowAgain); + + if (onConfirm) { + Log.info('[FeatureTrainingModal] Calling onConfirm callback'); + onConfirm(willShowAgain); + } else { + Log.info('[FeatureTrainingModal] No onConfirm callback provided'); + } }, [shouldCloseOnConfirm, onConfirm, closeModal, willShowAgain]); /** diff --git a/src/components/MigratedUserWelcomeModal.tsx b/src/components/MigratedUserWelcomeModal.tsx index 4a5d537c2894..403f58563d0e 100644 --- a/src/components/MigratedUserWelcomeModal.tsx +++ b/src/components/MigratedUserWelcomeModal.tsx @@ -9,6 +9,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import {dismissProductTraining} from '@libs/actions/Welcome'; import convertToLTR from '@libs/convertToLTR'; import {parseFSAttributes} from '@libs/Fullstory'; +import Log from '@libs/Log'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackRouteProp} from '@libs/Navigation/PlatformStackNavigation/types'; import type {WelcomeVideoModalNavigatorParamList} from '@libs/Navigation/types'; @@ -63,9 +64,14 @@ function OnboardingWelcomeVideo() { } const {hasBeenAddedToNudgeMigration} = tryNewDot ?? {}; + Log.info(`[MigratedUserWelcomeModal] useEffect triggered - hasBeenAddedToNudgeMigration: ${hasBeenAddedToNudgeMigration}, hasDismissedTraining: ${!!dismissedProductTraining?.migratedUserWelcomeModal}, shouldOpenSearch: ${shouldOpenSearch}, currentModalDisabled: ${isModalDisabled}`); + if (!!(hasBeenAddedToNudgeMigration && !dismissedProductTraining?.migratedUserWelcomeModal) || !shouldOpenSearch) { + Log.info('[MigratedUserWelcomeModal] Conditions not met, keeping modal disabled'); return; } + + Log.info('[MigratedUserWelcomeModal] Enabling modal and navigating to search'); setIsModalDisabled(false); const defaultCannedQuery = buildCannedSearchQuery(); Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: defaultCannedQuery})); @@ -88,6 +94,7 @@ function OnboardingWelcomeVideo() { confirmText={translate('migratedUserWelcomeModal.confirmText')} animation={LottieAnimations.WorkspacePlanet} onClose={() => { + Log.info('[MigratedUserWelcomeModal] onClose called, dismissing product training'); dismissProductTraining(CONST.MIGRATED_USER_WELCOME_MODAL); }} animationStyle={[styles.emptyWorkspaceIllustrationStyle]} From 8956f7e52afd0624c460e3e89ff60e7c39a8815a Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 11 Aug 2025 09:01:59 -1000 Subject: [PATCH 2/4] Use hmmm() --- src/components/FeatureTrainingModal.tsx | 22 ++++++++++----------- src/components/MigratedUserWelcomeModal.tsx | 8 ++++---- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/components/FeatureTrainingModal.tsx b/src/components/FeatureTrainingModal.tsx index 78de6d08a7da..378248ca20b3 100644 --- a/src/components/FeatureTrainingModal.tsx +++ b/src/components/FeatureTrainingModal.tsx @@ -337,46 +337,46 @@ function FeatureTrainingModal({ const toggleWillShowAgain = useCallback(() => setWillShowAgain((prevWillShowAgain) => !prevWillShowAgain), []); const closeModal = useCallback(() => { - Log.info(`[FeatureTrainingModal] closeModal called - willShowAgain: ${willShowAgain}, shouldGoBack: ${shouldGoBack}, hasOnClose: ${!!onClose}`); + Log.hmmm(`[FeatureTrainingModal] closeModal called - willShowAgain: ${willShowAgain}, shouldGoBack: ${shouldGoBack}, hasOnClose: ${!!onClose}`); if (!willShowAgain) { - Log.info('[FeatureTrainingModal] Dismissing track training modal'); + Log.hmmm('[FeatureTrainingModal] Dismissing track training modal'); dismissTrackTrainingModal(); } - Log.info('[FeatureTrainingModal] Setting modal invisible'); + Log.hmmm('[FeatureTrainingModal] Setting modal invisible'); setIsModalVisible(false); InteractionManager.runAfterInteractions(() => { - Log.info(`[FeatureTrainingModal] Running after interactions - shouldGoBack: ${shouldGoBack}, hasOnClose: ${!!onClose}`); + Log.hmmm(`[FeatureTrainingModal] Running after interactions - shouldGoBack: ${shouldGoBack}, hasOnClose: ${!!onClose}`); if (shouldGoBack) { - Log.info('[FeatureTrainingModal] Navigating back'); + Log.hmmm('[FeatureTrainingModal] Navigating back'); Navigation.goBack(); } if (onClose) { - Log.info('[FeatureTrainingModal] Calling onClose callback'); + Log.hmmm('[FeatureTrainingModal] Calling onClose callback'); onClose(); } else { - Log.info('[FeatureTrainingModal] No onClose callback provided'); + Log.hmmm('[FeatureTrainingModal] No onClose callback provided'); } }); }, [onClose, shouldGoBack, willShowAgain]); const closeAndConfirmModal = useCallback(() => { - Log.info(`[FeatureTrainingModal] Button pressed - shouldCloseOnConfirm: ${shouldCloseOnConfirm}, hasOnConfirm: ${!!onConfirm}, willShowAgain: ${willShowAgain}`); + Log.hmmm(`[FeatureTrainingModal] Button pressed - shouldCloseOnConfirm: ${shouldCloseOnConfirm}, hasOnConfirm: ${!!onConfirm}, willShowAgain: ${willShowAgain}`); if (shouldCloseOnConfirm) { - Log.info('[FeatureTrainingModal] Calling closeModal'); + Log.hmmm('[FeatureTrainingModal] Calling closeModal'); closeModal(); } if (onConfirm) { - Log.info('[FeatureTrainingModal] Calling onConfirm callback'); + Log.hmmm('[FeatureTrainingModal] Calling onConfirm callback'); onConfirm(willShowAgain); } else { - Log.info('[FeatureTrainingModal] No onConfirm callback provided'); + Log.hmmm('[FeatureTrainingModal] No onConfirm callback provided'); } }, [shouldCloseOnConfirm, onConfirm, closeModal, willShowAgain]); diff --git a/src/components/MigratedUserWelcomeModal.tsx b/src/components/MigratedUserWelcomeModal.tsx index 403f58563d0e..93f428c3951c 100644 --- a/src/components/MigratedUserWelcomeModal.tsx +++ b/src/components/MigratedUserWelcomeModal.tsx @@ -64,14 +64,14 @@ function OnboardingWelcomeVideo() { } const {hasBeenAddedToNudgeMigration} = tryNewDot ?? {}; - Log.info(`[MigratedUserWelcomeModal] useEffect triggered - hasBeenAddedToNudgeMigration: ${hasBeenAddedToNudgeMigration}, hasDismissedTraining: ${!!dismissedProductTraining?.migratedUserWelcomeModal}, shouldOpenSearch: ${shouldOpenSearch}, currentModalDisabled: ${isModalDisabled}`); + Log.hmmm(`[MigratedUserWelcomeModal] useEffect triggered - hasBeenAddedToNudgeMigration: ${hasBeenAddedToNudgeMigration}, hasDismissedTraining: ${!!dismissedProductTraining?.migratedUserWelcomeModal}, shouldOpenSearch: ${shouldOpenSearch}`); if (!!(hasBeenAddedToNudgeMigration && !dismissedProductTraining?.migratedUserWelcomeModal) || !shouldOpenSearch) { - Log.info('[MigratedUserWelcomeModal] Conditions not met, keeping modal disabled'); + Log.hmmm('[MigratedUserWelcomeModal] Conditions not met, keeping modal disabled'); return; } - Log.info('[MigratedUserWelcomeModal] Enabling modal and navigating to search'); + Log.hmmm('[MigratedUserWelcomeModal] Enabling modal and navigating to search'); setIsModalDisabled(false); const defaultCannedQuery = buildCannedSearchQuery(); Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: defaultCannedQuery})); @@ -94,7 +94,7 @@ function OnboardingWelcomeVideo() { confirmText={translate('migratedUserWelcomeModal.confirmText')} animation={LottieAnimations.WorkspacePlanet} onClose={() => { - Log.info('[MigratedUserWelcomeModal] onClose called, dismissing product training'); + Log.hmmm('[MigratedUserWelcomeModal] onClose called, dismissing product training'); dismissProductTraining(CONST.MIGRATED_USER_WELCOME_MODAL); }} animationStyle={[styles.emptyWorkspaceIllustrationStyle]} From 8d17d806f503d940396abd26c7a84ac4dcc65ffc Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 11 Aug 2025 09:06:44 -1000 Subject: [PATCH 3/4] Prettier --- src/components/MigratedUserWelcomeModal.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/MigratedUserWelcomeModal.tsx b/src/components/MigratedUserWelcomeModal.tsx index 93f428c3951c..7c6127913199 100644 --- a/src/components/MigratedUserWelcomeModal.tsx +++ b/src/components/MigratedUserWelcomeModal.tsx @@ -64,7 +64,9 @@ function OnboardingWelcomeVideo() { } const {hasBeenAddedToNudgeMigration} = tryNewDot ?? {}; - Log.hmmm(`[MigratedUserWelcomeModal] useEffect triggered - hasBeenAddedToNudgeMigration: ${hasBeenAddedToNudgeMigration}, hasDismissedTraining: ${!!dismissedProductTraining?.migratedUserWelcomeModal}, shouldOpenSearch: ${shouldOpenSearch}`); + Log.hmmm( + `[MigratedUserWelcomeModal] useEffect triggered - hasBeenAddedToNudgeMigration: ${hasBeenAddedToNudgeMigration}, hasDismissedTraining: ${!!dismissedProductTraining?.migratedUserWelcomeModal}, shouldOpenSearch: ${shouldOpenSearch}`, + ); if (!!(hasBeenAddedToNudgeMigration && !dismissedProductTraining?.migratedUserWelcomeModal) || !shouldOpenSearch) { Log.hmmm('[MigratedUserWelcomeModal] Conditions not met, keeping modal disabled'); From 1e4751d02d8b25066bae189b4c8be4c1f660230c Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Fri, 15 Aug 2025 08:24:22 -1000 Subject: [PATCH 4/4] Add more logs --- src/components/TestDrive/Modal/AdminTestDriveModal.tsx | 8 ++++++++ src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/src/components/TestDrive/Modal/AdminTestDriveModal.tsx b/src/components/TestDrive/Modal/AdminTestDriveModal.tsx index 5e52d4536282..f36543aee2fd 100644 --- a/src/components/TestDrive/Modal/AdminTestDriveModal.tsx +++ b/src/components/TestDrive/Modal/AdminTestDriveModal.tsx @@ -2,6 +2,7 @@ import React from 'react'; import {InteractionManager} from 'react-native'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; +import Log from '@libs/Log'; import Navigation from '@libs/Navigation/Navigation'; import {isAdminRoom} from '@libs/ReportUtils'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -14,18 +15,25 @@ function AdminTestDriveModal() { const [onboardingReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${onboarding?.chatReportID}`, {canBeMissing: true}); const navigate = () => { + Log.hmmm('[AdminTestDriveModal] Navigate function called'); InteractionManager.runAfterInteractions(() => { + Log.hmmm('[AdminTestDriveModal] Calling Navigation.navigate()'); Navigation.navigate(ROUTES.TEST_DRIVE_DEMO_ROOT); }); }; const skipTestDrive = () => { + Log.hmmm('[AdminTestDriveModal] Skip test drive function called'); Navigation.dismissModal(); + + Log.hmmm('[AdminTestDriveModal] Running after interactions'); InteractionManager.runAfterInteractions(() => { 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)); }); }; diff --git a/src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx b/src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx index 4efa21d96c8e..b9d619b59ec5 100644 --- a/src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx +++ b/src/components/TestDrive/Modal/EmployeeTestDriveModal.tsx @@ -20,6 +20,7 @@ import { 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'; @@ -49,6 +50,7 @@ function EmployeeTestDriveModal() { }, []); const navigate = () => { + Log.hmmm('[EmployeeTestDriveModal] Navigate function called', {bossEmail}); const loginTrim = bossEmail.trim(); if (!loginTrim || !Str.isValidEmail(loginTrim)) { setFormError(translate('common.error.email')); @@ -59,6 +61,7 @@ function EmployeeTestDriveModal() { verifyTestDriveRecipient(bossEmail) .then(() => { + Log.hmmm('[EmployeeTestDriveModal] Test drive recipient verified'); setTestReceipt( TestReceipt, 'jpg', @@ -89,18 +92,22 @@ function EmployeeTestDriveModal() { 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'); InteractionManager.runAfterInteractions(() => { + Log.hmmm('[EmployeeTestDriveModal] Calling Navigation.goBack() and Navigation.navigate()'); Navigation.goBack(); 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'); });