Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
7a5368c
feat: Submit workspace creation + onboarding flow (Wave 2)
abzokhattab Apr 7, 2026
0916a57
fix: load translations in WorkspaceOnboarding test
abzokhattab Apr 7, 2026
5fcd638
test: add tests for Submit workspace onboarding flow
abzokhattab Apr 7, 2026
edfd362
chore: remove narration comment from CONST and trim hook JSDoc
abzokhattab Apr 7, 2026
fc5eb7c
test: improve coverage for Submit onboarding flow
abzokhattab Apr 7, 2026
6aa9d5d
fix: use test user email in login list for validated private domain test
abzokhattab Apr 7, 2026
98d9e67
Merge remote-tracking branch 'origin/main' into akhattab/87261-submit…
abzokhattab Apr 7, 2026
96d920f
Merge remote-tracking branch 'origin/main' into akhattab/87261-submit…
abzokhattab Apr 14, 2026
55728a8
fix: add SUBMIT to isPaidGroupPolicy and gate Purpose shortcut on isV…
abzokhattab Apr 14, 2026
08e7035
fix: revert isPaidGroupPolicy to exclude Submit, add isSubmitPolicy/i…
abzokhattab Apr 14, 2026
00e659c
fix: resolve onboarding loop for unvalidated private-domain EMPLOYER …
abzokhattab Apr 14, 2026
ad24a0c
fix: allow Submit workspace editors to access workspace feature pages
abzokhattab Apr 14, 2026
c0b38ab
fix: prettier formatting
abzokhattab Apr 14, 2026
fefc8ff
fixing prettier
abzokhattab Apr 14, 2026
94aa343
fixing prettier
abzokhattab Apr 14, 2026
81fbfa2
fix: resolve ESLint errors in CI
abzokhattab Apr 14, 2026
ef02c3f
fix: use canEditWorkspaceSettings in WorkspacePageWithSections fallba…
abzokhattab Apr 14, 2026
791d430
Merge remote-tracking branch 'upstream/main' into akhattab/87261-subm…
abzokhattab Apr 15, 2026
42984b7
Merge remote-tracking branch 'upstream/main' into akhattab/87261-subm…
abzokhattab Apr 15, 2026
8d71e48
fix: show loading instead of not-found for joining workspaces, don't …
abzokhattab Apr 16, 2026
762dcfc
test: add unit tests for useAutoCreateSubmitWorkspace hook
abzokhattab Apr 16, 2026
f8350d6
Merge remote-tracking branch 'upstream/main' into akhattab/87261-subm…
abzokhattab Apr 17, 2026
9e50b03
Fix Submit workspace access gaps and onboarding NotFound flash
abzokhattab Apr 18, 2026
5f1fd5b
Label Submit workspaces as "Submit" instead of "Free"
abzokhattab Apr 18, 2026
5dc6eb6
Fix NotFound on approval workflow pages for Submit editors
abzokhattab Apr 18, 2026
9106334
Merge remote-tracking branch 'upstream/main' into akhattab/87261-subm…
abzokhattab Apr 18, 2026
ca6b673
Prevent Submit editors from escalating members to admin
abzokhattab Apr 18, 2026
608edba
Move Plan Type / Submit label hunks out of #87261 to #87263
abzokhattab Apr 18, 2026
1884f9f
fix(test): disable no-restricted-syntax for navigateAfterOnboarding spy
abzokhattab Apr 18, 2026
98d2824
Let Submit editors land on the upgrade page instead of NotFound
abzokhattab Apr 20, 2026
12be0d7
Merge remote-tracking branch 'upstream/main' into akhattab/87261-subm…
abzokhattab Apr 20, 2026
20adf33
Fix typecheck: use generateDefaultWorkspaceName after upstream rename
abzokhattab Apr 20, 2026
f42dbe7
Merge remote-tracking branch 'origin/main' into akhattab/87261-submit…
abzokhattab Apr 21, 2026
ac58c24
Merge remote-tracking branch 'upstream/main' into akhattab/87261-subm…
abzokhattab Apr 22, 2026
42ee71e
Route Submit-beta onboarding joins through the Submit flow
abzokhattab Apr 22, 2026
1efec60
Hide Reports sidebar entry on Submit workspaces
abzokhattab Apr 22, 2026
9abb34c
Stamp Submit optimistic defaults when joining a workspace
abzokhattab Apr 23, 2026
5aaf16e
Fix CI: spellcheck + joinAccessiblePolicy test expected args
abzokhattab Apr 23, 2026
04af6ab
Revert "Hide Reports sidebar entry on Submit workspaces"
abzokhattab Apr 27, 2026
e419781
Merge remote-tracking branch 'origin/main' into akhattab/87261-submit…
abzokhattab Apr 27, 2026
f08d086
Gate Submit join flow on EMPLOYER purpose, not beta alone
abzokhattab Apr 27, 2026
d26adc1
Remove unused shouldDisplayLHB and shouldShowNavigationTabBar locals
abzokhattab Apr 27, 2026
8e3c2b7
Address review NABs from hungvu193
abzokhattab Apr 27, 2026
1ecb166
Land back stack on WorkspacesList after Submit onboarding
abzokhattab Apr 27, 2026
942c619
Fix import order in WorkspaceMemberRoleList
abzokhattab Apr 27, 2026
7164da7
Restore @selectors import order to satisfy Prettier
abzokhattab Apr 28, 2026
ece30ab
Stop joinAccessiblePolicy from speculating on policy type/role
abzokhattab Apr 29, 2026
50a83a1
Route Submit plan-type Save to the upgrade screen
abzokhattab Apr 29, 2026
d61a8f0
Merge upstream/main into akhattab/87261-submit-workspace-onboarding
abzokhattab Apr 29, 2026
8dcfae1
Merge remote-tracking branch 'upstream/main' into akhattab/87261-subm…
abzokhattab May 1, 2026
fcac072
Merge remote-tracking branch 'upstream/main' into akhattab/87261-subm…
abzokhattab May 1, 2026
8d3c4ad
fix(test): remove unused eslint-disable directives
abzokhattab May 1, 2026
7089a8f
fix(submit-onboarding): open side panel on every desktop width
abzokhattab May 4, 2026
a2f57e1
Merge remote-tracking branch 'upstream/main' into akhattab/87261-subm…
abzokhattab May 4, 2026
6c4f73e
Merge remote-tracking branch 'origin/main' into akhattab/87261-submit…
abzokhattab May 4, 2026
3094680
refactor(onboarding): share auto-create workspace state between Submi…
abzokhattab May 5, 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
4 changes: 4 additions & 0 deletions src/CONST/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -887,6 +887,7 @@ const CONST = {
BULK_DUPLICATE_REPORT: 'bulkDuplicateReport',
BULK_EDIT: 'bulkEdit',
NEW_MANUAL_EXPENSE_FLOW: 'newManualExpenseFlow',
SUBMIT_2026: 'submit2026',
BULK_SUBMIT_APPROVE_PAY: 'bulkSubmitApprovePay',
},
BUTTON_STATES: {
Expand Down Expand Up @@ -3515,6 +3516,8 @@ const CONST = {

// Often referred to as "collect" workspaces
TEAM: 'team',

SUBMIT: 'submit2026',
},
RULE_CONDITIONS: {
MATCHES: 'matches',
Expand All @@ -3533,6 +3536,7 @@ const CONST = {
ADMIN: 'admin',
AUDITOR: 'auditor',
USER: 'user',
EDITOR: 'editor',
},
AUTO_REIMBURSEMENT_MAX_LIMIT_CENTS: 2000000,

Expand Down
4 changes: 2 additions & 2 deletions src/components/SidePanel/SidePanelContextProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import useWindowDimensions from '@hooks/useWindowDimensions';
import SidePanelActions from '@libs/actions/SidePanel';
import DateUtils from '@libs/DateUtils';
import focusComposerWithDelay from '@libs/focusComposerWithDelay';
import {isPolicyAdmin, shouldShowPolicy} from '@libs/PolicyUtils';
import {canEditWorkspaceSettings, shouldShowPolicy} from '@libs/PolicyUtils';
import ReportActionComposeFocusManager from '@libs/ReportActionComposeFocusManager';
import variables from '@styles/variables';
import CONST from '@src/CONST';
Expand Down Expand Up @@ -82,7 +82,7 @@ function SidePanelContextProvider({children}: PropsWithChildren) {

const isRHPAdminsRoom = onboardingRHPVariant === CONST.ONBOARDING_RHP_VARIANT.RHP_ADMINS_ROOM;
const isRHPHomePage = onboardingRHPVariant === CONST.ONBOARDING_RHP_VARIANT.RHP_HOME_PAGE;
const isUserAdmin = isPolicyAdmin(activePolicy, sessionEmail);
const isUserAdmin = canEditWorkspaceSettings(activePolicy);
const isPolicyActive = shouldShowPolicy(activePolicy, false, sessionEmail ?? '');
const adminsChatReportID = activePolicy?.chatReportIDAdmins?.toString();

Expand Down
19 changes: 17 additions & 2 deletions src/components/WorkspaceMemberRoleList.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
import {emailSelector} from '@selectors/Session';
import React from 'react';
import {View} from 'react-native';
import type {OnyxEntry} from 'react-native-onyx';
import type {ValueOf} from 'type-fest';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useThemeStyles from '@hooks/useThemeStyles';
import Navigation from '@libs/Navigation/Navigation';
import {isControlPolicy} from '@libs/PolicyUtils';
import {isControlPolicy, isPolicyAdmin} from '@libs/PolicyUtils';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {Route} from '@src/ROUTES';
import type {Policy} from '@src/types/onyx';
import HeaderWithBackButton from './HeaderWithBackButton';
Expand All @@ -32,6 +35,7 @@ type WorkspaceMemberRoleListProps = {
function WorkspaceMemberRoleList({role, policy, navigateBackTo = undefined, isLoading = false, onSelectRole = () => {}}: WorkspaceMemberRoleListProps) {
const {translate} = useLocalize();
const styles = useThemeStyles();
const [currentUserEmail] = useOnyx(ONYXKEYS.SESSION, {selector: emailSelector});

const workspaceRoles: ListItemType[] = [
{
Expand All @@ -58,7 +62,18 @@ function WorkspaceMemberRoleList({role, policy, navigateBackTo = undefined, isLo
];

const isPolicyControl = isControlPolicy(policy);
const availableRoleItems: ListItemType[] = workspaceRoles.filter((item) => isPolicyControl || item.value !== CONST.POLICY.ROLE.AUDITOR);
// Only strict admins can assign the ADMIN role. Editors (e.g. Submit workspace owners) can
// invite/manage members but must not be able to escalate anyone to admin.
const canAssignAdminRole = isPolicyAdmin(policy, currentUserEmail);
const availableRoleItems: ListItemType[] = workspaceRoles.filter((item) => {
if (item.value === CONST.POLICY.ROLE.AUDITOR && !isPolicyControl) {
return false;
}
if (item.value === CONST.POLICY.ROLE.ADMIN && !canAssignAdminRole) {
return false;
}
return true;
});

return (
<>
Expand Down
115 changes: 115 additions & 0 deletions src/hooks/useAutoCreateSubmitWorkspace.ts
Comment thread
abzokhattab marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
import {useCallback, useMemo} from 'react';
import type {OnyxCollection} from 'react-native-onyx';
import {navigateToSubmitWorkspaceAfterOnboardingWithMicrotaskQueue} from '@libs/navigateAfterOnboarding';
import {createDisplayName} from '@libs/PersonalDetailsUtils';
import {canEditWorkspaceSettings, isGroupPolicy} from '@libs/PolicyUtils';
import {createWorkspace, generateDefaultWorkspaceName, generatePolicyID} from '@userActions/Policy/Policy';
import {completeOnboarding} from '@userActions/Report';
import {setOnboardingAdminsChatReportID, setOnboardingPolicyID} from '@userActions/Welcome';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {Policy} from '@src/types/onyx';
import useOnboardingWorkspaceCreationState from './useOnboardingWorkspaceCreationState';
import useOnyx from './useOnyx';

/**
* Hook that provides a function to auto-create a Submit workspace for EMPLOYER
* users during onboarding and complete the onboarding flow.
*
* Shared by BaseOnboardingPersonalDetails, BaseOnboardingPurpose, and BaseOnboardingWorkspaces.
*/
function useAutoCreateSubmitWorkspace() {
const {
onboardingPolicyID,
onboardingAdminsChatReportID,
introSelected,
isSelfTourViewed,
betas,
currentUserEmail,
currentUserAccountID,
localCurrencyCode,
activePolicy,
translate,
formatPhoneNumber,
isRestrictedPolicyCreation,
hasActiveAdminPolicies,
onboardingMessages,
lastWorkspaceNumber,
isSmallScreenWidth,
} = useOnboardingWorkspaceCreationState();

const groupPolicySelector = useMemo(
() => (policies: OnyxCollection<Policy>) => Object.values(policies ?? {}).some((policy) => isGroupPolicy(policy) && canEditWorkspaceSettings(policy)),
[],
);
const [hasEditableGroupPolicy] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: groupPolicySelector});

const autoCreateSubmitWorkspace = useCallback(
(firstName: string, lastName: string) => {
const shouldCreateWorkspace = !isRestrictedPolicyCreation && !onboardingPolicyID && !hasEditableGroupPolicy;
const displayName = createDisplayName(currentUserEmail, {firstName, lastName}, formatPhoneNumber);

const {adminsChatReportID: newAdminsChatReportID, policyID: newPolicyID} = shouldCreateWorkspace
? createWorkspace({
policyOwnerEmail: undefined,
makeMeAdmin: true,
policyName: generateDefaultWorkspaceName(currentUserEmail, lastWorkspaceNumber, translate, displayName),
policyID: generatePolicyID(),
engagementChoice: CONST.ONBOARDING_CHOICES.EMPLOYER,
currency: localCurrencyCode,
file: undefined,
shouldAddOnboardingTasks: false,
introSelected,
activePolicy,
currentUserAccountIDParam: currentUserAccountID,
currentUserEmailParam: currentUserEmail,
shouldAddGuideWelcomeMessage: false,
type: CONST.POLICY.TYPE.SUBMIT,
betas,
isSelfTourViewed,
hasActiveAdminPolicies,
})
: {adminsChatReportID: onboardingAdminsChatReportID, policyID: onboardingPolicyID};

completeOnboarding({
engagementChoice: CONST.ONBOARDING_CHOICES.EMPLOYER,
onboardingMessage: onboardingMessages[CONST.ONBOARDING_CHOICES.EMPLOYER],
firstName,
lastName,
adminsChatReportID: newAdminsChatReportID,
onboardingPolicyID: newPolicyID,
introSelected,
isSelfTourViewed,
betas,
});

setOnboardingAdminsChatReportID();
setOnboardingPolicyID();

navigateToSubmitWorkspaceAfterOnboardingWithMicrotaskQueue(newPolicyID, isSmallScreenWidth);
},
[
currentUserEmail,
currentUserAccountID,
lastWorkspaceNumber,
translate,
formatPhoneNumber,
isRestrictedPolicyCreation,
onboardingPolicyID,
hasEditableGroupPolicy,
onboardingAdminsChatReportID,
localCurrencyCode,
introSelected,
activePolicy,
isSelfTourViewed,
onboardingMessages,
betas,
hasActiveAdminPolicies,
isSmallScreenWidth,
],
);

return autoCreateSubmitWorkspace;
}

export default useAutoCreateSubmitWorkspace;
70 changes: 31 additions & 39 deletions src/hooks/useAutoCreateTrackWorkspace.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import {hasSeenTourSelector} from '@selectors/Onboarding';
import {useCallback, useMemo} from 'react';
import type {OnyxCollection} from 'react-native-onyx';
import isSidePanelReportSupported from '@components/SidePanel/isSidePanelReportSupported';
Expand All @@ -12,17 +11,10 @@ import {setOnboardingAdminsChatReportID, setOnboardingPolicyID} from '@userActio
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {OnboardingPurpose, OnboardingRHPVariant, Policy} from '@src/types/onyx';
import useActivePolicy from './useActivePolicy';
import useArchivedReportsIdSet from './useArchivedReportsIdSet';
import useCurrentUserPersonalDetails from './useCurrentUserPersonalDetails';
import useHasActiveAdminPolicies from './useHasActiveAdminPolicies';
import useLastWorkspaceNumber from './useLastWorkspaceNumber';
import useLocalize from './useLocalize';
import useOnboardingMessages from './useOnboardingMessages';
import useOnboardingWorkspaceCreationState from './useOnboardingWorkspaceCreationState';
import useOnyx from './useOnyx';
import usePermissions from './usePermissions';
import usePreferredPolicy from './usePreferredPolicy';
import useResponsiveLayout from './useResponsiveLayout';

/**
* Hook that provides a function to auto-create a workspace for Track (PERSONAL_SPEND)
Expand All @@ -31,57 +23,57 @@ import useResponsiveLayout from './useResponsiveLayout';
* Shared by BaseOnboardingPersonalDetails and BaseOnboardingPurpose.
*/
function useAutoCreateTrackWorkspace() {
const [onboardingPolicyID] = useOnyx(ONYXKEYS.ONBOARDING_POLICY_ID);
const [onboardingAdminsChatReportID] = useOnyx(ONYXKEYS.ONBOARDING_ADMINS_CHAT_REPORT_ID);
const [introSelected] = useOnyx(ONYXKEYS.NVP_INTRO_SELECTED);
const [isSelfTourViewed] = useOnyx(ONYXKEYS.NVP_ONBOARDING, {selector: hasSeenTourSelector});
const [betas] = useOnyx(ONYXKEYS.BETAS);
const [session] = useOnyx(ONYXKEYS.SESSION);
const {
onboardingPolicyID,
onboardingAdminsChatReportID,
introSelected,
isSelfTourViewed,
betas,
currentUserEmail,
currentUserAccountID,
localCurrencyCode,
activePolicy,
translate,
formatPhoneNumber,
isRestrictedPolicyCreation,
hasActiveAdminPolicies,
onboardingMessages,
lastWorkspaceNumber,
isSmallScreenWidth,
} = useOnboardingWorkspaceCreationState();

const paidGroupPolicySelector = useMemo(
() => (policies: OnyxCollection<Policy>) => Object.values(policies ?? {}).some((policy) => isPaidGroupPolicy(policy) && isPolicyAdmin(policy, session?.email)),
[session?.email],
() => (policies: OnyxCollection<Policy>) => Object.values(policies ?? {}).some((policy) => isPaidGroupPolicy(policy) && isPolicyAdmin(policy, currentUserEmail)),
[currentUserEmail],
);
const [hasPaidGroupAdminPolicy] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: paidGroupPolicySelector});

const [conciergeChatReportID = ''] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID);
const [onboardingValues] = useOnyx(ONYXKEYS.NVP_ONBOARDING);
const currentUserPersonalDetails = useCurrentUserPersonalDetails();
const archivedReportsIdSet = useArchivedReportsIdSet();
const {isBetaEnabled} = usePermissions();
const {translate, formatPhoneNumber} = useLocalize();
const activePolicy = useActivePolicy();
const {isRestrictedPolicyCreation} = usePreferredPolicy();
const hasActiveAdminPolicies = useHasActiveAdminPolicies();
const lastWorkspaceNumber = useLastWorkspaceNumber();
const {onboardingMessages} = useOnboardingMessages();

// We use isSmallScreenWidth instead of shouldUseNarrowLayout because navigateAfterOnboarding
// relies on actual device screen width to handle navigation stack differences: on small screens,
// removing OnboardingModalNavigator redirects to HOME, requiring explicit navigation to the last
// accessed report. This behavior is tied to screen size, not responsive layout mode.
// eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
const {isSmallScreenWidth} = useResponsiveLayout();

const mergedAccountConciergeReportID = !onboardingValues?.shouldRedirectToClassicAfterMerge && onboardingValues?.shouldValidate ? conciergeChatReportID : undefined;

const autoCreateTrackWorkspace = useCallback(
async (firstName: string, lastName: string, onboardingPurposeSelected: OnboardingPurpose) => {
const shouldCreateWorkspace = !isRestrictedPolicyCreation && !onboardingPolicyID && !hasPaidGroupAdminPolicy;
const displayName = createDisplayName(session?.email ?? '', {firstName, lastName}, formatPhoneNumber);
const displayName = createDisplayName(currentUserEmail, {firstName, lastName}, formatPhoneNumber);

const {adminsChatReportID: newAdminsChatReportID, policyID: newPolicyID} = shouldCreateWorkspace
? createWorkspace({
policyOwnerEmail: undefined,
makeMeAdmin: true,
policyName: generateDefaultWorkspaceName(session?.email ?? '', lastWorkspaceNumber, translate, displayName),
policyName: generateDefaultWorkspaceName(currentUserEmail, lastWorkspaceNumber, translate, displayName),
policyID: generatePolicyID(),
engagementChoice: CONST.ONBOARDING_CHOICES.TRACK_WORKSPACE,
currency: currentUserPersonalDetails.localCurrencyCode ?? CONST.CURRENCY.USD,
currency: localCurrencyCode,
file: undefined,
shouldAddOnboardingTasks: false,
introSelected,
activePolicy,
currentUserAccountIDParam: session?.accountID ?? CONST.DEFAULT_NUMBER_ID,
currentUserEmailParam: session?.email ?? '',
currentUserAccountIDParam: currentUserAccountID,
currentUserEmailParam: currentUserEmail,
shouldAddGuideWelcomeMessage: false,
onboardingPurposeSelected,
betas,
Expand Down Expand Up @@ -129,16 +121,16 @@ function useAutoCreateTrackWorkspace() {
}
},
[
session?.email,
session?.accountID,
currentUserEmail,
currentUserAccountID,
lastWorkspaceNumber,
translate,
formatPhoneNumber,
isRestrictedPolicyCreation,
onboardingPolicyID,
hasPaidGroupAdminPolicy,
onboardingAdminsChatReportID,
currentUserPersonalDetails.localCurrencyCode,
localCurrencyCode,
introSelected,
activePolicy,
isSelfTourViewed,
Expand Down
66 changes: 66 additions & 0 deletions src/hooks/useOnboardingWorkspaceCreationState.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import {hasSeenTourSelector} from '@selectors/Onboarding';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import useActivePolicy from './useActivePolicy';
import useCurrentUserPersonalDetails from './useCurrentUserPersonalDetails';
import useHasActiveAdminPolicies from './useHasActiveAdminPolicies';
import useLastWorkspaceNumber from './useLastWorkspaceNumber';
import useLocalize from './useLocalize';
import useOnboardingMessages from './useOnboardingMessages';
import useOnyx from './useOnyx';
import usePreferredPolicy from './usePreferredPolicy';
import useResponsiveLayout from './useResponsiveLayout';

/**
* Shared state for the onboarding workspace auto-creation hooks
* (`useAutoCreateSubmitWorkspace`, `useAutoCreateTrackWorkspace`).
*
* Email and accountID come from `ONYXKEYS.SESSION` because session is hydrated
* earlier in onboarding than personal details.
*/
function useOnboardingWorkspaceCreationState() {
const [onboardingPolicyID] = useOnyx(ONYXKEYS.ONBOARDING_POLICY_ID);
const [onboardingAdminsChatReportID] = useOnyx(ONYXKEYS.ONBOARDING_ADMINS_CHAT_REPORT_ID);
const [introSelected] = useOnyx(ONYXKEYS.NVP_INTRO_SELECTED);
const [isSelfTourViewed] = useOnyx(ONYXKEYS.NVP_ONBOARDING, {selector: hasSeenTourSelector});
const [betas] = useOnyx(ONYXKEYS.BETAS);
const [session] = useOnyx(ONYXKEYS.SESSION);

const currentUserEmail = session?.email ?? '';
const currentUserAccountID = session?.accountID ?? CONST.DEFAULT_NUMBER_ID;

const currentUserPersonalDetails = useCurrentUserPersonalDetails();
const localCurrencyCode = currentUserPersonalDetails.localCurrencyCode ?? CONST.CURRENCY.USD;

const activePolicy = useActivePolicy();
const {translate, formatPhoneNumber} = useLocalize();
const {isRestrictedPolicyCreation} = usePreferredPolicy();
const hasActiveAdminPolicies = useHasActiveAdminPolicies();
const {onboardingMessages} = useOnboardingMessages();
const lastWorkspaceNumber = useLastWorkspaceNumber();

// eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
const {isSmallScreenWidth} = useResponsiveLayout();

return {
onboardingPolicyID,
onboardingAdminsChatReportID,
introSelected,
isSelfTourViewed,
betas,
currentUserPersonalDetails,
currentUserEmail,
currentUserAccountID,
localCurrencyCode,
activePolicy,
translate,
formatPhoneNumber,
isRestrictedPolicyCreation,
hasActiveAdminPolicies,
onboardingMessages,
lastWorkspaceNumber,
isSmallScreenWidth,
};
}

export default useOnboardingWorkspaceCreationState;
Loading
Loading