Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 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
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 @@ -888,6 +888,7 @@ const CONST = {
GUSTO: 'gustoNewDot',
BULK_EDIT: 'bulkEdit',
NEW_MANUAL_EXPENSE_FLOW: 'newManualExpenseFlow',
SUBMIT_2026: 'submit2026',
BULK_SUBMIT_APPROVE_PAY: 'bulkSubmitApprovePay',
},
BUTTON_STATES: {
Expand Down Expand Up @@ -3502,6 +3503,8 @@ const CONST = {

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

SUBMIT: 'submit2026',
},
RULE_CONDITIONS: {
MATCHES: 'matches',
Expand All @@ -3520,6 +3523,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
18 changes: 16 additions & 2 deletions src/components/WorkspaceMemberRoleList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@ 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 +34,7 @@ type WorkspaceMemberRoleListProps = {
function WorkspaceMemberRoleList({role, policy, navigateBackTo = undefined, isLoading = false, onSelectRole = () => {}}: WorkspaceMemberRoleListProps) {
const {translate} = useLocalize();
const styles = useThemeStyles();
const [session] = useOnyx(ONYXKEYS.SESSION);

const workspaceRoles: ListItemType[] = [
{
Expand All @@ -58,7 +61,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, session?.email);
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
120 changes: 120 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,120 @@
import {hasSeenTourSelector} from '@selectors/Onboarding';
Comment thread
abzokhattab marked this conversation as resolved.
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 {lastWorkspaceNumberSelector} from '@src/selectors/Policy';
import type {Policy} from '@src/types/onyx';
import useCurrentUserPersonalDetails from './useCurrentUserPersonalDetails';
import useHasActiveAdminPolicies from './useHasActiveAdminPolicies';
import useLocalize from './useLocalize';
import useOnboardingMessages from './useOnboardingMessages';
import useOnyx from './useOnyx';
import usePreferredPolicy from './usePreferredPolicy';

/**
* 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] = 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 groupPolicySelector = useMemo(
() => (policies: OnyxCollection<Policy>) => Object.values(policies ?? {}).some((policy) => isGroupPolicy(policy) && canEditWorkspaceSettings(policy)),
[],
);
const lastWorkspaceNumberWithEmailSelector = useCallback(
(policies: OnyxCollection<Policy>) => {
return lastWorkspaceNumberSelector(policies, session?.email ?? '');
},
[session?.email],
);
const [hasEditableGroupPolicy] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: groupPolicySelector});
const [lastWorkspaceNumber] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: lastWorkspaceNumberWithEmailSelector});
const [activePolicyID] = useOnyx(ONYXKEYS.NVP_ACTIVE_POLICY_ID);
const currentUserPersonalDetails = useCurrentUserPersonalDetails();
const {translate, formatPhoneNumber} = useLocalize();
const {isRestrictedPolicyCreation} = usePreferredPolicy();
const hasActiveAdminPolicies = useHasActiveAdminPolicies();
const {onboardingMessages} = useOnboardingMessages();

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

const {adminsChatReportID: newAdminsChatReportID, policyID: newPolicyID} = shouldCreateWorkspace
? createWorkspace({
policyOwnerEmail: undefined,
makeMeAdmin: true,
policyName: generateDefaultWorkspaceName(session?.email ?? '', lastWorkspaceNumber, translate, displayName),
policyID: generatePolicyID(),
engagementChoice: CONST.ONBOARDING_CHOICES.EMPLOYER,
currency: currentUserPersonalDetails.localCurrencyCode ?? CONST.CURRENCY.USD,
file: undefined,
shouldAddOnboardingTasks: false,
introSelected,
activePolicyID,
currentUserAccountIDParam: session?.accountID ?? CONST.DEFAULT_NUMBER_ID,
currentUserEmailParam: session?.email ?? '',
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);
},
[
session?.email,
session?.accountID,
lastWorkspaceNumber,
translate,
formatPhoneNumber,
isRestrictedPolicyCreation,
onboardingPolicyID,
hasEditableGroupPolicy,
onboardingAdminsChatReportID,
currentUserPersonalDetails.localCurrencyCode,
introSelected,
activePolicyID,
isSelfTourViewed,
onboardingMessages,
betas,
hasActiveAdminPolicies,
],
);

return autoCreateSubmitWorkspace;
}

export default useAutoCreateSubmitWorkspace;
4 changes: 4 additions & 0 deletions src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6942,6 +6942,10 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
label: 'Steuerung',
description: 'Für Organisationen mit erweiterten Anforderungen.',
},
submit2026: {
label: 'Einreichen',
description: 'Für Mitarbeiter, die Ausgaben bei ihrem Arbeitgeber einreichen möchten.',
},
},
description: 'Wähle ein passendes Abo für dich. Eine detaillierte Liste der Funktionen und Preise findest du in unserem',
subscriptionLink: 'Hilfeseite zu Plantypen und Preisen',
Expand Down
4 changes: 4 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6949,6 +6949,10 @@ const translations = {
label: 'Control',
description: 'For organizations with advanced requirements.',
},
submit2026: {
label: 'Submit',
description: 'For employees looking to submit expenses to their employer.',
},
},
description: "Choose a plan that's right for you. For a detailed list of features and pricing, check out our",
subscriptionLink: 'plan types and pricing help page',
Expand Down
4 changes: 4 additions & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6378,6 +6378,10 @@ ${amount} para ${merchant} - ${date}`,
label: 'Controlar',
description: 'Para organizaciones con requisitos avanzados.',
},
submit2026: {
label: 'Enviar',
description: 'Para empleados que buscan enviar gastos a su empleador.',
},
},
description: 'Elige el plan adecuado para ti. Para ver una lista detallada de funciones y precios, consulta nuestra',
subscriptionLink: 'página de ayuda sobre tipos de planes y precios',
Expand Down
4 changes: 4 additions & 0 deletions src/languages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6964,6 +6964,10 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
label: 'Contrôle',
description: 'Pour les organisations ayant des exigences avancées.',
},
submit2026: {
label: 'Soumettre',
description: 'Pour les employés souhaitant soumettre des dépenses à leur employeur.',
},
},
description: 'Choisissez l’offre qui vous convient. Pour une liste détaillée des fonctionnalités et des tarifs, consultez notre',
subscriptionLink: "page d'aide sur les types de forfaits et les tarifs",
Expand Down
4 changes: 4 additions & 0 deletions src/languages/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6927,6 +6927,10 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
label: 'Controllo',
description: 'Per le organizzazioni con requisiti avanzati.',
},
submit2026: {
label: 'Invia',
description: 'Per i dipendenti che desiderano inviare le spese al proprio datore di lavoro.',
},
},
description: 'Scegli il piano più adatto a te. Per un elenco dettagliato di funzionalità e prezzi, consulta la nostra',
subscriptionLink: 'pagina di aiuto su tipi di piano e prezzi',
Expand Down
4 changes: 4 additions & 0 deletions src/languages/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6850,6 +6850,10 @@ ${reportName}
label: 'コントロール',
description: '高度な要件を持つ組織向け。',
},
submit2026: {
label: '提出',
description: '雇用主に経費を提出したい従業員向け。',
},
},
description: '自分に合ったプランをお選びください。機能と料金の詳細な一覧は、こちらのページをご覧ください',
subscriptionLink: 'プランの種類と料金のヘルプページ',
Expand Down
4 changes: 4 additions & 0 deletions src/languages/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6907,6 +6907,10 @@ Voeg meer bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
label: 'Beheer',
description: 'Voor organisaties met geavanceerde vereisten.',
},
submit2026: {
label: 'Indienen',
description: 'Voor werknemers die onkosten bij hun werkgever willen indienen.',
},
},
description: 'Kies een pakket dat bij je past. Voor een gedetailleerd overzicht van functies en prijzen, bekijk onze',
subscriptionLink: 'hulppagina voor abonnementstypen en prijzen',
Expand Down
4 changes: 4 additions & 0 deletions src/languages/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6899,6 +6899,10 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
label: 'Sterowanie',
description: 'Dla organizacji z zaawansowanymi wymaganiami.',
},
submit2026: {
label: 'Prześlij',
description: 'Dla pracowników, którzy chcą przesyłać wydatki do pracodawcy.',
},
},
description: 'Wybierz plan odpowiedni dla siebie. Szczegółową listę funkcji i cen znajdziesz w naszej',
subscriptionLink: 'strona pomocy dotycząca typów planów i cen',
Expand Down
4 changes: 4 additions & 0 deletions src/languages/pt-BR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6905,6 +6905,10 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
label: 'Controle',
description: 'Para organizações com requisitos avançados.',
},
submit2026: {
label: 'Enviar',
description: 'Para funcionários que desejam enviar despesas ao empregador.',
},
},
description: 'Escolha o plano ideal para você. Para ver a lista detalhada de recursos e preços, confira nosso',
subscriptionLink: 'página de ajuda sobre tipos de plano e preços',
Expand Down
4 changes: 4 additions & 0 deletions src/languages/zh-hans.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6732,6 +6732,10 @@ ${reportName}
label: '控制',
description: '适用于具有高级需求的组织。',
},
submit2026: {
label: '提交',
description: '适用于希望向雇主提交费用的员工。',
},
},
description: '选择适合您的方案。要查看详细的功能和价格列表,请访问我们的',
subscriptionLink: '方案类型和价格帮助页面',
Expand Down
30 changes: 30 additions & 0 deletions src/libs/PolicyUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
lastSync?: ConnectionLastSync;
};

let allPolicies: OnyxCollection<Policy>;

Check warning on line 77 in src/libs/PolicyUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function

Onyx.connect({
key: ONYXKEYS.COLLECTION.POLICY,
Expand Down Expand Up @@ -881,6 +881,32 @@
return policy?.type === CONST.POLICY.TYPE.TEAM || policy?.type === CONST.POLICY.TYPE.CORPORATE;
}

function isSubmitPolicy(policy: OnyxInputOrEntry<Policy>): boolean {
return policy?.type === CONST.POLICY.TYPE.SUBMIT;
}

function isPolicyEditor(policy: OnyxEntry<Policy>): boolean {
return policy?.role === CONST.POLICY.ROLE.EDITOR;
}

/**
* Returns true if the user can edit workspace settings — admins on any workspace, or editors on Submit workspaces.
*/
function canEditWorkspaceSettings(policy: OnyxEntry<Policy>): boolean {
return isPolicyAdmin(policy) || (isSubmitPolicy(policy) && isPolicyEditor(policy));
}

/**
* Returns true for any group workspace: paid (Team/Corporate) or Submit.
*
* Note: not to be confused with `ReportUtils.isGroupPolicy(policyType: string)`,
* which excludes Submit. Use this helper when Submit workspaces should be treated
* like paid workspaces (e.g. access gating for shared workspace pages).
*/
function isGroupPolicy(policy: OnyxInputOrEntry<Policy>): boolean {
return isPaidGroupPolicy(policy) || isSubmitPolicy(policy);
}

function getOwnedPaidPolicies(policies: OnyxCollection<Policy> | null, currentUserAccountID: number | undefined): Policy[] {
return Object.values(policies ?? {}).filter((policy): policy is Policy => isPolicyOwner(policy, currentUserAccountID ?? CONST.DEFAULT_NUMBER_ID) && isPaidGroupPolicy(policy));
}
Expand Down Expand Up @@ -2209,6 +2235,10 @@
isDelayedSubmissionEnabled,
getCorrectedAutoReportingFrequency,
isPaidGroupPolicy,
isSubmitPolicy,
isPolicyEditor,
canEditWorkspaceSettings,
isGroupPolicy,
isPendingDeletePolicy,
isPolicyAdmin,
isPolicyUser,
Expand Down
2 changes: 1 addition & 1 deletion src/libs/SubscriptionUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
};

let deprecatedCurrentUserAccountID = -1;
Onyx.connect({

Check warning on line 56 in src/libs/SubscriptionUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.SESSION,
callback: (value) => {
deprecatedCurrentUserAccountID = value?.accountID ?? CONST.DEFAULT_NUMBER_ID;
Expand All @@ -61,7 +61,7 @@
});

let deprecatedAllPolicies: OnyxCollection<Policy>;
Onyx.connect({

Check warning on line 64 in src/libs/SubscriptionUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.POLICY,
callback: (value) => (deprecatedAllPolicies = value),
waitForCollectionCallback: true,
Expand Down Expand Up @@ -505,7 +505,7 @@
privateSubscriptionType: SubscriptionType | undefined,
hasTeam2025Pricing: boolean,
): number {
if (!privateSubscriptionType || !plan) {
if (!privateSubscriptionType || !plan || plan === CONST.POLICY.TYPE.SUBMIT) {
return 0;
}

Expand Down
Loading
Loading