Skip to content

Fix: private domain onboarding check doesn't show for hybrid app iOS #61837

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/hooks/useOnboardingFlow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ function useOnboardingFlowRouter() {
const [onboardingValues, isOnboardingCompletedMetadata] = useOnyx(ONYXKEYS.NVP_ONBOARDING, {
canBeMissing: true,
});

const [account] = useOnyx(ONYXKEYS.ACCOUNT, {canBeMissing: true});
const startedOnboardingFlowRef = useRef(false);
const [tryNewDot, tryNewDotdMetadata] = useOnyx(ONYXKEYS.NVP_TRY_NEW_DOT, {
selector: tryNewDotOnyxSelector,
Expand Down Expand Up @@ -74,14 +76,14 @@ function useOnboardingFlowRouter() {
// This is a special case when user created an account from NewDot without finishing the onboarding flow and then logged in from OldDot
if (isHybridAppOnboardingCompleted === true && isOnboardingCompleted === false && !startedOnboardingFlowRef.current) {
startedOnboardingFlowRef.current = true;
startOnboardingFlow(undefined, onboardingValues);
startOnboardingFlow(undefined, onboardingValues, account?.isFromPublicDomain);
}
}

// If the user is not transitioning from OldDot to NewDot, we should start NewDot onboarding flow if it's not completed yet
if (!CONFIG.IS_HYBRID_APP && isOnboardingCompleted === false && !startedOnboardingFlowRef.current) {
startedOnboardingFlowRef.current = true;
startOnboardingFlow(undefined, onboardingValues);
startOnboardingFlow(undefined, onboardingValues, account?.isFromPublicDomain);
}
});
}, [
Expand All @@ -96,6 +98,7 @@ function useOnboardingFlowRouter() {
dismissedProductTraining?.migratedUserWelcomeModal,
onboardingValues,
dismissedProductTraining,
account?.isFromPublicDomain,
]);

return {isOnboardingCompleted: hasCompletedGuidedSetupFlowSelector(onboardingValues), isHybridAppOnboardingCompleted};
Expand Down
21 changes: 4 additions & 17 deletions src/libs/actions/Welcome/OnboardingFlow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import CONST from '@src/CONST';
import NAVIGATORS from '@src/NAVIGATORS';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import type Account from '@src/types/onyx/Account';
import type Onboarding from '@src/types/onyx/Onboarding';

let onboardingInitialPath = '';
Expand All @@ -35,23 +34,12 @@ Onyx.connect({
},
});

let userAccount: Account;
Onyx.connect({
key: ONYXKEYS.ACCOUNT,
callback: (value) => {
if (value === undefined) {
return;
}
userAccount = value;
},
});

/**
* Start a new onboarding flow or continue from the last visited onboarding page.
*/
function startOnboardingFlow(isPrivateDomain?: boolean, onboardingValuesParam?: Onboarding) {
function startOnboardingFlow(isPrivateDomain?: boolean, onboardingValuesParam?: Onboarding, isUserFromPublicDomain?: boolean) {
const currentRoute = navigationRef.getCurrentRoute();
const adaptedState = getAdaptedStateFromPath(getOnboardingInitialPath(isPrivateDomain, onboardingValuesParam), linkingConfig.config, false);
const adaptedState = getAdaptedStateFromPath(getOnboardingInitialPath(isPrivateDomain, onboardingValuesParam, isUserFromPublicDomain), linkingConfig.config, false);
const focusedRoute = findFocusedRoute(adaptedState as PartialState<NavigationState<RootNavigatorParamList>>);
if (focusedRoute?.name === currentRoute?.name) {
return;
Expand All @@ -63,9 +51,8 @@ function startOnboardingFlow(isPrivateDomain?: boolean, onboardingValuesParam?:
} as PartialState<NavigationState>);
}

function getOnboardingInitialPath(isPrivateDomain?: boolean, onboardingValuesParam?: Onboarding): string {
function getOnboardingInitialPath(isPrivateDomain?: boolean, onboardingValuesParam?: Onboarding, isUserFromPublicDomain?: boolean): string {
const state = getStateFromPath(onboardingInitialPath, linkingConfig.config);
const isUserFromPublicDomain = userAccount?.isFromPublicDomain;
const currentOnboardingValues = onboardingValuesParam ?? onboardingValues;
const isVsb = currentOnboardingValues?.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.VSB;
const isSmb = currentOnboardingValues?.signupQualifier === CONST.ONBOARDING_SIGNUP_QUALIFIERS.SMB;
Expand All @@ -82,7 +69,7 @@ function getOnboardingInitialPath(isPrivateDomain?: boolean, onboardingValuesPar
if (isIndividual) {
Onyx.set(ONYXKEYS.ONBOARDING_CUSTOM_CHOICES, [CONST.ONBOARDING_CHOICES.PERSONAL_SPEND, CONST.ONBOARDING_CHOICES.EMPLOYER, CONST.ONBOARDING_CHOICES.CHAT_SPLIT]);
}
if (isUserFromPublicDomain && !currentOnboardingValues?.isMergeAccountStepCompleted) {
if (isUserFromPublicDomain && !onboardingValuesParam?.isMergeAccountStepCompleted) {
return `/${ROUTES.ONBOARDING_WORK_EMAIL.route}`;
}
if (isVsb) {
Expand Down
Loading