Skip to content
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
20 changes: 16 additions & 4 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -925,10 +925,22 @@ const ROUTES = {
TRAVEL_MY_TRIPS: 'travel',
TRAVEL_TCS: 'travel/terms',
TRACK_TRAINING_MODAL: 'track-training',
ONBOARDING_ROOT: 'onboarding',
ONBOARDING_PERSONAL_DETAILS: 'onboarding/personal-details',
ONBOARDING_WORK: 'onboarding/work',
ONBOARDING_PURPOSE: 'onboarding/purpose',
ONBOARDING_ROOT: {
route: 'onboarding',
getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding`, backTo),
},
ONBOARDING_PERSONAL_DETAILS: {
route: 'onboarding/personal-details',
getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/personal-details`, backTo),
},
ONBOARDING_WORK: {
route: 'onboarding/work',
getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/work`, backTo),
},
ONBOARDING_PURPOSE: {
route: 'onboarding/purpose',
getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/purpose`, backTo),
},
WELCOME_VIDEO_ROOT: 'onboarding/welcome-video',
EXPLANATION_MODAL_ROOT: 'onboarding/explanation',

Expand Down
2 changes: 1 addition & 1 deletion src/components/ExplanationModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ function ExplanationModal() {
onNotCompleted: () => {
setTimeout(() => {
Navigation.isNavigationReady().then(() => {
Navigation.navigate(ROUTES.ONBOARDING_ROOT);
Navigation.navigate(ROUTES.ONBOARDING_ROOT.route);
});
}, variables.welcomeVideoDelay);
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ function BottomTabBar({selectedTab}: BottomTabBarProps) {

Welcome.isOnboardingFlowCompleted({
onNotCompleted: () => {
const {adaptedState} = getAdaptedStateFromPath(ROUTES.ONBOARDING_ROOT, linkingConfig.config);
const {adaptedState} = getAdaptedStateFromPath(ROUTES.ONBOARDING_ROOT.route, linkingConfig.config);
navigationRef.resetRoot(adaptedState);
},
});
Expand Down
2 changes: 1 addition & 1 deletion src/libs/Navigation/NavigationRoot.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ function NavigationRoot({authenticated, lastVisitedPath, initialUrl, onReady}: N
// If the user haven't completed the flow, we want to always redirect them to the onboarding flow.
// We also make sure that the user is authenticated.
if (!hasCompletedGuidedSetupFlow && authenticated) {
const {adaptedState} = getAdaptedStateFromPath(ROUTES.ONBOARDING_ROOT, linkingConfig.config);
const {adaptedState} = getAdaptedStateFromPath(ROUTES.ONBOARDING_ROOT.route, linkingConfig.config);
return adaptedState;
}

Expand Down
8 changes: 4 additions & 4 deletions src/libs/Navigation/linkingConfig/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,19 +108,19 @@ const config: LinkingOptions<RootStackParamList>['config'] = {
},
},
[NAVIGATORS.ONBOARDING_MODAL_NAVIGATOR]: {
path: ROUTES.ONBOARDING_ROOT,
path: ROUTES.ONBOARDING_ROOT.route,
initialRouteName: SCREENS.ONBOARDING.PURPOSE,
screens: {
[SCREENS.ONBOARDING.PURPOSE]: {
path: ROUTES.ONBOARDING_PURPOSE,
path: ROUTES.ONBOARDING_PURPOSE.route,
exact: true,
},
[SCREENS.ONBOARDING.PERSONAL_DETAILS]: {
path: ROUTES.ONBOARDING_PERSONAL_DETAILS,
path: ROUTES.ONBOARDING_PERSONAL_DETAILS.route,
exact: true,
},
[SCREENS.ONBOARDING.WORK]: {
path: ROUTES.ONBOARDING_WORK,
path: ROUTES.ONBOARDING_WORK.route,
exact: true,
},
},
Expand Down
16 changes: 12 additions & 4 deletions src/libs/Navigation/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1158,10 +1158,18 @@ type FullScreenNavigatorParamList = {
};

type OnboardingModalNavigatorParamList = {
[SCREENS.ONBOARDING_MODAL.ONBOARDING]: undefined;
[SCREENS.ONBOARDING.PERSONAL_DETAILS]: undefined;
[SCREENS.ONBOARDING.PURPOSE]: undefined;
[SCREENS.ONBOARDING.WORK]: undefined;
[SCREENS.ONBOARDING_MODAL.ONBOARDING]: {
backTo?: string;
};
[SCREENS.ONBOARDING.PERSONAL_DETAILS]: {
backTo?: string;
};
[SCREENS.ONBOARDING.PURPOSE]: {
backTo?: string;
};
[SCREENS.ONBOARDING.WORK]: {
backTo?: string;
};
};

type WelcomeVideoModalNavigatorParamList = {
Expand Down
2 changes: 1 addition & 1 deletion src/libs/actions/Welcome.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ function handleHybridAppOnboarding() {
isOnboardingFlowCompleted({
onNotCompleted: () =>
setTimeout(() => {
Navigation.navigate(ROUTES.ONBOARDING_ROOT);
Navigation.navigate(ROUTES.ONBOARDING_ROOT.route);
}, variables.explanationModalDelay),
}),
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ function BaseOnboardingPersonalDetails({
onboardingPurposeSelected,
onboardingAdminsChatReportID,
onboardingPolicyID,
route,
}: BaseOnboardingPersonalDetailsProps) {
const styles = useThemeStyles();
const {translate} = useLocalize();
Expand Down Expand Up @@ -78,7 +79,7 @@ function BaseOnboardingPersonalDetails({

// Only navigate to concierge chat when central pane is visible
// Otherwise stay on the chats screen.
if (!isSmallScreenWidth) {
if (!isSmallScreenWidth && !route.params?.backTo) {
if (AccountUtils.isAccountIDOddNumber(accountID ?? 0)) {
Report.navigateToSystemChat();
} else {
Expand All @@ -92,7 +93,7 @@ function BaseOnboardingPersonalDetails({
Navigation.navigate(ROUTES.WELCOME_VIDEO_ROOT);
}, variables.welcomeVideoDelay);
},
[onboardingPurposeSelected, onboardingAdminsChatReportID, onboardingPolicyID, isSmallScreenWidth, accountID],
[onboardingPurposeSelected, onboardingAdminsChatReportID, onboardingPolicyID, isSmallScreenWidth, route.params?.backTo, accountID],
);

const validate = (values: FormOnyxValues<'onboardingPersonalDetailsForm'>) => {
Expand Down
2 changes: 1 addition & 1 deletion src/pages/OnboardingPersonalDetails/index.native.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import BaseOnboardingPersonalDetails from './BaseOnboardingPersonalDetails';
import type {OnboardingPersonalDetailsProps} from './types';

function OnboardingPersonalDetails({...rest}: Omit<OnboardingPersonalDetailsProps, 'shouldUseNativeStyles'>) {
function OnboardingPersonalDetails({...rest}: OnboardingPersonalDetailsProps) {
return (
<BaseOnboardingPersonalDetails
shouldUseNativeStyles
Expand Down
2 changes: 1 addition & 1 deletion src/pages/OnboardingPersonalDetails/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import useThemeStyles from '@hooks/useThemeStyles';
import BaseOnboardingPersonalDetails from './BaseOnboardingPersonalDetails';
import type {OnboardingPersonalDetailsProps} from './types';

function OnboardingPersonalDetails({...rest}: Omit<OnboardingPersonalDetailsProps, 'shouldUseNativeStyles'>) {
function OnboardingPersonalDetails({...rest}: OnboardingPersonalDetailsProps) {
const styles = useThemeStyles();

return (
Expand Down
8 changes: 7 additions & 1 deletion src/pages/OnboardingPersonalDetails/types.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import type {RouteProp} from '@react-navigation/native';
import type {StackScreenProps} from '@react-navigation/stack';
import type {OnyxEntry} from 'react-native-onyx';
import type {WithCurrentUserPersonalDetailsProps} from '@components/withCurrentUserPersonalDetails';
import type {OnboardingModalNavigatorParamList} from '@libs/Navigation/types';
import type {OnboardingPurposeType} from '@src/CONST';
import type SCREENS from '@src/SCREENS';

type OnboardingPersonalDetailsProps = Record<string, unknown>;
type OnboardingPersonalDetailsProps = Record<string, unknown> & StackScreenProps<OnboardingModalNavigatorParamList, typeof SCREENS.ONBOARDING.PERSONAL_DETAILS>;

type BaseOnboardingPersonalDetailsOnyxProps = {
/** Saved onboarding purpose selected by the user */
Expand All @@ -19,6 +23,8 @@ type BaseOnboardingPersonalDetailsProps = WithCurrentUserPersonalDetailsProps &
BaseOnboardingPersonalDetailsOnyxProps & {
/* Whether to use native styles tailored for native devices */
shouldUseNativeStyles: boolean;

route: RouteProp<OnboardingModalNavigatorParamList, typeof SCREENS.ONBOARDING.PERSONAL_DETAILS>;
};

export type {OnboardingPersonalDetailsProps, BaseOnboardingPersonalDetailsOnyxProps, BaseOnboardingPersonalDetailsProps};
9 changes: 4 additions & 5 deletions src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ const menuIcons = {
[CONST.ONBOARDING_CHOICES.LOOKING_AROUND]: Illustrations.Binoculars,
};

function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight}: BaseOnboardingPurposeProps) {
function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight, route}: BaseOnboardingPurposeProps) {
const styles = useThemeStyles();
const {translate} = useLocalize();
const {shouldUseNarrowLayout} = useOnboardingLayout();
Expand Down Expand Up @@ -76,12 +76,11 @@ function BaseOnboardingPurpose({shouldUseNativeStyles, shouldEnableMaxHeight}: B
}

if (selectedPurpose === CONST.ONBOARDING_CHOICES.MANAGE_TEAM) {
Navigation.navigate(ROUTES.ONBOARDING_WORK);
Navigation.navigate(ROUTES.ONBOARDING_WORK.getRoute(route.params?.backTo));
return;
}

Navigation.navigate(ROUTES.ONBOARDING_PERSONAL_DETAILS);
}, [selectedPurpose]);
Navigation.navigate(ROUTES.ONBOARDING_PERSONAL_DETAILS.getRoute(route.params?.backTo));
}, [selectedPurpose, route]);

const menuItems: MenuItemProps[] = Object.values(CONST.ONBOARDING_CHOICES).map((choice) => {
const translationKey = `onboarding.purpose.${choice}` as const;
Expand Down
6 changes: 5 additions & 1 deletion src/pages/OnboardingPurpose/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
type OnboardingPurposeProps = Record<string, unknown>;
import type {StackScreenProps} from '@react-navigation/stack';
import type {OnboardingModalNavigatorParamList} from '@libs/Navigation/types';
import type SCREENS from '@src/SCREENS';

type OnboardingPurposeProps = Record<string, unknown> & StackScreenProps<OnboardingModalNavigatorParamList, typeof SCREENS.ONBOARDING.PURPOSE>;

type BaseOnboardingPurposeProps = OnboardingPurposeProps & {
/* Whether to use native styles tailored for native devices */
Expand Down
6 changes: 3 additions & 3 deletions src/pages/OnboardingWork/BaseOnboardingWork.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import type {BaseOnboardingWorkOnyxProps, BaseOnboardingWorkProps} from './types

const OPEN_WORK_PAGE_PURPOSES = [CONST.ONBOARDING_CHOICES.MANAGE_TEAM];

function BaseOnboardingWork({shouldUseNativeStyles, onboardingPurposeSelected, onboardingPolicyID}: BaseOnboardingWorkProps) {
function BaseOnboardingWork({shouldUseNativeStyles, onboardingPurposeSelected, onboardingPolicyID, route}: BaseOnboardingWorkProps) {
const styles = useThemeStyles();
const {translate} = useLocalize();
const {isSmallScreenWidth} = useWindowDimensions();
Expand All @@ -46,9 +46,9 @@ function BaseOnboardingWork({shouldUseNativeStyles, onboardingPurposeSelected, o
Policy.updateGeneralSettings(onboardingPolicyID, work);
}

Navigation.navigate(ROUTES.ONBOARDING_PERSONAL_DETAILS);
Navigation.navigate(ROUTES.ONBOARDING_PERSONAL_DETAILS.getRoute(route.params?.backTo));
},
[onboardingPurposeSelected, onboardingPolicyID],
[onboardingPurposeSelected, onboardingPolicyID, route.params?.backTo],
);

const validate = (values: FormOnyxValues<'onboardingWorkForm'>) => {
Expand Down
14 changes: 9 additions & 5 deletions src/pages/OnboardingWork/types.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import type {StackScreenProps} from '@react-navigation/stack';
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<string, unknown>;
type OnboardingWorkProps = Record<string, unknown> & StackScreenProps<OnboardingModalNavigatorParamList, typeof SCREENS.ONBOARDING.WORK>;

type BaseOnboardingWorkOnyxProps = {
/** Saved onboarding purpose selected by the user */
Expand All @@ -11,9 +14,10 @@ type BaseOnboardingWorkOnyxProps = {
onboardingPolicyID: OnyxEntry<string>;
};

type BaseOnboardingWorkProps = BaseOnboardingWorkOnyxProps & {
/* Whether to use native styles tailored for native devices */
shouldUseNativeStyles: boolean;
};
type BaseOnboardingWorkProps = OnboardingWorkProps &
BaseOnboardingWorkOnyxProps & {
/* Whether to use native styles tailored for native devices */
shouldUseNativeStyles: boolean;
};

export type {OnboardingWorkProps, BaseOnboardingWorkOnyxProps, BaseOnboardingWorkProps};