From a36451f143e0c3aee32d72c5c900041d6ed92604 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Wed, 7 May 2025 11:16:33 +0700 Subject: [PATCH 1/3] fix: user gets onboarding modals multiple times --- .../Navigation/AppNavigator/AuthScreens.tsx | 14 +++++++++++++- .../BaseOnboardingAccounting.tsx | 17 +++++++++-------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index c1a89794c7a1..de700034f59b 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -20,6 +20,7 @@ import {connect} from '@libs/actions/Delegate'; import setFullscreenVisibility from '@libs/actions/setFullscreenVisibility'; import {init, isClientTheLeader} from '@libs/ActiveClientManager'; import {READ_COMMANDS} from '@libs/API/types'; +import getPlatform from '@libs/getPlatform'; import HttpUtils from '@libs/HttpUtils'; import KeyboardShortcut from '@libs/KeyboardShortcut'; import Log from '@libs/Log'; @@ -228,6 +229,7 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie const [account] = useOnyx(ONYXKEYS.ACCOUNT, { canBeMissing: true, }); + const [onboardingCompanySize] = useOnyx(ONYXKEYS.ONBOARDING_COMPANY_SIZE, {canBeMissing: true}); const modal = useRef({}); const {isOnboardingCompleted} = useOnboardingFlowRouter(); const [shouldShowRequire2FAPage, setShouldShowRequire2FAPage] = useState(!!account?.needsTwoFactorAuthSetup && !account.requiresTwoFactorAuth); @@ -248,6 +250,16 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie return CONFIG.IS_HYBRID_APP && Navigation.getActiveRoute().includes(ROUTES.ONBOARDING_ACCOUNTING.route) && isOnboardingCompleted === true; }, [isOnboardingCompleted]); + const shouldRenderOnboardingExclusively = useMemo(() => { + return ( + getPlatform() !== CONST.PLATFORM.DESKTOP && + !CONFIG.IS_HYBRID_APP && + Navigation.getActiveRoute().includes(ROUTES.ONBOARDING_ACCOUNTING.route) && + isOnboardingCompleted === true && + onboardingCompanySize !== CONST.ONBOARDING_COMPANY_SIZE.MICRO + ); + }, [onboardingCompanySize, isOnboardingCompleted]); + useEffect(() => { NavBarManager.setButtonStyle(theme.navigationBarButtonsStyle); @@ -663,7 +675,7 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie options={rootNavigatorScreenOptions.basicModalNavigator} component={WelcomeVideoModalNavigator} /> - {(isOnboardingCompleted === false || shouldRenderOnboardingExclusivelyOnHybridApp) && ( + {(isOnboardingCompleted === false || shouldRenderOnboardingExclusivelyOnHybridApp || shouldRenderOnboardingExclusively) && ( { - if (!!isLoading || !prevIsLoading || !CONFIG.IS_HYBRID_APP) { + if (!!isLoading || !prevIsLoading) { return; } - HybridAppModule.closeReactNativeApp({shouldSignOut: false, shouldSetNVP: true}); - setRootStatusBarEnabled(false); + if (CONFIG.IS_HYBRID_APP) { + HybridAppModule.closeReactNativeApp({shouldSignOut: false, shouldSetNVP: true}); + setRootStatusBarEnabled(false); + return; + } + openOldDotLink(CONST.OLDDOT_URLS.INBOX, true); }, [isLoading, prevIsLoading, setRootStatusBarEnabled]); const accountingOptions: OnboardingListItem[] = useMemo(() => { @@ -201,10 +205,7 @@ function BaseOnboardingAccounting({shouldUseNativeStyles}: BaseOnboardingAccount }); if (onboardingCompanySize !== CONST.ONBOARDING_COMPANY_SIZE.MICRO && getPlatform() !== CONST.PLATFORM.DESKTOP) { - if (CONFIG.IS_HYBRID_APP) { - return; - } - openOldDotLink(CONST.OLDDOT_URLS.INBOX, true); + return; } // Avoid creating new WS because onboardingPolicyID is cleared before unmounting InteractionManager.runAfterInteractions(() => { @@ -228,7 +229,7 @@ function BaseOnboardingAccounting({shouldUseNativeStyles}: BaseOnboardingAccount }); }} isLoading={isLoading} - isDisabled={isOffline && onboardingCompanySize !== CONST.ONBOARDING_COMPANY_SIZE.MICRO && CONFIG.IS_HYBRID_APP} + isDisabled={isOffline && onboardingCompanySize !== CONST.ONBOARDING_COMPANY_SIZE.MICRO && getPlatform() !== CONST.PLATFORM.DESKTOP} pressOnEnter /> From 3b8304b3f2d9130429fd424ae7019bd185223720 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Tue, 13 May 2025 12:18:04 +0700 Subject: [PATCH 2/3] fix onboarding modal still appears in native app --- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index d9e50f248b0a..9561690772fc 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -13,6 +13,7 @@ import {useSearchRouterContext} from '@components/Search/SearchRouter/SearchRout import SearchRouterModal from '@components/Search/SearchRouter/SearchRouterModal'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useOnboardingFlowRouter from '@hooks/useOnboardingFlow'; +import usePrevious from '@hooks/usePrevious'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import {SidebarOrderedReportIDsContextProvider} from '@hooks/useSidebarOrderedReportIDs'; import useStyleUtils from '@hooks/useStyleUtils'; @@ -235,6 +236,8 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie const [onboardingCompanySize] = useOnyx(ONYXKEYS.ONBOARDING_COMPANY_SIZE, {canBeMissing: true}); const modal = useRef({}); const {isOnboardingCompleted} = useOnboardingFlowRouter(); + const [isOnboardingLoading] = useOnyx(ONYXKEYS.NVP_ONBOARDING, {canBeMissing: true, selector: (value) => !!value?.isLoading}); + const prevIsOnboardingLoading = usePrevious(isOnboardingLoading); const [shouldShowRequire2FAPage, setShouldShowRequire2FAPage] = useState(!!account?.needsTwoFactorAuthSetup && !account.requiresTwoFactorAuth); const navigation = useNavigation(); @@ -255,13 +258,14 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie const shouldRenderOnboardingExclusively = useMemo(() => { return ( - getPlatform() !== CONST.PLATFORM.DESKTOP && !CONFIG.IS_HYBRID_APP && Navigation.getActiveRoute().includes(ROUTES.ONBOARDING_ACCOUNTING.route) && + getPlatform() !== CONST.PLATFORM.DESKTOP && + onboardingCompanySize !== CONST.ONBOARDING_COMPANY_SIZE.MICRO && isOnboardingCompleted === true && - onboardingCompanySize !== CONST.ONBOARDING_COMPANY_SIZE.MICRO + (!!isOnboardingLoading || prevIsOnboardingLoading) ); - }, [onboardingCompanySize, isOnboardingCompleted]); + }, [onboardingCompanySize, isOnboardingCompleted, isOnboardingLoading, prevIsOnboardingLoading]); useEffect(() => { NavBarManager.setButtonStyle(theme.navigationBarButtonsStyle); From c04229bd205dd386e8595d03b67f619ee7427769 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Tue, 13 May 2025 12:20:36 +0700 Subject: [PATCH 3/3] fix lint --- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index 9561690772fc..e917b3398f60 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -263,7 +263,7 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie getPlatform() !== CONST.PLATFORM.DESKTOP && onboardingCompanySize !== CONST.ONBOARDING_COMPANY_SIZE.MICRO && isOnboardingCompleted === true && - (!!isOnboardingLoading || prevIsOnboardingLoading) + (!!isOnboardingLoading || !!prevIsOnboardingLoading) ); }, [onboardingCompanySize, isOnboardingCompleted, isOnboardingLoading, prevIsOnboardingLoading]);