Skip to content

Commit ec3886f

Browse files
Refactor onboarding tasks and types into Welcome module; address review comments
1 parent 7777799 commit ec3886f

19 files changed

Lines changed: 314 additions & 80 deletions

File tree

src/CONST.ts

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import Config from 'react-native-config';
55
import * as KeyCommand from 'react-native-key-command';
66
import type {ValueOf} from 'type-fest';
77
import type ResponsiveLayoutResult from './hooks/useResponsiveLayout/types';
8-
import type {Video} from './libs/actions/Report';
98
import type {MileageRate} from './libs/DistanceRequestUtils';
109
import BankAccount from './libs/models/BankAccount';
1110
import {addTrailingForwardSlash} from './libs/Url';
@@ -121,9 +120,7 @@ const signupQualifiers = {
121120
SMB: 'smb',
122121
} as const;
123122

124-
type OnboardingPurpose = ValueOf<typeof onboardingChoices>;
125123

126-
type OnboardingCompanySize = ValueOf<typeof onboardingCompanySize>;
127124

128125
type OnboardingAccounting = keyof typeof CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY | null;
129126

@@ -143,41 +140,7 @@ const onboardingCompanySize = {
143140

144141
type OnboardingInvite = ValueOf<typeof onboardingInviteTypes>;
145142

146-
type OnboardingTaskLinks = Partial<{
147-
onboardingCompanySize: OnboardingCompanySize;
148-
integrationName: string;
149-
workspaceSettingsLink: string;
150-
workspaceCategoriesLink: string;
151-
workspaceMoreFeaturesLink: string;
152-
workspaceMembersLink: string;
153-
workspaceAccountingLink: string;
154-
workspaceConfirmationLink: string;
155-
navatticURL: string;
156-
testDriveURL: string;
157-
corporateCardLink: string;
158-
}>;
159-
160-
type OnboardingTask = {
161-
type: string;
162-
autoCompleted: boolean;
163-
mediaAttributes: Record<string, string>;
164-
title: string | ((params: OnboardingTaskLinks) => string);
165-
description: string | ((params: OnboardingTaskLinks) => string);
166-
};
167-
168-
type OnboardingMessage = {
169-
/** Text message that will be displayed first */
170-
message: string | ((params: OnboardingTaskLinks) => string);
171-
172-
/** Video object to be displayed after initial description message */
173-
video?: Video;
174143

175-
/** List of tasks connected with the message, they will have a checkbox and a separate report for more information */
176-
tasks: OnboardingTask[];
177-
178-
/** Type of task described in a string format */
179-
type?: string;
180-
};
181144

182145
const EMAIL_WITH_OPTIONAL_DOMAIN =
183146
/(?=((?=[\w'#%+-]+(?:\.[\w'#%+-]+)*@?)[\w.'#%+-]{1,64}(?:@(?:(?=[a-z\d]+(?:-+[a-z\d]+)*\.)(?:[a-z\d-]{1,63}\.)+[a-z]{2,63}))?(?= |_|\b))(?<end>.*))\S{3,254}(?=\k<end>$)/;
@@ -6824,18 +6787,14 @@ export type {
68246787
Country,
68256788
IOUAction,
68266789
IOUType,
6827-
OnboardingPurpose,
6828-
OnboardingCompanySize,
6829-
OnboardingTaskLinks,
6830-
OnboardingTask,
6790+
68316791
IOURequestType,
68326792
SubscriptionType,
68336793
FeedbackSurveyOptionID,
68346794
CancellationType,
68356795
OnboardingInvite,
68366796
OnboardingAccounting,
68376797
IOUActionParams,
6838-
OnboardingMessage,
68396798
};
68406799

68416800
export default CONST;

src/ONYXKEYS.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type {OnyxUpdate} from 'react-native-onyx';
22
import type {ValueOf} from 'type-fest';
3+
import type {OnboardingCompanySize} from '@libs/actions/Welcome/OnboardingFlow';
34
import type CONST from './CONST';
4-
import type {OnboardingCompanySize} from './CONST';
55
import type Platform from './libs/getPlatform/types';
66
import type * as FormTypes from './types/form';
77
import type * as OnyxTypes from './types/onyx';
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import {useMemo} from 'react';
22
import useLocalize from '@hooks/useLocalize';
3-
import getOnboardingMessages from '@libs/actions/Welcome/OnboardingFlowTasks';
3+
import {getOnboardingMessages} from '@libs/actions/Welcome/OnboardingFlow';
44

55
export default function useOnboardingMessages() {
6-
const {translate} = useLocalize();
6+
const {preferredLocale} = useLocalize();
7+
// Adding preferredLocale as dependency because getOnboardingMessages depends on the current locale
78
// eslint-disable-next-line react-compiler/react-compiler, react-hooks/exhaustive-deps
8-
const onboardingMessages = useMemo(() => getOnboardingMessages(), [translate]);
9+
const onboardingMessages = useMemo(() => getOnboardingMessages(), [preferredLocale]);
910
return onboardingMessages;
1011
}

src/languages/en.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import {CONST as COMMON_CONST} from 'expensify-common';
22
import startCase from 'lodash/startCase';
3+
import type {OnboardingCompanySize, OnboardingTask} from '@libs/actions/Welcome/OnboardingFlow';
34
import CONST from '@src/CONST';
4-
import type {Country, OnboardingCompanySize, OnboardingTask} from '@src/CONST';
5+
import type {Country} from '@src/CONST';
56
import type OriginalMessage from '@src/types/onyx/OriginalMessage';
67
import type {
78
AccountOwnerParams,

src/languages/es.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {CONST as COMMON_CONST} from 'expensify-common';
2+
import type {OnboardingCompanySize, OnboardingTask} from '@libs/actions/Welcome/OnboardingFlow';
23
import CONST from '@src/CONST';
3-
import type {OnboardingCompanySize, OnboardingTask} from '@src/CONST';
44
import type OriginalMessage from '@src/types/onyx/OriginalMessage';
55
import type en from './en';
66
import type {

src/libs/API/parameters/CompleteGuidedSetupParams.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import type {OnboardingAccounting, OnboardingCompanySize} from '@src/CONST';
1+
import type {OnboardingCompanySize} from '@libs/actions/Welcome/OnboardingFlow';
2+
import type {OnboardingAccounting} from '@src/CONST';
23
import type {OnboardingPurpose} from '@src/types/onyx';
34

45
type CompleteGuidedSetupParams = {

src/libs/OnboardingUtils.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import type {OnboardingAccounting, OnboardingCompanySize} from '@src/CONST';
1+
import type {OnboardingAccounting} from '@src/CONST';
22
import CONST from '@src/CONST';
3+
import type {OnboardingCompanySize} from './actions/Welcome/OnboardingFlow';
34
import getPlatform from './getPlatform';
45

56
const supportedIntegrationsInNewDot = ['quickbooksOnline', 'quickbooksDesktop', 'xero', 'netsuite', 'intacct', 'other'] as OnboardingAccounting[];

src/libs/ReportUtils.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {FallbackAvatar, IntacctSquare, NetSuiteSquare, QBOSquare, XeroSquare} fr
2424
import * as defaultGroupAvatars from '@components/Icon/GroupDefaultAvatars';
2525
import * as defaultWorkspaceAvatars from '@components/Icon/WorkspaceDefaultAvatars';
2626
import type {MoneyRequestAmountInputProps} from '@components/MoneyRequestAmountInput';
27-
import type {IOUAction, IOUType, OnboardingAccounting, OnboardingCompanySize, OnboardingPurpose, OnboardingTaskLinks} from '@src/CONST';
27+
import type {IOUAction, IOUType, OnboardingAccounting} from '@src/CONST';
2828
import CONST from '@src/CONST';
2929
import type {ParentNavigationSummaryParams} from '@src/languages/params';
3030
import type {TranslationPaths} from '@src/languages/types';
@@ -77,7 +77,8 @@ import {hasCreditBankAccount} from './actions/ReimbursementAccount/store';
7777
import {handleReportChanged} from './actions/Report';
7878
import type {GuidedSetupData, TaskForParameters} from './actions/Report';
7979
import {isAnonymousUser as isAnonymousUserSession} from './actions/Session';
80-
import getOnboardingMessages from './actions/Welcome/OnboardingFlowTasks';
80+
import {getOnboardingMessages} from './actions/Welcome/OnboardingFlow';
81+
import type {OnboardingCompanySize, OnboardingMessage, OnboardingPurpose, OnboardingTaskLinks} from './actions/Welcome/OnboardingFlow';
8182
import type {AddCommentOrAttachmentParams} from './API/parameters';
8283
import {convertToDisplayString} from './CurrencyUtils';
8384
import DateUtils from './DateUtils';
@@ -855,8 +856,6 @@ type GetReportNameParams = {
855856

856857
type ReportByPolicyMap = Record<string, Report[]>;
857858

858-
type OnboardingMessagesType = ValueOf<ReturnType<typeof getOnboardingMessages>['onboardingMessages']>;
859-
860859
let currentUserEmail: string | undefined;
861860
let currentUserPrivateDomain: string | undefined;
862861
let currentUserAccountID: number | undefined;
@@ -9831,22 +9830,21 @@ function canReportBeMentionedWithinPolicy(report: OnyxEntry<Report>, policyID: s
98319830
function prepareOnboardingOnyxData(
98329831
introSelected: OnyxEntry<IntroSelected>,
98339832
engagementChoice: OnboardingPurpose,
9834-
onboardingMessage: OnboardingMessagesType,
9833+
onboardingMessage: OnboardingMessage,
98359834
adminsChatReportID?: string,
98369835
onboardingPolicyID?: string,
98379836
userReportedIntegration?: OnboardingAccounting,
98389837
wasInvited?: boolean,
98399838
companySize?: OnboardingCompanySize,
98409839
) {
9841-
const {onboardingMessages} = getOnboardingMessages();
98429840
if (engagementChoice === CONST.ONBOARDING_CHOICES.PERSONAL_SPEND) {
98439841
// eslint-disable-next-line no-param-reassign
9844-
onboardingMessage = onboardingMessages[CONST.ONBOARDING_CHOICES.PERSONAL_SPEND];
9842+
onboardingMessage = getOnboardingMessages().onboardingMessages[CONST.ONBOARDING_CHOICES.PERSONAL_SPEND];
98459843
}
98469844

98479845
if (engagementChoice === CONST.ONBOARDING_CHOICES.EMPLOYER || engagementChoice === CONST.ONBOARDING_CHOICES.SUBMIT) {
98489846
// eslint-disable-next-line no-param-reassign
9849-
onboardingMessage = onboardingMessages[CONST.ONBOARDING_CHOICES.SUBMIT];
9847+
onboardingMessage = getOnboardingMessages().onboardingMessages[CONST.ONBOARDING_CHOICES.SUBMIT];
98509848
}
98519849

98529850
// Guides are assigned and tasks are posted in the #admins room for the MANAGE_TEAM and TRACK_WORKSPACE onboarding actions, except for emails that have a '+'.

src/libs/TourUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type {ValueOf} from 'type-fest';
22
import CONST from '@src/CONST';
3-
import type {OnboardingPurpose} from '@src/CONST';
3+
import type {OnboardingPurpose} from './actions/Welcome/OnboardingFlow';
44

55
function getNavatticURL(environment: ValueOf<typeof CONST.ENVIRONMENT>, introSelected?: OnboardingPurpose) {
66
const adminTourURL = environment === CONST.ENVIRONMENT.PRODUCTION ? CONST.NAVATTIC.ADMIN_TOUR_PRODUCTION : CONST.NAVATTIC.ADMIN_TOUR_STAGING;

src/libs/actions/IOU.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ import {buildInviteToRoomOnyxData, completeOnboarding, getCurrentUserAccountID,
228228
import {clearAllRelatedReportActionErrors} from './ReportActions';
229229
import {getRecentWaypoints, sanitizeRecentWaypoints} from './Transaction';
230230
import {removeDraftSplitTransaction, removeDraftTransaction, removeDraftTransactions} from './TransactionEdit';
231-
import getOnboardingMessages from './Welcome/OnboardingFlowTasks';
231+
import {getOnboardingMessages} from './Welcome/OnboardingFlow';
232232

233233
type IOURequestType = ValueOf<typeof CONST.IOU.REQUEST_TYPE>;
234234

@@ -5339,12 +5339,11 @@ function requestMoney(requestMoneyInformation: RequestMoneyInformation) {
53395339
}
53405340
default: {
53415341
// This is only required when inviting admins to test drive the app
5342-
const {onboardingMessages} = getOnboardingMessages();
53435342
const guidedSetupData: GuidedSetupData | undefined = isTestDrive
53445343
? prepareOnboardingOnyxData(
53455344
{choice: CONST.ONBOARDING_CHOICES.TEST_DRIVE_RECEIVER},
53465345
CONST.ONBOARDING_CHOICES.TEST_DRIVE_RECEIVER,
5347-
onboardingMessages[CONST.ONBOARDING_CHOICES.TEST_DRIVE_RECEIVER],
5346+
getOnboardingMessages().onboardingMessages[CONST.ONBOARDING_CHOICES.TEST_DRIVE_RECEIVER],
53485347
)?.guidedSetupData
53495348
: undefined;
53505349

0 commit comments

Comments
 (0)