Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
0df385d
fix: Color: Onboarding: The status of the progress bar relies only on…
TaduJR Jan 31, 2026
5eef408
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Feb 13, 2026
9256e59
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Feb 13, 2026
a2cda96
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Feb 14, 2026
b860377
feat: add step counter to onboarding progress bar for screen readers
TaduJR Feb 14, 2026
4e14d1e
fix: missing sentryLabel
TaduJR Feb 14, 2026
16007f3
fix: use aria-* props instead of accessibilityValue for progress bar …
TaduJR Feb 14, 2026
30add25
fix: remove numeric aria-value props from progress bar to only announ…
TaduJR Feb 14, 2026
dd325c4
refactor: extract onboarding step counter magic numbers to CONST.ONBO…
TaduJR Feb 14, 2026
1fb664d
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Feb 27, 2026
6c36c57
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Feb 28, 2026
15da26b
fix: remove duplicate sentryLabel prop in BaseOnboardingAccounting
TaduJR Feb 28, 2026
9c253e6
fix: replace hardcoded onboarding step counters with dynamic flow-bas…
TaduJR Feb 28, 2026
59501b7
fix: make work email validation and private domain distinct onboardin…
TaduJR Feb 28, 2026
d88b8c8
fix: make WORK_EMAIL_VALIDATION and PRIVATE_DOMAIN distinct onboardin…
TaduJR Feb 28, 2026
4e22df8
fix: support public-domain merge flow and ensure monotonic onboarding…
TaduJR Feb 28, 2026
0cb6855
fix: exclude skipped validation screens from onboarding step counters
TaduJR Mar 1, 2026
7059b0f
fix: support public-domain merge flow in onboarding step counters
TaduJR Mar 1, 2026
ba0fdb2
refactor: use SCREENS constants and consolidate redundant tests in ge…
TaduJR Mar 1, 2026
ba6901b
refactor: enforce compile-time exhaustiveness with Record types and c…
TaduJR Mar 1, 2026
a3fa4e3
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Mar 4, 2026
4e63ead
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Mar 4, 2026
5822905
fix: add accessible prop to progress bar
TaduJR Mar 4, 2026
f6d9af5
fix: add cross-platform screen reader support for onboarding progress…
TaduJR Mar 4, 2026
431f082
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Mar 8, 2026
08567a7
fix: exclude WORK_EMAIL_VALIDATION from step counter when user skips …
TaduJR Mar 8, 2026
a497d37
refactor: use typed platform-specific files for progress bar a11y props
TaduJR Mar 8, 2026
86263db
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Mar 10, 2026
9ed4d75
fix: prevent screenReaderOnly text from blocking clicks and showing V…
TaduJR Mar 10, 2026
304b242
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Mar 12, 2026
d6ea4b5
fix: use progressbar role and aria-hidden for progress bar accessibility
TaduJR Mar 12, 2026
f242bc5
chore: CI restart
TaduJR Mar 12, 2026
5d33519
fix: add progressbar role with aria-value attributes and hide fill fr…
TaduJR Mar 12, 2026
98ff96f
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Mar 13, 2026
5945ad8
fix: use aria-valuetext on progressbar to announce step instead of pe…
TaduJR Mar 13, 2026
4c2fe9c
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Mar 13, 2026
3d454e6
Merge branch 'main' of https://github.com/TaduJR/App into fix-Color-O…
TaduJR Mar 18, 2026
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
14 changes: 12 additions & 2 deletions src/components/HeaderWithBackButton/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -103,15 +103,25 @@ function HeaderWithBackButton({

const middleContent = useMemo(() => {
if (progressBarPercentage) {
const progressBarLabel = stepCounter ? `${translate('common.progressBarLabel')}, ${translate('stepCounter', stepCounter)}` : undefined;
return (
<>
{/* Reserves as much space for the middleContent as possible */}
<View style={styles.flexGrow1} />
{/* Uses absolute positioning so that it's always centered instead of being affected by the
presence or absence of back/close buttons to the left/right of it */}
<View style={styles.headerProgressBarContainer}>
<View style={styles.headerProgressBar}>
<View style={[{width: `${progressBarPercentage}%`}, styles.headerProgressBarFill]} />
<View
style={styles.headerProgressBar}
accessible={!!progressBarLabel}
accessibilityLabel={progressBarLabel}
role={CONST.ROLE.PROGRESSBAR}
aria-valuetext={progressBarLabel}
>
<View
aria-hidden
style={[{width: `${progressBarPercentage}%`}, styles.headerProgressBarFill]}
/>
</View>
</View>
</>
Expand Down
20 changes: 20 additions & 0 deletions src/hooks/useOnboardingStepCounter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import {getOnboardingStepCounter} from '@libs/getOnboardingStepCounter';
import type {OnboardingScreen, OnboardingStepResult} from '@libs/getOnboardingStepCounter';
import ONYXKEYS from '@src/ONYXKEYS';
import useOnyx from './useOnyx';

function useOnboardingStepCounter(page: OnboardingScreen): OnboardingStepResult | undefined {
const [onboarding] = useOnyx(ONYXKEYS.NVP_ONBOARDING);
const [purposeSelected] = useOnyx(ONYXKEYS.ONBOARDING_PURPOSE_SELECTED);
const [account] = useOnyx(ONYXKEYS.ACCOUNT);

return getOnboardingStepCounter(page, {
signupQualifier: onboarding?.signupQualifier,
isFromPublicDomain: account?.isFromPublicDomain,
hasAccessibleDomainPolicies: account?.hasAccessibleDomainPolicies,
purposeSelected: purposeSelected ?? undefined,
isMergeAccountStepSkipped: onboarding?.isMergeAccountStepSkipped,
});
}

export default useOnboardingStepCounter;
1 change: 1 addition & 0 deletions src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ const translations: TranslationDeepObject<typeof en> = {
conjunctionTo: 'bis',
genericErrorMessage: 'Ups ... etwas ist schiefgelaufen und Ihre Anfrage konnte nicht abgeschlossen werden. Bitte versuchen Sie es später noch einmal.',
percentage: 'Prozentsatz',
progressBarLabel: 'Onboarding-Fortschritt',
converted: 'Umgewandelt',
error: {
invalidAmount: 'Ungültiger Betrag',
Expand Down
1 change: 1 addition & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ const translations = {
conjunctionTo: 'to',
genericErrorMessage: 'Oops... something went wrong and your request could not be completed. Please try again later.',
percentage: 'Percentage',
progressBarLabel: 'Onboarding progress',
converted: 'Converted',
error: {
invalidAmount: 'Invalid amount',
Expand Down
1 change: 1 addition & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ const translations: TranslationDeepObject<typeof en> = {
conjunctionTo: 'a',
genericErrorMessage: 'Ups... algo no ha ido bien y la acción no se ha podido completar. Por favor, inténtalo más tarde.',
percentage: 'Porcentaje',
progressBarLabel: 'Progreso de incorporación',
converted: 'Convertido',
error: {
invalidAmount: 'Importe no válido',
Expand Down
1 change: 1 addition & 0 deletions src/languages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ const translations: TranslationDeepObject<typeof en> = {
conjunctionTo: 'à',
genericErrorMessage: 'Oups... une erreur s’est produite et votre requête n’a pas pu être effectuée. Veuillez réessayer plus tard.',
percentage: 'Pourcentage',
progressBarLabel: "Progression de l'intégration",
converted: 'Converti',
error: {
invalidAmount: 'Montant invalide',
Expand Down
1 change: 1 addition & 0 deletions src/languages/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ const translations: TranslationDeepObject<typeof en> = {
conjunctionTo: 'a',
genericErrorMessage: 'Ops... qualcosa è andato storto e la tua richiesta non può essere completata. Riprova più tardi.',
percentage: 'Percentuale',
progressBarLabel: 'Progresso onboarding',
converted: 'Convertito',
error: {
invalidAmount: 'Importo non valido',
Expand Down
1 change: 1 addition & 0 deletions src/languages/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ const translations: TranslationDeepObject<typeof en> = {
conjunctionTo: '宛先',
genericErrorMessage: 'おっと…問題が発生したため、リクエストを完了できませんでした。時間をおいてもう一度お試しください。',
percentage: 'パーセンテージ',
progressBarLabel: 'オンボーディング進捗',
converted: '変換済み',
error: {
invalidAmount: '金額が無効です',
Expand Down
1 change: 1 addition & 0 deletions src/languages/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ const translations: TranslationDeepObject<typeof en> = {
conjunctionTo: 'naar',
genericErrorMessage: 'Oeps... er is iets misgegaan en je verzoek kon niet worden voltooid. Probeer het later opnieuw.',
percentage: 'Percentage',
progressBarLabel: 'Voortgang onboarding',
converted: 'Geconverteerd',
error: {
invalidAmount: 'Ongeldig bedrag',
Expand Down
1 change: 1 addition & 0 deletions src/languages/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ const translations: TranslationDeepObject<typeof en> = {
conjunctionTo: 'do',
genericErrorMessage: 'Ups... coś poszło nie tak i Twoje żądanie nie mogło zostać zrealizowane. Spróbuj ponownie później.',
percentage: 'Procent',
progressBarLabel: 'Postęp wdrożenia',
converted: 'Przekonwertowano',
error: {
invalidAmount: 'Nieprawidłowa kwota',
Expand Down
1 change: 1 addition & 0 deletions src/languages/pt-BR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ const translations: TranslationDeepObject<typeof en> = {
conjunctionTo: 'para',
genericErrorMessage: 'Ops... algo deu errado e sua solicitação não pôde ser concluída. Tente novamente mais tarde.',
percentage: 'Porcentagem',
progressBarLabel: 'Progresso da integração',
converted: 'Convertido',
error: {
invalidAmount: 'Valor inválido',
Expand Down
1 change: 1 addition & 0 deletions src/languages/zh-hans.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ const translations: TranslationDeepObject<typeof en> = {
conjunctionTo: '至',
genericErrorMessage: '哎呀……出现问题,无法完成您的请求。请稍后重试。',
percentage: '百分比',
progressBarLabel: '入门进度',
converted: '已转换',
error: {
invalidAmount: '金额无效',
Expand Down
136 changes: 136 additions & 0 deletions src/libs/getOnboardingStepCounter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
import type {ValueOf} from 'type-fest';
import CONST from '@src/CONST';
import type {StepCounterParams} from '@src/languages/params';
import SCREENS from '@src/SCREENS';

type OnboardingScreen = ValueOf<typeof SCREENS.ONBOARDING>;

type OnboardingFlowContext = {
signupQualifier?: ValueOf<typeof CONST.ONBOARDING_SIGNUP_QUALIFIERS>;
isFromPublicDomain?: boolean;
hasAccessibleDomainPolicies?: boolean;
purposeSelected?: ValueOf<typeof CONST.ONBOARDING_CHOICES>;
isMergeAccountStepSkipped?: boolean;
};

type OnboardingStepResult = {
stepCounter: StepCounterParams;
progressBarPercentage: number;
};

const {ONBOARDING} = SCREENS;
const {ONBOARDING_CHOICES, ONBOARDING_SIGNUP_QUALIFIERS} = CONST;

const screenResolution: Record<OnboardingScreen, OnboardingScreen> = {
[ONBOARDING.WORK_EMAIL]: ONBOARDING.WORK_EMAIL,
[ONBOARDING.WORK_EMAIL_VALIDATION]: ONBOARDING.WORK_EMAIL_VALIDATION,
[ONBOARDING.PRIVATE_DOMAIN]: ONBOARDING.PRIVATE_DOMAIN,
[ONBOARDING.PERSONAL_DETAILS]: ONBOARDING.PERSONAL_DETAILS,
[ONBOARDING.WORKSPACES]: ONBOARDING.WORKSPACES,
[ONBOARDING.PURPOSE]: ONBOARDING.PURPOSE,
[ONBOARDING.EMPLOYEES]: ONBOARDING.EMPLOYEES,
[ONBOARDING.ACCOUNTING]: ONBOARDING.ACCOUNTING,
[ONBOARDING.INTERESTED_FEATURES]: ONBOARDING.INTERESTED_FEATURES,
[ONBOARDING.WORKSPACE_OPTIONAL]: ONBOARDING.WORKSPACE_OPTIONAL,
[ONBOARDING.WORKSPACE_CONFIRMATION]: ONBOARDING.WORKSPACE_OPTIONAL,
[ONBOARDING.WORKSPACE_CURRENCY]: ONBOARDING.WORKSPACE_OPTIONAL,
[ONBOARDING.WORKSPACE_INVITE]: ONBOARDING.WORKSPACE_OPTIONAL,
};

// Screens that follow PURPOSE. For private domain users, PERSONAL_DETAILS is filtered out.
const purposeSuffixes = {
[ONBOARDING_CHOICES.MANAGE_TEAM]: [ONBOARDING.EMPLOYEES, ONBOARDING.ACCOUNTING, ONBOARDING.INTERESTED_FEATURES],
[ONBOARDING_CHOICES.PERSONAL_SPEND]: [ONBOARDING.PERSONAL_DETAILS, ONBOARDING.WORKSPACE_OPTIONAL],
[ONBOARDING_CHOICES.TRACK_WORKSPACE]: [ONBOARDING.PERSONAL_DETAILS, ONBOARDING.WORKSPACE_OPTIONAL],
[ONBOARDING_CHOICES.EMPLOYER]: [ONBOARDING.PERSONAL_DETAILS],
[ONBOARDING_CHOICES.CHAT_SPLIT]: [ONBOARDING.PERSONAL_DETAILS],
[ONBOARDING_CHOICES.LOOKING_AROUND]: [ONBOARDING.PERSONAL_DETAILS],
[ONBOARDING_CHOICES.ADMIN]: [ONBOARDING.PERSONAL_DETAILS],
[ONBOARDING_CHOICES.SUBMIT]: [ONBOARDING.PERSONAL_DETAILS],
[ONBOARDING_CHOICES.TEST_DRIVE_RECEIVER]: [ONBOARDING.PERSONAL_DETAILS],
} satisfies Record<ValueOf<typeof ONBOARDING_CHOICES>, OnboardingScreen[]>;

// VSB/SMB have fixed suffixes; individual (null) is handled via purposeSuffixes.
const qualifierSuffixes = {
[ONBOARDING_SIGNUP_QUALIFIERS.VSB]: [ONBOARDING.ACCOUNTING, ONBOARDING.INTERESTED_FEATURES],
[ONBOARDING_SIGNUP_QUALIFIERS.SMB]: [ONBOARDING.EMPLOYEES, ONBOARDING.ACCOUNTING, ONBOARDING.INTERESTED_FEATURES],
[ONBOARDING_SIGNUP_QUALIFIERS.INDIVIDUAL]: null,
} satisfies Record<ValueOf<typeof ONBOARDING_SIGNUP_QUALIFIERS>, OnboardingScreen[] | null>;

const maxSuffixLength = Math.max(...Object.values(purposeSuffixes).map((s) => s.length));
const maxPrivateSuffixLength = Math.max(...Object.values(purposeSuffixes).map((s) => s.filter((p) => p !== ONBOARDING.PERSONAL_DETAILS).length));

function getResolvedPage(page: OnboardingScreen, context: OnboardingFlowContext): OnboardingScreen {
// In public domain flows, PRIVATE_DOMAIN is used as a variant of WORK_EMAIL_VALIDATION
if (page === ONBOARDING.PRIVATE_DOMAIN && context.isFromPublicDomain) {
return ONBOARDING.WORK_EMAIL_VALIDATION;
}
return screenResolution[page];
}

function getDomainPrefix(context: OnboardingFlowContext): OnboardingScreen[] {
if (context.isFromPublicDomain) {
if (context.isMergeAccountStepSkipped === false) {
return [ONBOARDING.WORK_EMAIL, ONBOARDING.WORK_EMAIL_VALIDATION, ONBOARDING.WORKSPACES];
}
// User skipped the work email step — they never see WORK_EMAIL_VALIDATION
if (context.isMergeAccountStepSkipped === true) {
return [ONBOARDING.WORK_EMAIL];
}
return [ONBOARDING.WORK_EMAIL, ONBOARDING.WORK_EMAIL_VALIDATION];
}
if (context.hasAccessibleDomainPolicies) {
return [ONBOARDING.PERSONAL_DETAILS, ONBOARDING.PRIVATE_DOMAIN, ONBOARDING.WORKSPACES];
}
return [];
}

function getOnboardingFlow(context: OnboardingFlowContext): OnboardingScreen[] | undefined {
const prefix = getDomainPrefix(context);
const isPrivateDomain = !context.isFromPublicDomain && !!context.hasAccessibleDomainPolicies;

const qualifierSuffix = context.signupQualifier ? qualifierSuffixes[context.signupQualifier] : null;
if (qualifierSuffix) {
return [...prefix, ...qualifierSuffix];
}

if (!context.purposeSelected) {
return undefined;
}

const suffix = purposeSuffixes[context.purposeSelected];
const adjustedSuffix = isPrivateDomain ? suffix.filter((s) => s !== ONBOARDING.PERSONAL_DETAILS) : suffix;
return [...prefix, ONBOARDING.PURPOSE, ...adjustedSuffix];
}

function getOnboardingStepCounter(page: OnboardingScreen, context: OnboardingFlowContext): OnboardingStepResult | undefined {
const resolvedPage = getResolvedPage(page, context);
const flow = getOnboardingFlow(context);

if (!flow) {
const prefix = getDomainPrefix(context);
const knownScreens = [...prefix, ONBOARDING.PURPOSE];
const index = knownScreens.indexOf(resolvedPage);
if (index === -1) {
return undefined;
}
const isPrivateDomain = !context.isFromPublicDomain && !!context.hasAccessibleDomainPolicies;
const maxFlowLength = prefix.length + 1 + (isPrivateDomain ? maxPrivateSuffixLength : maxSuffixLength);
return {
stepCounter: {step: index + 1},
progressBarPercentage: Math.round(((index + 1) / maxFlowLength) * 100),
};
}

const index = flow.indexOf(resolvedPage);
if (index === -1) {
return undefined;
}
return {
stepCounter: {step: index + 1, total: flow.length},
progressBarPercentage: Math.round(((index + 1) / flow.length) * 100),
};
}

export {getOnboardingFlow, getOnboardingStepCounter};
export type {OnboardingFlowContext, OnboardingScreen, OnboardingStepResult};
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import type {ListItem} from '@components/SelectionListWithSections/types';
import Text from '@components/Text';
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import useOnboardingStepCounter from '@hooks/useOnboardingStepCounter';
import useOnyx from '@hooks/useOnyx';
import useResponsiveLayout from '@hooks/useResponsiveLayout';
import useStyleUtils from '@hooks/useStyleUtils';
Expand All @@ -27,6 +28,7 @@ import CONST from '@src/CONST';
import type {TranslationPaths} from '@src/languages/types';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import SCREENS from '@src/SCREENS';
import type IconAsset from '@src/types/utils/IconAsset';
import type {BaseOnboardingAccountingProps} from './types';

Expand Down Expand Up @@ -107,6 +109,7 @@ function BaseOnboardingAccounting({shouldUseNativeStyles, route}: BaseOnboarding
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
const [session] = useOnyx(ONYXKEYS.SESSION);
const [onboardingUserReportedIntegration] = useOnyx(ONYXKEYS.ONBOARDING_USER_REPORTED_INTEGRATION);
const onboardingStep = useOnboardingStepCounter(SCREENS.ONBOARDING.ACCOUNTING);

const [userReportedIntegration, setUserReportedIntegration] = useState<OnboardingAccounting | undefined>(onboardingUserReportedIntegration ?? undefined);
const [error, setError] = useState('');
Expand Down Expand Up @@ -243,7 +246,8 @@ function BaseOnboardingAccounting({shouldUseNativeStyles, route}: BaseOnboarding
>
<HeaderWithBackButton
shouldShowBackButton={!isVsb}
progressBarPercentage={80}
stepCounter={onboardingStep?.stepCounter}
progressBarPercentage={onboardingStep?.progressBarPercentage}
onBackButtonPress={() => Navigation.goBack(ROUTES.ONBOARDING_EMPLOYEES.getRoute())}
shouldDisplayHelpButton={false}
/>
Expand Down
7 changes: 5 additions & 2 deletions src/pages/OnboardingEmployees/BaseOnboardingEmployees.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import RadioListItem from '@components/SelectionList/ListItem/RadioListItem';
import type {ListItem} from '@components/SelectionList/types';
import Text from '@components/Text';
import useLocalize from '@hooks/useLocalize';
import useOnboardingStepCounter from '@hooks/useOnboardingStepCounter';
import useOnyx from '@hooks/useOnyx';
import useResponsiveLayout from '@hooks/useResponsiveLayout';
import useThemeStyles from '@hooks/useThemeStyles';
Expand All @@ -17,6 +18,7 @@ import {setOnboardingCompanySize} from '@userActions/Welcome';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import SCREENS from '@src/SCREENS';
import type {BaseOnboardingEmployeesProps} from './types';

type OnboardingListItem = ListItem & {
Expand All @@ -26,9 +28,9 @@ function BaseOnboardingEmployees({shouldUseNativeStyles, route}: BaseOnboardingE
const styles = useThemeStyles();
const {translate} = useLocalize();
const [onboardingCompanySize] = useOnyx(ONYXKEYS.ONBOARDING_COMPANY_SIZE);
const [onboardingPurposeSelected] = useOnyx(ONYXKEYS.ONBOARDING_PURPOSE_SELECTED);

const {onboardingIsMediumOrLargerScreenWidth} = useResponsiveLayout();
const onboardingStep = useOnboardingStepCounter(SCREENS.ONBOARDING.EMPLOYEES);
const [selectedCompanySize, setSelectedCompanySize] = useState<OnboardingCompanySize | null | undefined>(onboardingCompanySize);
const [error, setError] = useState('');

Expand Down Expand Up @@ -80,7 +82,8 @@ function BaseOnboardingEmployees({shouldUseNativeStyles, route}: BaseOnboardingE
>
<HeaderWithBackButton
shouldShowBackButton
progressBarPercentage={onboardingPurposeSelected === CONST.ONBOARDING_CHOICES.MANAGE_TEAM ? 80 : 90}
stepCounter={onboardingStep?.stepCounter}
progressBarPercentage={onboardingStep?.progressBarPercentage}
onBackButtonPress={() => {
Navigation.goBack(ROUTES.ONBOARDING_PURPOSE.getRoute());
}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {useMemoizedLazyIllustrations} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import useNetwork from '@hooks/useNetwork';
import useOnboardingMessages from '@hooks/useOnboardingMessages';
import useOnboardingStepCounter from '@hooks/useOnboardingStepCounter';
import useOnyx from '@hooks/useOnyx';
import usePermissions from '@hooks/usePermissions';
import useResponsiveLayout from '@hooks/useResponsiveLayout';
Expand All @@ -33,6 +34,7 @@ import CONST from '@src/CONST';
import type {TranslationPaths} from '@src/languages/types';
import ONYXKEYS from '@src/ONYXKEYS';
import ROUTES from '@src/ROUTES';
import SCREENS from '@src/SCREENS';
import type {OnboardingRHPVariant} from '@src/types/onyx';
import type {BaseOnboardingInterestedFeaturesProps, Feature, SectionObject} from './types';

Expand All @@ -46,6 +48,7 @@ function BaseOnboardingInterestedFeatures({shouldUseNativeStyles}: BaseOnboardin
// eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
const {onboardingIsMediumOrLargerScreenWidth, isSmallScreenWidth} = useResponsiveLayout();
const [onboardingPurposeSelected] = useOnyx(ONYXKEYS.ONBOARDING_PURPOSE_SELECTED);
const onboardingStep = useOnboardingStepCounter(SCREENS.ONBOARDING.INTERESTED_FEATURES);
const [onboardingPolicyID] = useOnyx(ONYXKEYS.ONBOARDING_POLICY_ID);
const currentUserPersonalDetails = useCurrentUserPersonalDetails();
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
Expand Down Expand Up @@ -385,7 +388,8 @@ function BaseOnboardingInterestedFeatures({shouldUseNativeStyles}: BaseOnboardin
>
<HeaderWithBackButton
shouldShowBackButton
progressBarPercentage={90}
stepCounter={onboardingStep?.stepCounter}
progressBarPercentage={onboardingStep?.progressBarPercentage}
onBackButtonPress={() => Navigation.goBack(ROUTES.ONBOARDING_ACCOUNTING.getRoute())}
shouldDisplayHelpButton={false}
/>
Expand Down
Loading
Loading