From a458840057979cf9d5b1b2e337c408191872abab Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Sun, 18 Aug 2024 22:56:23 -0400 Subject: [PATCH 01/27] grabbing signupqualifer param --- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index 071b6d8270d7..b8f7371098f5 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -244,6 +244,7 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie // Sign out the current user if we're transitioning with a different user const isTransitioning = currentUrl.includes(ROUTES.TRANSITION_BETWEEN_APPS); const isSupportalTransition = currentUrl.includes('authTokenType=support'); + const signupQualifier = currentUrl.split('signupQualifier=')[1].split('&')[0]; if (isLoggingInAsNewUser && isTransitioning) { Session.signOutAndRedirectToSignIn(false, isSupportalTransition); return; From 108229b89575d937bd826344a6bb4f98e274ba0f Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Mon, 19 Aug 2024 11:38:54 -0400 Subject: [PATCH 02/27] adding new onyx key --- src/ONYXKEYS.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index b7b6cf53a176..7cece0b073ed 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -327,6 +327,9 @@ const ONYXKEYS = { /** Onboarding Purpose selected by the user during Onboarding flow */ ONBOARDING_PURPOSE_SELECTED: 'onboardingPurposeSelected', + /** Onboarding customized choices to display to the user based on their profile when signing up */ + ONBOARDING_CUSTOM_CHOICES: 'onboardingCustomChoices', + /** Onboarding error message to be displayed to the user */ ONBOARDING_ERROR_MESSAGE: 'onboardingErrorMessage', @@ -859,6 +862,7 @@ type OnyxValuesMapping = { [ONYXKEYS.MAX_CANVAS_HEIGHT]: number; [ONYXKEYS.MAX_CANVAS_WIDTH]: number; [ONYXKEYS.ONBOARDING_PURPOSE_SELECTED]: string; + [ONYXKEYS.ONBOARDING_CUSTOM_CHOICES]: string[]; [ONYXKEYS.ONBOARDING_ERROR_MESSAGE]: string; [ONYXKEYS.ONBOARDING_POLICY_ID]: string; [ONYXKEYS.ONBOARDING_ADMINS_CHAT_REPORT_ID]: string; From 1f70dec0dd2e02a038bb751ba60375d587524807 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Mon, 19 Aug 2024 12:05:21 -0400 Subject: [PATCH 03/27] setting new onboarding choices/purpose nvp --- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index b8f7371098f5..8abcd08cc83e 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -244,12 +244,25 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie // Sign out the current user if we're transitioning with a different user const isTransitioning = currentUrl.includes(ROUTES.TRANSITION_BETWEEN_APPS); const isSupportalTransition = currentUrl.includes('authTokenType=support'); - const signupQualifier = currentUrl.split('signupQualifier=')[1].split('&')[0]; if (isLoggingInAsNewUser && isTransitioning) { Session.signOutAndRedirectToSignIn(false, isSupportalTransition); return; } + const signupQualifier = currentUrl.split('signupQualifier=')[1].split('&')[0]; + if (signupQualifier) { + if (signupQualifier === 'individual') { + Onyx.set(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES, [ + CONST.ONBOARDING_CHOICES.PERSONAL_SPEND, + CONST.ONBOARDING_CHOICES.EMPLOYER, + CONST.ONBOARDING_CHOICES.CHAT_SPLIT + ]) + } + if (signupQualifier === 'vsb') { + Onyx.set(ONYXKEYS.ONBOARDING_PURPOSE_SELECTED, CONST.ONBOARDING_CHOICES.MANAGE_TEAM) + } + } + NetworkConnection.listenForReconnect(); NetworkConnection.onReconnect(handleNetworkReconnect); PusherConnectionManager.init(); From 34c67a2d8105cbc950bcb98f20e28ee52f0cc46c Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Mon, 19 Aug 2024 18:00:13 -0400 Subject: [PATCH 04/27] set nvp values with actions --- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 5 +++-- src/libs/actions/Welcome.ts | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index 8abcd08cc83e..ff311b5b8eac 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -35,6 +35,7 @@ import * as PersonalDetails from '@userActions/PersonalDetails'; import * as PriorityMode from '@userActions/PriorityMode'; import * as Report from '@userActions/Report'; import * as Session from '@userActions/Session'; +import * as Welcome from '@libs/actions/Welcome'; import toggleTestToolsModal from '@userActions/TestTool'; import Timing from '@userActions/Timing'; import * as User from '@userActions/User'; @@ -252,14 +253,14 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie const signupQualifier = currentUrl.split('signupQualifier=')[1].split('&')[0]; if (signupQualifier) { if (signupQualifier === 'individual') { - Onyx.set(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES, [ + Welcome.setOnboardingCustomChoices([ CONST.ONBOARDING_CHOICES.PERSONAL_SPEND, CONST.ONBOARDING_CHOICES.EMPLOYER, CONST.ONBOARDING_CHOICES.CHAT_SPLIT ]) } if (signupQualifier === 'vsb') { - Onyx.set(ONYXKEYS.ONBOARDING_PURPOSE_SELECTED, CONST.ONBOARDING_CHOICES.MANAGE_TEAM) + Welcome.setOnboardingPurposeSelected(CONST.ONBOARDING_CHOICES.MANAGE_TEAM) } } diff --git a/src/libs/actions/Welcome.ts b/src/libs/actions/Welcome.ts index d54314ae6f05..7c181ebadcc2 100644 --- a/src/libs/actions/Welcome.ts +++ b/src/libs/actions/Welcome.ts @@ -140,6 +140,10 @@ function setOnboardingPurposeSelected(value: OnboardingPurposeType) { Onyx.set(ONYXKEYS.ONBOARDING_PURPOSE_SELECTED, value ?? null); } +function setOnboardingCustomChoices(value: string[]) { + Onyx.set(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES, value ?? []); +} + function setOnboardingErrorMessage(value: string) { Onyx.set(ONYXKEYS.ONBOARDING_ERROR_MESSAGE, value ?? null); } @@ -219,6 +223,7 @@ export { onServerDataReady, isOnboardingFlowCompleted, setOnboardingPurposeSelected, + setOnboardingCustomChoices, resetAllChecks, setOnboardingAdminsChatReportID, setOnboardingPolicyID, From e13c625a7e0ecd6a18290cbd1b9d416ef1db6ff7 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Mon, 19 Aug 2024 18:13:10 -0400 Subject: [PATCH 05/27] fix prettier --- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index ff311b5b8eac..1d36a53519f4 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -10,6 +10,7 @@ import usePermissions from '@hooks/usePermissions'; import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; import useWindowDimensions from '@hooks/useWindowDimensions'; +import * as Welcome from '@libs/actions/Welcome'; import {READ_COMMANDS} from '@libs/API/types'; import HttpUtils from '@libs/HttpUtils'; import KeyboardShortcut from '@libs/KeyboardShortcut'; @@ -35,7 +36,6 @@ import * as PersonalDetails from '@userActions/PersonalDetails'; import * as PriorityMode from '@userActions/PriorityMode'; import * as Report from '@userActions/Report'; import * as Session from '@userActions/Session'; -import * as Welcome from '@libs/actions/Welcome'; import toggleTestToolsModal from '@userActions/TestTool'; import Timing from '@userActions/Timing'; import * as User from '@userActions/User'; @@ -253,14 +253,10 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie const signupQualifier = currentUrl.split('signupQualifier=')[1].split('&')[0]; if (signupQualifier) { if (signupQualifier === 'individual') { - Welcome.setOnboardingCustomChoices([ - CONST.ONBOARDING_CHOICES.PERSONAL_SPEND, - CONST.ONBOARDING_CHOICES.EMPLOYER, - CONST.ONBOARDING_CHOICES.CHAT_SPLIT - ]) + Welcome.setOnboardingCustomChoices([CONST.ONBOARDING_CHOICES.PERSONAL_SPEND, CONST.ONBOARDING_CHOICES.EMPLOYER, CONST.ONBOARDING_CHOICES.CHAT_SPLIT]); } if (signupQualifier === 'vsb') { - Welcome.setOnboardingPurposeSelected(CONST.ONBOARDING_CHOICES.MANAGE_TEAM) + Welcome.setOnboardingPurposeSelected(CONST.ONBOARDING_CHOICES.MANAGE_TEAM); } } From e1eaefb347f1d4feeb0db78a993dab85adecc6d7 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Tue, 20 Aug 2024 10:58:47 -0400 Subject: [PATCH 06/27] fix missing signupQualifier case --- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index 0795f3f9504f..3c0575c95158 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -249,8 +249,11 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie Session.signOutAndRedirectToSignIn(false, isSupportalTransition); return; } - - const signupQualifier = currentUrl.split('signupQualifier=')[1].split('&')[0]; + + let signupQualifier + if (currentUrl.includes('signupQualifier')) { + signupQualifier = currentUrl.split('signupQualifier=')[1].split('&')[0]; + } if (signupQualifier) { if (signupQualifier === 'individual') { Welcome.setOnboardingCustomChoices([CONST.ONBOARDING_CHOICES.PERSONAL_SPEND, CONST.ONBOARDING_CHOICES.EMPLOYER, CONST.ONBOARDING_CHOICES.CHAT_SPLIT]); From d639cbe92f112f5b1820cd1630978230addf0070 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Tue, 20 Aug 2024 11:11:00 -0400 Subject: [PATCH 07/27] fix lint --- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index 3c0575c95158..85a614fdfc95 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -249,8 +249,8 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie Session.signOutAndRedirectToSignIn(false, isSupportalTransition); return; } - - let signupQualifier + + let signupQualifier; if (currentUrl.includes('signupQualifier')) { signupQualifier = currentUrl.split('signupQualifier=')[1].split('&')[0]; } From c17d7c11c79e5235d496c2c2ba2dfb95db17dc10 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Wed, 25 Sep 2024 15:31:49 -0300 Subject: [PATCH 08/27] add setOnboardingCustomChoices --- src/libs/actions/Welcome/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/libs/actions/Welcome/index.ts b/src/libs/actions/Welcome/index.ts index 75529a879104..5e5e2dde5860 100644 --- a/src/libs/actions/Welcome/index.ts +++ b/src/libs/actions/Welcome/index.ts @@ -142,6 +142,10 @@ function checkOnboardingDataReady() { resolveOnboardingFlowStatus(); } +function setOnboardingCustomChoices(value: string[]) { + Onyx.set(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES, value ?? null); +} + function setOnboardingPurposeSelected(value: OnboardingPurposeType) { Onyx.set(ONYXKEYS.ONBOARDING_PURPOSE_SELECTED, value ?? null); } @@ -239,6 +243,7 @@ function resetAllChecks() { export { onServerDataReady, isOnboardingFlowCompleted, + setOnboardingCustomChoices, setOnboardingPurposeSelected, updateOnboardingLastVisitedPath, resetAllChecks, From 80536b43bb9f276f5ccf527f6e8a3ede1db31887 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Thu, 26 Sep 2024 12:21:40 -0300 Subject: [PATCH 09/27] filter onboarding choices based for individual signups --- src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx index 81f3e6be36ad..e1148d5fc349 100644 --- a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx +++ b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx @@ -45,11 +45,16 @@ function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight, ro const theme = useTheme(); const [onboardingErrorMessage, onboardingErrorMessageResult] = useOnyx(ONYXKEYS.ONBOARDING_ERROR_MESSAGE); + const customChoices = useOnyx(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES)[0] || []; + + const onboardingChoices = customChoices.length > 0 + ? Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES).filter(choice => customChoices.includes(choice)) + : Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES) const maxHeight = shouldEnableMaxHeight ? windowHeight : undefined; const paddingHorizontal = onboardingIsMediumOrLargerScreenWidth ? styles.ph8 : styles.ph5; - const menuItems: MenuItemProps[] = Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES).map((choice) => { + const menuItems: MenuItemProps[] = onboardingChoices.map((choice) => { const translationKey = `onboarding.purpose.${choice}` as const; return { key: translationKey, From 8b9d0148192c37c7e8933d10593d4f87ce723717 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Thu, 26 Sep 2024 15:29:24 -0300 Subject: [PATCH 10/27] fix lint --- src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx index e1148d5fc349..eaac1ad5825f 100644 --- a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx +++ b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx @@ -45,15 +45,13 @@ function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight, ro const theme = useTheme(); const [onboardingErrorMessage, onboardingErrorMessageResult] = useOnyx(ONYXKEYS.ONBOARDING_ERROR_MESSAGE); - const customChoices = useOnyx(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES)[0] || []; - - const onboardingChoices = customChoices.length > 0 - ? Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES).filter(choice => customChoices.includes(choice)) - : Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES) const maxHeight = shouldEnableMaxHeight ? windowHeight : undefined; const paddingHorizontal = onboardingIsMediumOrLargerScreenWidth ? styles.ph8 : styles.ph5; + const customChoices = useOnyx(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES)[0] ?? []; + const onboardingChoices = customChoices.length > 0 ? Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES).filter((choice) => customChoices.includes(choice)) : Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES); + const menuItems: MenuItemProps[] = onboardingChoices.map((choice) => { const translationKey = `onboarding.purpose.${choice}` as const; return { From 706a735f2dd73ea2ba781ef4cc21f9ccf955cebe Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Fri, 27 Sep 2024 16:09:04 -0300 Subject: [PATCH 11/27] improving constants and types --- src/CONST.ts | 7 +++++++ src/ONYXKEYS.ts | 2 +- src/libs/actions/Welcome/index.ts | 4 ++-- src/types/onyx/Onboarding.ts | 3 +++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/CONST.ts b/src/CONST.ts index 33eae01ed9c8..474b86e3947b 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -84,6 +84,12 @@ const onboardingChoices = { ...backendOnboardingChoices, } as const; +const signupQualifiers = { + INDIVIDUAL: 'individual', + VSB: 'vsb', + SMB: 'smb', +} + const onboardingEmployerOrSubmitMessage: OnboardingMessageType = { message: 'Getting paid back is as easy as sending a message. Let’s go over the basics.', video: { @@ -4459,6 +4465,7 @@ const CONST = { ONBOARDING_INTRODUCTION: 'Let’s get you set up 🔧', ONBOARDING_CHOICES: {...onboardingChoices}, SELECTABLE_ONBOARDING_CHOICES: {...selectableOnboardingChoices}, + ONBOARDING_SIGNUP_QUALIFIERS: {...signupQualifiers}, ONBOARDING_INVITE_TYPES: {...onboardingInviteTypes}, ACTIONABLE_TRACK_EXPENSE_WHISPER_MESSAGE: 'What would you like to do with this expense?', ONBOARDING_CONCIERGE: { diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index 9c7fdbc049c3..18fba825cd85 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -947,7 +947,7 @@ type OnyxValuesMapping = { [ONYXKEYS.MAX_CANVAS_HEIGHT]: number; [ONYXKEYS.MAX_CANVAS_WIDTH]: number; [ONYXKEYS.ONBOARDING_PURPOSE_SELECTED]: OnboardingPurposeType; - [ONYXKEYS.ONBOARDING_CUSTOM_CHOICES]: string[]; + [ONYXKEYS.ONBOARDING_CUSTOM_CHOICES]: OnboardingPurposeType[] | []; [ONYXKEYS.ONBOARDING_ERROR_MESSAGE]: string; [ONYXKEYS.ONBOARDING_POLICY_ID]: string; [ONYXKEYS.ONBOARDING_ADMINS_CHAT_REPORT_ID]: string; diff --git a/src/libs/actions/Welcome/index.ts b/src/libs/actions/Welcome/index.ts index 5e5e2dde5860..953547dd21e6 100644 --- a/src/libs/actions/Welcome/index.ts +++ b/src/libs/actions/Welcome/index.ts @@ -142,8 +142,8 @@ function checkOnboardingDataReady() { resolveOnboardingFlowStatus(); } -function setOnboardingCustomChoices(value: string[]) { - Onyx.set(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES, value ?? null); +function setOnboardingCustomChoices(value: OnboardingPurposeType[]) { + Onyx.set(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES, value ?? []); } function setOnboardingPurposeSelected(value: OnboardingPurposeType) { diff --git a/src/types/onyx/Onboarding.ts b/src/types/onyx/Onboarding.ts index bb250d895c87..5bb022b6fd17 100644 --- a/src/types/onyx/Onboarding.ts +++ b/src/types/onyx/Onboarding.ts @@ -5,6 +5,9 @@ type Onboarding = { /** A Boolean that informs whether the user has completed the guided setup onboarding flow */ hasCompletedGuidedSetupFlow: boolean; + + /** A string that informs which qualifier the user selected during sign up */ + signupQualifier: string; }; export default Onboarding; From 444208cd32d8b10bedbf348f59a2470241dbc451 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Fri, 27 Sep 2024 16:09:38 -0300 Subject: [PATCH 12/27] cleanup constants --- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index 4700c668df0d..4a1f66aac88a 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -277,10 +277,10 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie signupQualifier = currentUrl.split('signupQualifier=')[1].split('&')[0]; } if (signupQualifier) { - if (signupQualifier === 'individual') { + if (signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.INDIVIDUAL) { Welcome.setOnboardingCustomChoices([CONST.ONBOARDING_CHOICES.PERSONAL_SPEND, CONST.ONBOARDING_CHOICES.EMPLOYER, CONST.ONBOARDING_CHOICES.CHAT_SPLIT]); } - if (signupQualifier === 'vsb') { + if (signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB) { Welcome.setOnboardingPurposeSelected(CONST.ONBOARDING_CHOICES.MANAGE_TEAM); } } From cd773f1d558b564bda40cfcbda6f052a51be9b1e Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Fri, 27 Sep 2024 16:11:22 -0300 Subject: [PATCH 13/27] use constants and set custom choices --- .../OnboardingPurpose/BaseOnboardingPurpose.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx index eaac1ad5825f..a68d02bdd019 100644 --- a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx +++ b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx @@ -49,8 +49,16 @@ function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight, ro const maxHeight = shouldEnableMaxHeight ? windowHeight : undefined; const paddingHorizontal = onboardingIsMediumOrLargerScreenWidth ? styles.ph8 : styles.ph5; - const customChoices = useOnyx(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES)[0] ?? []; - const onboardingChoices = customChoices.length > 0 ? Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES).filter((choice) => customChoices.includes(choice)) : Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES); + const [customChoices = []] = useOnyx(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES); + const [onboardingValues] = useOnyx(ONYXKEYS.NVP_ONBOARDING); + const showBusinessModal = onboardingValues && 'signupQualifier' in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB + + if (showBusinessModal) { + Navigation.navigate(ROUTES.ONBOARDING_WORK.getRoute()); + } + + const onboardingChoices = customChoices.length > 0 ? Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES).filter((choice) => customChoices.includes(choice)) + : Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES); const menuItems: MenuItemProps[] = onboardingChoices.map((choice) => { const translationKey = `onboarding.purpose.${choice}` as const; From 0db9204f2ba3b2841bba6a21261ba64353eecd64 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Fri, 27 Sep 2024 16:11:51 -0300 Subject: [PATCH 14/27] remove back button from onboarding work --- src/pages/OnboardingWork/BaseOnboardingWork.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/OnboardingWork/BaseOnboardingWork.tsx b/src/pages/OnboardingWork/BaseOnboardingWork.tsx index 1e8406b62c44..748b9e0e6cbd 100644 --- a/src/pages/OnboardingWork/BaseOnboardingWork.tsx +++ b/src/pages/OnboardingWork/BaseOnboardingWork.tsx @@ -30,6 +30,8 @@ function BaseOnboardingWork({shouldUseNativeStyles, onboardingPurposeSelected, o const {onboardingIsMediumOrLargerScreenWidth} = useResponsiveLayout(); const {inputCallbackRef} = useAutoFocusInput(); + const [onboardingValues] = useOnyx(ONYXKEYS.NVP_ONBOARDING); + const completeEngagement = useCallback( (values: FormOnyxValues<'onboardingWorkForm'>) => { if (!onboardingPurposeSelected) { @@ -73,7 +75,7 @@ function BaseOnboardingWork({shouldUseNativeStyles, onboardingPurposeSelected, o style={[styles.defaultModalContainer, shouldUseNativeStyles && styles.pt8]} > From 3051ffa43e26fdd6425b32fd8e35261e69fe2cfd Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Fri, 27 Sep 2024 17:12:23 -0300 Subject: [PATCH 15/27] prettier --- src/CONST.ts | 2 +- src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx | 8 ++++---- src/pages/OnboardingWork/BaseOnboardingWork.tsx | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/CONST.ts b/src/CONST.ts index 474b86e3947b..2452cc3af194 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -88,7 +88,7 @@ const signupQualifiers = { INDIVIDUAL: 'individual', VSB: 'vsb', SMB: 'smb', -} +}; const onboardingEmployerOrSubmitMessage: OnboardingMessageType = { message: 'Getting paid back is as easy as sending a message. Let’s go over the basics.', diff --git a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx index a68d02bdd019..e4388fa02c2d 100644 --- a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx +++ b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx @@ -51,14 +51,14 @@ function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight, ro const [customChoices = []] = useOnyx(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES); const [onboardingValues] = useOnyx(ONYXKEYS.NVP_ONBOARDING); - const showBusinessModal = onboardingValues && 'signupQualifier' in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB - + const showBusinessModal = onboardingValues && 'signupQualifier' in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB; + if (showBusinessModal) { Navigation.navigate(ROUTES.ONBOARDING_WORK.getRoute()); } - const onboardingChoices = customChoices.length > 0 ? Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES).filter((choice) => customChoices.includes(choice)) - : Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES); + const onboardingChoices = + customChoices.length > 0 ? Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES).filter((choice) => customChoices.includes(choice)) : Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES); const menuItems: MenuItemProps[] = onboardingChoices.map((choice) => { const translationKey = `onboarding.purpose.${choice}` as const; diff --git a/src/pages/OnboardingWork/BaseOnboardingWork.tsx b/src/pages/OnboardingWork/BaseOnboardingWork.tsx index 748b9e0e6cbd..7d261ddfa4bd 100644 --- a/src/pages/OnboardingWork/BaseOnboardingWork.tsx +++ b/src/pages/OnboardingWork/BaseOnboardingWork.tsx @@ -1,6 +1,6 @@ import React, {useCallback} from 'react'; import {View} from 'react-native'; -import {withOnyx} from 'react-native-onyx'; +import {useOnyx, withOnyx} from 'react-native-onyx'; import FormProvider from '@components/Form/FormProvider'; import InputWrapper from '@components/Form/InputWrapper'; import type {FormInputErrors, FormOnyxValues} from '@components/Form/types'; From b61e243b235ebf9bd8118054879c5dddbd3796e8 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Fri, 27 Sep 2024 17:21:32 -0300 Subject: [PATCH 16/27] cleanup withOnyx --- src/pages/OnboardingWork/BaseOnboardingWork.tsx | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/pages/OnboardingWork/BaseOnboardingWork.tsx b/src/pages/OnboardingWork/BaseOnboardingWork.tsx index 7d261ddfa4bd..0a453855d929 100644 --- a/src/pages/OnboardingWork/BaseOnboardingWork.tsx +++ b/src/pages/OnboardingWork/BaseOnboardingWork.tsx @@ -1,6 +1,6 @@ import React, {useCallback} from 'react'; import {View} from 'react-native'; -import {useOnyx, withOnyx} from 'react-native-onyx'; +import {useOnyx} from 'react-native-onyx'; import FormProvider from '@components/Form/FormProvider'; import InputWrapper from '@components/Form/InputWrapper'; import type {FormInputErrors, FormOnyxValues} from '@components/Form/types'; @@ -22,15 +22,17 @@ import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import INPUT_IDS from '@src/types/form/WorkForm'; -import type {BaseOnboardingWorkOnyxProps, BaseOnboardingWorkProps} from './types'; +import type {BaseOnboardingWorkProps} from './types'; -function BaseOnboardingWork({shouldUseNativeStyles, onboardingPurposeSelected, onboardingPolicyID, route}: BaseOnboardingWorkProps) { +function BaseOnboardingWork({shouldUseNativeStyles, route}: BaseOnboardingWorkProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const {onboardingIsMediumOrLargerScreenWidth} = useResponsiveLayout(); const {inputCallbackRef} = useAutoFocusInput(); const [onboardingValues] = useOnyx(ONYXKEYS.NVP_ONBOARDING); + const [onboardingPurposeSelected] = useOnyx(ONYXKEYS.ONBOARDING_PURPOSE_SELECTED); + const [onboardingPolicyID] = useOnyx(ONYXKEYS.ONBOARDING_POLICY_ID); const completeEngagement = useCallback( (values: FormOnyxValues<'onboardingWorkForm'>) => { @@ -115,11 +117,4 @@ function BaseOnboardingWork({shouldUseNativeStyles, onboardingPurposeSelected, o BaseOnboardingWork.displayName = 'BaseOnboardingWork'; -export default withOnyx({ - onboardingPurposeSelected: { - key: ONYXKEYS.ONBOARDING_PURPOSE_SELECTED, - }, - onboardingPolicyID: { - key: ONYXKEYS.ONBOARDING_POLICY_ID, - }, -})(BaseOnboardingWork); +export default BaseOnboardingWork; From 4a79b6aa5fae0f0908d3d1ed98fda53157047e98 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Fri, 27 Sep 2024 18:07:43 -0300 Subject: [PATCH 17/27] add route to onboarding work --- src/pages/OnboardingWork/types.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/OnboardingWork/types.ts b/src/pages/OnboardingWork/types.ts index d87843944cd6..fed2d0ca371d 100644 --- a/src/pages/OnboardingWork/types.ts +++ b/src/pages/OnboardingWork/types.ts @@ -1,4 +1,5 @@ import type {StackScreenProps} from '@react-navigation/stack'; +import type {RouteProp} from '@react-navigation/native'; import type {OnyxEntry} from 'react-native-onyx'; import type {OnboardingModalNavigatorParamList} from '@libs/Navigation/types'; import type {OnboardingPurposeType} from '@src/CONST'; @@ -18,6 +19,7 @@ type BaseOnboardingWorkProps = OnboardingWorkProps & BaseOnboardingWorkOnyxProps & { /* Whether to use native styles tailored for native devices */ shouldUseNativeStyles: boolean; + route: RouteProp; }; export type {OnboardingWorkProps, BaseOnboardingWorkOnyxProps, BaseOnboardingWorkProps}; From 24cccd9db5c35b94a96ba59b5e875baba9ccd9e2 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Sun, 29 Sep 2024 22:58:15 -0300 Subject: [PATCH 18/27] suggestions --- .../OnboardingWork/BaseOnboardingWork.tsx | 8 ++++++- src/pages/OnboardingWork/types.ts | 24 +++++-------------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/src/pages/OnboardingWork/BaseOnboardingWork.tsx b/src/pages/OnboardingWork/BaseOnboardingWork.tsx index 0a453855d929..355552f5c762 100644 --- a/src/pages/OnboardingWork/BaseOnboardingWork.tsx +++ b/src/pages/OnboardingWork/BaseOnboardingWork.tsx @@ -1,5 +1,7 @@ import React, {useCallback} from 'react'; import {View} from 'react-native'; +import {useRoute} from '@react-navigation/native'; +import type {RouteProp} from '@react-navigation/native'; import {useOnyx} from 'react-native-onyx'; import FormProvider from '@components/Form/FormProvider'; import InputWrapper from '@components/Form/InputWrapper'; @@ -18,18 +20,22 @@ import * as ValidationUtils from '@libs/ValidationUtils'; import * as Policy from '@userActions/Policy/Policy'; import * as Welcome from '@userActions/Welcome'; import * as OnboardingFlow from '@userActions/Welcome/OnboardingFlow'; +import type {OnboardingModalNavigatorParamList} from '@libs/Navigation/types'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import INPUT_IDS from '@src/types/form/WorkForm'; +import SCREENS from '@src/SCREENS'; import type {BaseOnboardingWorkProps} from './types'; -function BaseOnboardingWork({shouldUseNativeStyles, route}: BaseOnboardingWorkProps) { +function BaseOnboardingWork({shouldUseNativeStyles}: BaseOnboardingWorkProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const {onboardingIsMediumOrLargerScreenWidth} = useResponsiveLayout(); const {inputCallbackRef} = useAutoFocusInput(); + const route = useRoute>(); + const [onboardingValues] = useOnyx(ONYXKEYS.NVP_ONBOARDING); const [onboardingPurposeSelected] = useOnyx(ONYXKEYS.ONBOARDING_PURPOSE_SELECTED); const [onboardingPolicyID] = useOnyx(ONYXKEYS.ONBOARDING_POLICY_ID); diff --git a/src/pages/OnboardingWork/types.ts b/src/pages/OnboardingWork/types.ts index fed2d0ca371d..4ed980577679 100644 --- a/src/pages/OnboardingWork/types.ts +++ b/src/pages/OnboardingWork/types.ts @@ -1,25 +1,13 @@ import type {StackScreenProps} from '@react-navigation/stack'; -import type {RouteProp} from '@react-navigation/native'; -import type {OnyxEntry} from 'react-native-onyx'; import type {OnboardingModalNavigatorParamList} from '@libs/Navigation/types'; -import type {OnboardingPurposeType} from '@src/CONST'; import type SCREENS from '@src/SCREENS'; type OnboardingWorkProps = Record & StackScreenProps; -type BaseOnboardingWorkOnyxProps = { - /** Saved onboarding purpose selected by the user */ - onboardingPurposeSelected: OnyxEntry; +type BaseOnboardingWorkProps = + { + /* Whether to use native styles tailored for native devices */ + shouldUseNativeStyles: boolean; + }; - /** Saved onboarding purpose selected by the user */ - onboardingPolicyID: OnyxEntry; -}; - -type BaseOnboardingWorkProps = OnboardingWorkProps & - BaseOnboardingWorkOnyxProps & { - /* Whether to use native styles tailored for native devices */ - shouldUseNativeStyles: boolean; - route: RouteProp; - }; - -export type {OnboardingWorkProps, BaseOnboardingWorkOnyxProps, BaseOnboardingWorkProps}; +export type {OnboardingWorkProps, BaseOnboardingWorkProps}; \ No newline at end of file From 99a50d215a9493ad17b8f622d745cdf43b836c72 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Sun, 29 Sep 2024 23:02:23 -0300 Subject: [PATCH 19/27] fix prettier --- src/pages/OnboardingWork/BaseOnboardingWork.tsx | 8 ++++---- src/pages/OnboardingWork/types.ts | 11 +++++------ 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/pages/OnboardingWork/BaseOnboardingWork.tsx b/src/pages/OnboardingWork/BaseOnboardingWork.tsx index 355552f5c762..27e4a85bb56c 100644 --- a/src/pages/OnboardingWork/BaseOnboardingWork.tsx +++ b/src/pages/OnboardingWork/BaseOnboardingWork.tsx @@ -1,7 +1,7 @@ -import React, {useCallback} from 'react'; -import {View} from 'react-native'; import {useRoute} from '@react-navigation/native'; import type {RouteProp} from '@react-navigation/native'; +import React, {useCallback} from 'react'; +import {View} from 'react-native'; import {useOnyx} from 'react-native-onyx'; import FormProvider from '@components/Form/FormProvider'; import InputWrapper from '@components/Form/InputWrapper'; @@ -16,16 +16,16 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import * as ErrorUtils from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; +import type {OnboardingModalNavigatorParamList} from '@libs/Navigation/types'; import * as ValidationUtils from '@libs/ValidationUtils'; import * as Policy from '@userActions/Policy/Policy'; import * as Welcome from '@userActions/Welcome'; import * as OnboardingFlow from '@userActions/Welcome/OnboardingFlow'; -import type {OnboardingModalNavigatorParamList} from '@libs/Navigation/types'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import INPUT_IDS from '@src/types/form/WorkForm'; import SCREENS from '@src/SCREENS'; +import INPUT_IDS from '@src/types/form/WorkForm'; import type {BaseOnboardingWorkProps} from './types'; function BaseOnboardingWork({shouldUseNativeStyles}: BaseOnboardingWorkProps) { diff --git a/src/pages/OnboardingWork/types.ts b/src/pages/OnboardingWork/types.ts index 4ed980577679..91502813f43f 100644 --- a/src/pages/OnboardingWork/types.ts +++ b/src/pages/OnboardingWork/types.ts @@ -4,10 +4,9 @@ import type SCREENS from '@src/SCREENS'; type OnboardingWorkProps = Record & StackScreenProps; -type BaseOnboardingWorkProps = - { - /* Whether to use native styles tailored for native devices */ - shouldUseNativeStyles: boolean; - }; +type BaseOnboardingWorkProps = { + /* Whether to use native styles tailored for native devices */ + shouldUseNativeStyles: boolean; +}; -export type {OnboardingWorkProps, BaseOnboardingWorkProps}; \ No newline at end of file +export type {OnboardingWorkProps, BaseOnboardingWorkProps}; From 1eeab2b47bbd8d060d1fc0e5a9563561dbd871a3 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Sun, 29 Sep 2024 23:06:31 -0300 Subject: [PATCH 20/27] fix prettier --- src/pages/OnboardingWork/BaseOnboardingWork.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/OnboardingWork/BaseOnboardingWork.tsx b/src/pages/OnboardingWork/BaseOnboardingWork.tsx index 27e4a85bb56c..281daa06a479 100644 --- a/src/pages/OnboardingWork/BaseOnboardingWork.tsx +++ b/src/pages/OnboardingWork/BaseOnboardingWork.tsx @@ -24,7 +24,7 @@ import * as OnboardingFlow from '@userActions/Welcome/OnboardingFlow'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import SCREENS from '@src/SCREENS'; +import type SCREENS from '@src/SCREENS'; import INPUT_IDS from '@src/types/form/WorkForm'; import type {BaseOnboardingWorkProps} from './types'; From adb2cde81c6774f1c49a062d72cb868771f1b9b8 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Mon, 30 Sep 2024 11:46:45 -0300 Subject: [PATCH 21/27] refactor code --- src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx | 2 +- src/pages/OnboardingWork/BaseOnboardingWork.tsx | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx index e4388fa02c2d..98b556c8d906 100644 --- a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx +++ b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx @@ -54,7 +54,7 @@ function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight, ro const showBusinessModal = onboardingValues && 'signupQualifier' in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB; if (showBusinessModal) { - Navigation.navigate(ROUTES.ONBOARDING_WORK.getRoute()); + Navigation.navigate(ROUTES.ONBOARDING_WORK.getRoute(route.params?.backTo)); } const onboardingChoices = diff --git a/src/pages/OnboardingWork/BaseOnboardingWork.tsx b/src/pages/OnboardingWork/BaseOnboardingWork.tsx index 281daa06a479..7c67e46299b8 100644 --- a/src/pages/OnboardingWork/BaseOnboardingWork.tsx +++ b/src/pages/OnboardingWork/BaseOnboardingWork.tsx @@ -40,6 +40,8 @@ function BaseOnboardingWork({shouldUseNativeStyles}: BaseOnboardingWorkProps) { const [onboardingPurposeSelected] = useOnyx(ONYXKEYS.ONBOARDING_PURPOSE_SELECTED); const [onboardingPolicyID] = useOnyx(ONYXKEYS.ONBOARDING_POLICY_ID); + const vsbOnboarding = onboardingValues && 'signupQualifier' in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB + const completeEngagement = useCallback( (values: FormOnyxValues<'onboardingWorkForm'>) => { if (!onboardingPurposeSelected) { @@ -83,7 +85,7 @@ function BaseOnboardingWork({shouldUseNativeStyles}: BaseOnboardingWorkProps) { style={[styles.defaultModalContainer, shouldUseNativeStyles && styles.pt8]} > From e8b7582bb68218358d5402e039def8f618899957 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Mon, 30 Sep 2024 11:50:26 -0300 Subject: [PATCH 22/27] fix prettier again --- src/pages/OnboardingWork/BaseOnboardingWork.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/OnboardingWork/BaseOnboardingWork.tsx b/src/pages/OnboardingWork/BaseOnboardingWork.tsx index 7c67e46299b8..1064a7ce45b2 100644 --- a/src/pages/OnboardingWork/BaseOnboardingWork.tsx +++ b/src/pages/OnboardingWork/BaseOnboardingWork.tsx @@ -40,7 +40,7 @@ function BaseOnboardingWork({shouldUseNativeStyles}: BaseOnboardingWorkProps) { const [onboardingPurposeSelected] = useOnyx(ONYXKEYS.ONBOARDING_PURPOSE_SELECTED); const [onboardingPolicyID] = useOnyx(ONYXKEYS.ONBOARDING_POLICY_ID); - const vsbOnboarding = onboardingValues && 'signupQualifier' in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB + const vsbOnboarding = onboardingValues && 'signupQualifier' in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB; const completeEngagement = useCallback( (values: FormOnyxValues<'onboardingWorkForm'>) => { From 1da543aa49f65a9c491e901c274a28635b3821c6 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Wed, 2 Oct 2024 21:28:42 -0300 Subject: [PATCH 23/27] fix double submit routing issue --- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 2 +- src/libs/actions/Welcome/OnboardingFlow.ts | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index e5dea2bd61a3..5e973f9229e4 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -276,7 +276,7 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie let signupQualifier; if (currentUrl.includes('signupQualifier')) { - signupQualifier = currentUrl.split('signupQualifier=')[1].split('&')[0]; + signupQualifier = new URL(currentUrl).searchParams.get('signupQualifier') } if (signupQualifier) { if (signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.INDIVIDUAL) { diff --git a/src/libs/actions/Welcome/OnboardingFlow.ts b/src/libs/actions/Welcome/OnboardingFlow.ts index bc89effc9b50..6bb58dc6b76c 100644 --- a/src/libs/actions/Welcome/OnboardingFlow.ts +++ b/src/libs/actions/Welcome/OnboardingFlow.ts @@ -10,6 +10,7 @@ import NAVIGATORS from '@src/NAVIGATORS'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import SCREENS from '@src/SCREENS'; +import Onboarding from '@src/types/onyx/Onboarding'; let selectedPurpose: string | undefined = ''; Onyx.connect({ @@ -31,6 +32,16 @@ const onboardingLastVisitedPathConnection = Onyx.connect({ }, }); +let onboardingValues: Onboarding; +Onyx.connect({ + key: ONYXKEYS.NVP_ONBOARDING, + callback: (value) => { + if (value !== undefined) { + onboardingValues = value as Onboarding; + } + }, +}); + /** * Build the correct stack order for `onboardingModalNavigator`, * based on onboarding data (currently from the selected purpose). @@ -103,6 +114,11 @@ function startOnboardingFlow() { function getOnboardingInitialPath(): string { const state = getStateFromPath(onboardingInitialPath, linkingConfig.config); + const showBusinessModal = onboardingValues && 'signupQualifier' in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB; + + if (showBusinessModal) { + return `/${ROUTES.ONBOARDING_WORK.route}`; + } if (state?.routes?.at(-1)?.name !== NAVIGATORS.ONBOARDING_MODAL_NAVIGATOR) { return `/${ROUTES.ONBOARDING_ROOT.route}`; } From 783f518a30ef4e84bce3de8d604f911ea096cf40 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Wed, 2 Oct 2024 21:33:01 -0300 Subject: [PATCH 24/27] fix prettier --- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 2 +- src/pages/OnboardingWork/BaseOnboardingWork.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index 5e973f9229e4..ddbb11759eb0 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -276,7 +276,7 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie let signupQualifier; if (currentUrl.includes('signupQualifier')) { - signupQualifier = new URL(currentUrl).searchParams.get('signupQualifier') + signupQualifier = new URL(currentUrl).searchParams.get('signupQualifier'); } if (signupQualifier) { if (signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.INDIVIDUAL) { diff --git a/src/pages/OnboardingWork/BaseOnboardingWork.tsx b/src/pages/OnboardingWork/BaseOnboardingWork.tsx index 2847c69b8a2e..03dbada60f9c 100644 --- a/src/pages/OnboardingWork/BaseOnboardingWork.tsx +++ b/src/pages/OnboardingWork/BaseOnboardingWork.tsx @@ -25,6 +25,7 @@ import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import INPUT_IDS from '@src/types/form/WorkForm'; import type {BaseOnboardingWorkProps} from './types'; + function BaseOnboardingWork({shouldUseNativeStyles, route}: BaseOnboardingWorkProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); From ca043537a2da2675a1031106345bf7d610fb2212 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Wed, 2 Oct 2024 21:43:01 -0300 Subject: [PATCH 25/27] eslint --- src/libs/actions/Welcome/OnboardingFlow.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libs/actions/Welcome/OnboardingFlow.ts b/src/libs/actions/Welcome/OnboardingFlow.ts index 6bb58dc6b76c..a96688d8c3ad 100644 --- a/src/libs/actions/Welcome/OnboardingFlow.ts +++ b/src/libs/actions/Welcome/OnboardingFlow.ts @@ -10,7 +10,7 @@ import NAVIGATORS from '@src/NAVIGATORS'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import SCREENS from '@src/SCREENS'; -import Onboarding from '@src/types/onyx/Onboarding'; +import type Onboarding from '@src/types/onyx/Onboarding'; let selectedPurpose: string | undefined = ''; Onyx.connect({ @@ -36,9 +36,10 @@ let onboardingValues: Onboarding; Onyx.connect({ key: ONYXKEYS.NVP_ONBOARDING, callback: (value) => { - if (value !== undefined) { - onboardingValues = value as Onboarding; + if (value === undefined) { + return; } + onboardingValues = value as Onboarding; }, }); From f0c2b2accdec068a7d210d2b4501fb6b8215a246 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Thu, 3 Oct 2024 12:16:34 -0300 Subject: [PATCH 26/27] Update src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx Co-authored-by: Gandalf --- src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx index 98b556c8d906..ca6b768136de 100644 --- a/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx +++ b/src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx @@ -50,12 +50,6 @@ function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight, ro const paddingHorizontal = onboardingIsMediumOrLargerScreenWidth ? styles.ph8 : styles.ph5; const [customChoices = []] = useOnyx(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES); - const [onboardingValues] = useOnyx(ONYXKEYS.NVP_ONBOARDING); - const showBusinessModal = onboardingValues && 'signupQualifier' in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB; - - if (showBusinessModal) { - Navigation.navigate(ROUTES.ONBOARDING_WORK.getRoute(route.params?.backTo)); - } const onboardingChoices = customChoices.length > 0 ? Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES).filter((choice) => customChoices.includes(choice)) : Object.values(CONST.SELECTABLE_ONBOARDING_CHOICES); From 7622e111a0ffe20029d7d5040ece29d206d545e8 Mon Sep 17 00:00:00 2001 From: Carlos Miceli Date: Thu, 3 Oct 2024 13:28:18 -0300 Subject: [PATCH 27/27] minor refactoring per suggestions --- src/CONST.ts | 3 ++- src/libs/Navigation/AppNavigator/AuthScreens.tsx | 7 +++---- src/libs/actions/Welcome/OnboardingFlow.ts | 2 +- src/pages/OnboardingWork/BaseOnboardingWork.tsx | 4 ++-- src/types/onyx/Onboarding.ts | 5 ++++- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/CONST.ts b/src/CONST.ts index 4a735e934ee9..e6539b72d5a1 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -88,7 +88,7 @@ const signupQualifiers = { INDIVIDUAL: 'individual', VSB: 'vsb', SMB: 'smb', -}; +} as const; const onboardingEmployerOrSubmitMessage: OnboardingMessageType = { message: 'Getting paid back is as easy as sending a message. Let’s go over the basics.', @@ -4469,6 +4469,7 @@ const CONST = { WELCOME_VIDEO_URL: `${CLOUDFRONT_URL}/videos/intro-1280.mp4`, + QUALIFIER_PARAM: 'signupQualifier', ONBOARDING_INTRODUCTION: 'Let’s get you set up 🔧', ONBOARDING_CHOICES: {...onboardingChoices}, SELECTABLE_ONBOARDING_CHOICES: {...selectableOnboardingChoices}, diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index ddbb11759eb0..f2f82176a54c 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -275,10 +275,9 @@ function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDApplie } let signupQualifier; - if (currentUrl.includes('signupQualifier')) { - signupQualifier = new URL(currentUrl).searchParams.get('signupQualifier'); - } - if (signupQualifier) { + if (currentUrl.includes(CONST.QUALIFIER_PARAM)) { + signupQualifier = new URL(currentUrl).searchParams.get(CONST.QUALIFIER_PARAM); + if (signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.INDIVIDUAL) { Welcome.setOnboardingCustomChoices([CONST.ONBOARDING_CHOICES.PERSONAL_SPEND, CONST.ONBOARDING_CHOICES.EMPLOYER, CONST.ONBOARDING_CHOICES.CHAT_SPLIT]); } diff --git a/src/libs/actions/Welcome/OnboardingFlow.ts b/src/libs/actions/Welcome/OnboardingFlow.ts index a96688d8c3ad..4ab3cda27c64 100644 --- a/src/libs/actions/Welcome/OnboardingFlow.ts +++ b/src/libs/actions/Welcome/OnboardingFlow.ts @@ -115,7 +115,7 @@ function startOnboardingFlow() { function getOnboardingInitialPath(): string { const state = getStateFromPath(onboardingInitialPath, linkingConfig.config); - const showBusinessModal = onboardingValues && 'signupQualifier' in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB; + const showBusinessModal = onboardingValues && CONST.QUALIFIER_PARAM in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB; if (showBusinessModal) { return `/${ROUTES.ONBOARDING_WORK.route}`; diff --git a/src/pages/OnboardingWork/BaseOnboardingWork.tsx b/src/pages/OnboardingWork/BaseOnboardingWork.tsx index 03dbada60f9c..9e8e2e3bbfa8 100644 --- a/src/pages/OnboardingWork/BaseOnboardingWork.tsx +++ b/src/pages/OnboardingWork/BaseOnboardingWork.tsx @@ -36,7 +36,7 @@ function BaseOnboardingWork({shouldUseNativeStyles, route}: BaseOnboardingWorkPr const {inputCallbackRef} = useAutoFocusInput(); const {isOffline} = useNetwork(); - const vsbOnboarding = onboardingValues && 'signupQualifier' in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB; + const isVsbOnboarding = onboardingValues && CONST.QUALIFIER_PARAM in onboardingValues && onboardingValues.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB; const completeEngagement = useCallback( (values: FormOnyxValues<'onboardingWorkForm'>) => { @@ -82,7 +82,7 @@ function BaseOnboardingWork({shouldUseNativeStyles, route}: BaseOnboardingWorkPr style={[styles.defaultModalContainer, shouldUseNativeStyles && styles.pt8]} > diff --git a/src/types/onyx/Onboarding.ts b/src/types/onyx/Onboarding.ts index 5bb022b6fd17..4b6a52f25cb4 100644 --- a/src/types/onyx/Onboarding.ts +++ b/src/types/onyx/Onboarding.ts @@ -1,3 +1,6 @@ +import type {ValueOf} from 'type-fest'; +import type CONST from '@src/CONST'; + /** Model of onboarding */ type Onboarding = { /** ID of the report used to display the onboarding checklist message */ @@ -7,7 +10,7 @@ type Onboarding = { hasCompletedGuidedSetupFlow: boolean; /** A string that informs which qualifier the user selected during sign up */ - signupQualifier: string; + signupQualifier: ValueOf; }; export default Onboarding;