11import { findFocusedRoute , getStateFromPath } from '@react-navigation/native' ;
22import type { NavigationState , PartialState } from '@react-navigation/native' ;
3+ import type { OnyxEntry } from 'react-native-onyx' ;
34import Onyx from 'react-native-onyx' ;
45import type { ValueOf } from 'type-fest' ;
56import { translate } from '@libs/Localize' ;
@@ -15,18 +16,6 @@ import ONYXKEYS from '@src/ONYXKEYS';
1516import ROUTES from '@src/ROUTES' ;
1617import type { Locale , Onboarding } from '@src/types/onyx' ;
1718
18- let onboardingInitialPath = '' ;
19- const onboardingLastVisitedPathConnection = Onyx . connect ( {
20- key : ONYXKEYS . ONBOARDING_LAST_VISITED_PATH ,
21- callback : ( value ) => {
22- if ( value === undefined ) {
23- return ;
24- }
25- onboardingInitialPath = value ;
26- Onyx . disconnect ( onboardingLastVisitedPathConnection ) ;
27- } ,
28- } ) ;
29-
3019let onboardingValues : Onboarding ;
3120Onyx . connect ( {
3221 key : ONYXKEYS . NVP_ONBOARDING ,
@@ -38,15 +27,18 @@ Onyx.connect({
3827 } ,
3928} ) ;
4029
30+ type OnboardingCompanySize = ValueOf < typeof CONST . ONBOARDING_COMPANY_SIZE > ;
31+ type OnboardingPurpose = ValueOf < typeof CONST . ONBOARDING_CHOICES > ;
32+
4133type GetOnboardingInitialPathParamsType = {
4234 isUserFromPublicDomain : boolean ;
4335 hasAccessiblePolicies : boolean ;
4436 onboardingValuesParam ?: Onboarding ;
37+ currentOnboardingPurposeSelected : OnyxEntry < OnboardingPurpose > ;
38+ currentOnboardingCompanySize : OnyxEntry < OnboardingCompanySize > ;
39+ onboardingInitialPath : OnyxEntry < string > ;
4540} ;
4641
47- type OnboardingCompanySize = ValueOf < typeof CONST . ONBOARDING_COMPANY_SIZE > ;
48- type OnboardingPurpose = ValueOf < typeof CONST . ONBOARDING_CHOICES > ;
49-
5042type OnboardingTaskLinks = Partial < {
5143 onboardingCompanySize : OnboardingCompanySize ;
5244 integrationName : string ;
@@ -100,12 +92,20 @@ function startOnboardingFlow(startOnboardingFlowParams: GetOnboardingInitialPath
10092}
10193
10294function getOnboardingInitialPath ( getOnboardingInitialPathParams : GetOnboardingInitialPathParamsType ) : string {
103- const { isUserFromPublicDomain, hasAccessiblePolicies, onboardingValuesParam} = getOnboardingInitialPathParams ;
95+ const {
96+ isUserFromPublicDomain,
97+ hasAccessiblePolicies,
98+ onboardingValuesParam,
99+ currentOnboardingPurposeSelected,
100+ currentOnboardingCompanySize,
101+ onboardingInitialPath = '' ,
102+ } = getOnboardingInitialPathParams ;
104103 const state = getStateFromPath ( onboardingInitialPath , linkingConfig . config ) ;
105104 const currentOnboardingValues = onboardingValuesParam ?? onboardingValues ;
106105 const isVsb = currentOnboardingValues ?. signupQualifier === CONST . ONBOARDING_SIGNUP_QUALIFIERS . VSB ;
107106 const isSmb = currentOnboardingValues ?. signupQualifier === CONST . ONBOARDING_SIGNUP_QUALIFIERS . SMB ;
108107 const isIndividual = currentOnboardingValues ?. signupQualifier === CONST . ONBOARDING_SIGNUP_QUALIFIERS . INDIVIDUAL ;
108+ const isCurrentOnboardingPurposeManageTeam = currentOnboardingPurposeSelected === CONST . ONBOARDING_CHOICES . MANAGE_TEAM ;
109109
110110 if ( isVsb ) {
111111 Onyx . set ( ONYXKEYS . ONBOARDING_PURPOSE_SELECTED , CONST . ONBOARDING_CHOICES . MANAGE_TEAM ) ;
@@ -137,6 +137,14 @@ function getOnboardingInitialPath(getOnboardingInitialPathParams: GetOnboardingI
137137 return `/${ ROUTES . ONBOARDING_ROOT . route } ` ;
138138 }
139139
140+ if ( onboardingInitialPath . includes ( ROUTES . ONBOARDING_EMPLOYEES . route ) && ! isCurrentOnboardingPurposeManageTeam ) {
141+ return `/${ ROUTES . ONBOARDING_PURPOSE . route } ` ;
142+ }
143+
144+ if ( onboardingInitialPath . includes ( ROUTES . ONBOARDING_ACCOUNTING . route ) && ( ! isCurrentOnboardingPurposeManageTeam || ! currentOnboardingCompanySize ) ) {
145+ return `/${ ROUTES . ONBOARDING_PURPOSE . route } ` ;
146+ }
147+
140148 return onboardingInitialPath ;
141149}
142150
@@ -382,8 +390,5 @@ const getOnboardingMessages = (locale?: Locale) => {
382390 } ;
383391} ;
384392
385- function clearInitialPath ( ) {
386- onboardingInitialPath = '' ;
387- }
388393export type { OnboardingMessage , OnboardingTask , OnboardingTaskLinks , OnboardingPurpose , OnboardingCompanySize } ;
389- export { getOnboardingInitialPath , startOnboardingFlow , clearInitialPath , getOnboardingMessages } ;
394+ export { getOnboardingInitialPath , startOnboardingFlow , getOnboardingMessages } ;
0 commit comments