Skip to content

Commit 090ba7d

Browse files
Merge pull request Expensify#67477 from daledah/fix/65697
fix: default new WS to Control if user is in annual subscription
2 parents 2bc19b2 + 83eb2a3 commit 090ba7d

4 files changed

Lines changed: 20 additions & 6 deletions

File tree

src/libs/API/parameters/CreateWorkspaceParams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ type CreateWorkspaceParams = {
1616
file?: File;
1717
companySize?: string;
1818
userReportedIntegration?: string;
19+
isAnnualSubscription?: boolean;
1920
};
2021

2122
export default CreateWorkspaceParams;

src/libs/actions/App.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,9 @@ function endSignOnTransition() {
435435
* @param [currency] Optional, selected currency for the workspace
436436
* @param [file], avatar file for workspace
437437
* @param [routeToNavigateAfterCreate], Optional, route to navigate after creating a workspace
438+
* @param [isAnnualSubscription] Optional, does user have an annual subscription
438439
*/
440+
// eslint-disable-next-line @typescript-eslint/max-params
439441
function createWorkspaceWithPolicyDraftAndNavigateToIt(
440442
policyOwnerEmail = '',
441443
policyName = '',
@@ -447,6 +449,7 @@ function createWorkspaceWithPolicyDraftAndNavigateToIt(
447449
file?: File,
448450
routeToNavigateAfterCreate?: Route,
449451
lastUsedPaymentMethod?: OnyxTypes.LastPaymentMethodType,
452+
isAnnualSubscription = false,
450453
) {
451454
const policyIDWithDefault = policyID || generatePolicyID();
452455
createDraftInitialWorkspace(policyOwnerEmail, policyName, policyIDWithDefault, makeMeAdmin, currency, file);
@@ -457,7 +460,7 @@ function createWorkspaceWithPolicyDraftAndNavigateToIt(
457460
Navigation.goBack();
458461
}
459462
const routeToNavigate = routeToNavigateAfterCreate ?? ROUTES.WORKSPACE_INITIAL.getRoute(policyIDWithDefault, backTo);
460-
savePolicyDraftByNewWorkspace(policyIDWithDefault, policyName, policyOwnerEmail, makeMeAdmin, currency, file, lastUsedPaymentMethod);
463+
savePolicyDraftByNewWorkspace(policyIDWithDefault, policyName, policyOwnerEmail, makeMeAdmin, currency, file, lastUsedPaymentMethod, isAnnualSubscription);
461464
Navigation.navigate(routeToNavigate, {forceReplace: !transitionFromOldDot});
462465
})
463466
.then(endSignOnTransition);
@@ -472,6 +475,7 @@ function createWorkspaceWithPolicyDraftAndNavigateToIt(
472475
* @param [makeMeAdmin] Optional, leave the calling account as an admin on the policy
473476
* @param [currency] Optional, selected currency for the workspace
474477
* @param [file] Optional, avatar file for workspace
478+
* @param [isAnnualSubscription] Optional, does user have an annual subscription
475479
*/
476480
function savePolicyDraftByNewWorkspace(
477481
policyID?: string,
@@ -481,6 +485,7 @@ function savePolicyDraftByNewWorkspace(
481485
currency = '',
482486
file?: File,
483487
lastUsedPaymentMethod?: OnyxTypes.LastPaymentMethodType,
488+
isAnnualSubscription = false,
484489
) {
485490
createWorkspace({
486491
policyOwnerEmail,
@@ -491,6 +496,7 @@ function savePolicyDraftByNewWorkspace(
491496
currency,
492497
file,
493498
lastUsedPaymentMethod,
499+
isAnnualSubscription,
494500
});
495501
}
496502

src/libs/actions/Policy/Policy.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ type BuildPolicyDataOptions = {
157157
shouldAddOnboardingTasks?: boolean;
158158
companySize?: OnboardingCompanySize;
159159
userReportedIntegration?: OnboardingAccounting;
160+
isAnnualSubscription?: boolean;
160161
featuresMap?: Feature[];
161162
lastUsedPaymentMethod?: LastPaymentMethodType;
162163
};
@@ -1850,8 +1851,9 @@ function buildOptimisticDistanceRateCustomUnits(reportCurrency?: string): Optimi
18501851
* @param [makeMeAdmin] leave the calling account as an admin on the policy
18511852
* @param [currency] Optional, selected currency for the workspace
18521853
* @param [file], avatar file for workspace
1854+
* @param [isAnnualSubscription] Optional, does user have an annual subscription
18531855
*/
1854-
function createDraftInitialWorkspace(policyOwnerEmail = '', policyName = '', policyID = generatePolicyID(), makeMeAdmin = false, currency = '', file?: File) {
1856+
function createDraftInitialWorkspace(policyOwnerEmail = '', policyName = '', policyID = generatePolicyID(), makeMeAdmin = false, currency = '', file?: File, isAnnualSubscription = false) {
18551857
const workspaceName = policyName || generateDefaultWorkspaceName(policyOwnerEmail);
18561858
const {customUnits, outputCurrency} = buildOptimisticDistanceRateCustomUnits(currency);
18571859
const shouldEnableWorkflowsByDefault =
@@ -1863,15 +1865,15 @@ function createDraftInitialWorkspace(policyOwnerEmail = '', policyName = '', pol
18631865
key: `${ONYXKEYS.COLLECTION.POLICY_DRAFTS}${policyID}`,
18641866
value: {
18651867
id: policyID,
1866-
type: CONST.POLICY.TYPE.TEAM,
1868+
type: isAnnualSubscription ? CONST.POLICY.TYPE.CORPORATE : CONST.POLICY.TYPE.TEAM,
18671869
name: workspaceName,
18681870
role: CONST.POLICY.ROLE.ADMIN,
18691871
owner: sessionEmail,
18701872
ownerAccountID: sessionAccountID,
18711873
isPolicyExpenseChatEnabled: true,
18721874
areCategoriesEnabled: true,
18731875
approver: sessionEmail,
1874-
areCompanyCardsEnabled: true,
1876+
areCompanyCardsEnabled: !isAnnualSubscription,
18751877
areExpensifyCardsEnabled: false,
18761878
outputCurrency,
18771879
pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD,
@@ -1936,6 +1938,7 @@ function buildPolicyData(options: BuildPolicyDataOptions = {}) {
19361938
shouldAddOnboardingTasks = true,
19371939
companySize,
19381940
userReportedIntegration,
1941+
isAnnualSubscription = false,
19391942
featuresMap,
19401943
lastUsedPaymentMethod,
19411944
} = options;
@@ -1969,7 +1972,7 @@ function buildPolicyData(options: BuildPolicyDataOptions = {}) {
19691972
// Determine workspace type based on selected features or user reported integration
19701973
const isCorporateFeature = featuresMap?.some((feature) => !feature.enabledByDefault && feature.enabled && feature.requiresUpdate) ?? false;
19711974
const isCorporateIntegration = userReportedIntegration && (CONST.POLICY.CONNECTIONS.CORPORATE as readonly string[]).includes(userReportedIntegration);
1972-
const workspaceType = isCorporateFeature || isCorporateIntegration ? CONST.POLICY.TYPE.CORPORATE : CONST.POLICY.TYPE.TEAM;
1975+
const workspaceType = isCorporateFeature || !!isCorporateIntegration || isAnnualSubscription ? CONST.POLICY.TYPE.CORPORATE : CONST.POLICY.TYPE.TEAM;
19731976

19741977
// WARNING: The data below should be kept in sync with the API so we create the policy with the correct configuration.
19751978
const optimisticData: OnyxUpdate[] = [
@@ -1996,7 +1999,7 @@ function buildPolicyData(options: BuildPolicyDataOptions = {}) {
19961999
},
19972000
customUnits,
19982001
areCategoriesEnabled: true,
1999-
areCompanyCardsEnabled: true,
2002+
areCompanyCardsEnabled: workspaceType === CONST.POLICY.TYPE.TEAM,
20002003
areTagsEnabled: false,
20012004
areDistanceRatesEnabled: false,
20022005
areWorkflowsEnabled: shouldEnableWorkflowsByDefault,

src/pages/workspace/WorkspaceConfirmationPage.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout';
77
import {createWorkspaceWithPolicyDraftAndNavigateToIt} from '@libs/actions/App';
88
import {generatePolicyID} from '@libs/actions/Policy/Policy';
99
import getCurrentUrl from '@libs/Navigation/currentUrl';
10+
import CONST from '@src/CONST';
1011
import ONYXKEYS from '@src/ONYXKEYS';
1112
import ROUTES from '@src/ROUTES';
1213
import type {LastPaymentMethodType} from '@src/types/onyx';
@@ -16,6 +17,8 @@ function WorkspaceConfirmationPage() {
1617
// shouldUseNarrowLayout cannot be used to determine that as this screen is displayed in RHP and shouldUseNarrowLayout always returns true.
1718
// eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
1819
const {isSmallScreenWidth} = useResponsiveLayout();
20+
const [privateSubscription] = useOnyx(ONYXKEYS.NVP_PRIVATE_SUBSCRIPTION, {canBeMissing: false});
21+
const isAnnualSubscription = privateSubscription?.type === CONST.SUBSCRIPTION.TYPE.ANNUAL;
1922
const [lastPaymentMethod] = useOnyx(ONYXKEYS.NVP_LAST_PAYMENT_METHOD, {canBeMissing: true});
2023
const onSubmit = (params: WorkspaceConfirmationSubmitFunctionParams) => {
2124
const policyID = params.policyID || generatePolicyID();
@@ -31,6 +34,7 @@ function WorkspaceConfirmationPage() {
3134
params.avatarFile as File,
3235
routeToNavigate,
3336
lastPaymentMethod?.[policyID] as LastPaymentMethodType,
37+
isAnnualSubscription,
3438
);
3539
};
3640
const currentUrl = getCurrentUrl();

0 commit comments

Comments
 (0)