Skip to content

Commit e3efc6f

Browse files
committed
fix: default new WS to Control if user is in annual subscription
1 parent d99a071 commit e3efc6f

4 files changed

Lines changed: 26 additions & 9 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: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ 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
*/
439440
function createWorkspaceWithPolicyDraftAndNavigateToIt(
440441
policyOwnerEmail = '',
@@ -446,6 +447,7 @@ function createWorkspaceWithPolicyDraftAndNavigateToIt(
446447
currency?: string,
447448
file?: File,
448449
routeToNavigateAfterCreate?: Route,
450+
isAnnualSubscription = false,
449451
) {
450452
const policyIDWithDefault = policyID || generatePolicyID();
451453
createDraftInitialWorkspace(policyOwnerEmail, policyName, policyIDWithDefault, makeMeAdmin, currency, file);
@@ -456,7 +458,7 @@ function createWorkspaceWithPolicyDraftAndNavigateToIt(
456458
Navigation.goBack();
457459
}
458460
const routeToNavigate = routeToNavigateAfterCreate ?? ROUTES.WORKSPACE_INITIAL.getRoute(policyIDWithDefault, backTo);
459-
savePolicyDraftByNewWorkspace(policyIDWithDefault, policyName, policyOwnerEmail, makeMeAdmin, currency, file);
461+
savePolicyDraftByNewWorkspace(policyIDWithDefault, policyName, policyOwnerEmail, makeMeAdmin, currency, file, isAnnualSubscription);
460462
Navigation.navigate(routeToNavigate, {forceReplace: !transitionFromOldDot});
461463
})
462464
.then(endSignOnTransition);
@@ -471,9 +473,10 @@ function createWorkspaceWithPolicyDraftAndNavigateToIt(
471473
* @param [makeMeAdmin] Optional, leave the calling account as an admin on the policy
472474
* @param [currency] Optional, selected currency for the workspace
473475
* @param [file] Optional, avatar file for workspace
476+
* @param [isAnnualSubscription] Optional, does user have an annual subscription
474477
*/
475-
function savePolicyDraftByNewWorkspace(policyID?: string, policyName?: string, policyOwnerEmail = '', makeMeAdmin = false, currency = '', file?: File) {
476-
createWorkspace(policyOwnerEmail, makeMeAdmin, policyName, policyID, CONST.ONBOARDING_CHOICES.MANAGE_TEAM, currency, file);
478+
function savePolicyDraftByNewWorkspace(policyID?: string, policyName?: string, policyOwnerEmail = '', makeMeAdmin = false, currency = '', file?: File, isAnnualSubscription = false) {
479+
createWorkspace(policyOwnerEmail, makeMeAdmin, policyName, policyID, CONST.ONBOARDING_CHOICES.MANAGE_TEAM, currency, file, undefined, undefined, undefined, isAnnualSubscription);
477480
}
478481

479482
/**

src/libs/actions/Policy/Policy.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ type BuildPolicyDataOptions = {
152152
shouldAddOnboardingTasks?: boolean;
153153
companySize?: OnboardingCompanySize;
154154
userReportedIntegration?: OnboardingAccounting;
155+
isAnnualSubscription?: boolean;
155156
};
156157

157158
const allPolicies: OnyxCollection<Policy> = {};
@@ -1803,8 +1804,9 @@ function buildOptimisticDistanceRateCustomUnits(reportCurrency?: string): Optimi
18031804
* @param [makeMeAdmin] leave the calling account as an admin on the policy
18041805
* @param [currency] Optional, selected currency for the workspace
18051806
* @param [file], avatar file for workspace
1807+
* @param [isAnnualSubscription] Optional, does user have an annual subscription
18061808
*/
1807-
function createDraftInitialWorkspace(policyOwnerEmail = '', policyName = '', policyID = generatePolicyID(), makeMeAdmin = false, currency = '', file?: File) {
1809+
function createDraftInitialWorkspace(policyOwnerEmail = '', policyName = '', policyID = generatePolicyID(), makeMeAdmin = false, currency = '', file?: File, isAnnualSubscription = false) {
18081810
const workspaceName = policyName || generateDefaultWorkspaceName(policyOwnerEmail);
18091811
const {customUnits, outputCurrency} = buildOptimisticDistanceRateCustomUnits(currency);
18101812
const shouldEnableWorkflowsByDefault =
@@ -1816,15 +1818,15 @@ function createDraftInitialWorkspace(policyOwnerEmail = '', policyName = '', pol
18161818
key: `${ONYXKEYS.COLLECTION.POLICY_DRAFTS}${policyID}`,
18171819
value: {
18181820
id: policyID,
1819-
type: CONST.POLICY.TYPE.TEAM,
1821+
type: isAnnualSubscription ? CONST.POLICY.TYPE.CORPORATE : CONST.POLICY.TYPE.TEAM,
18201822
name: workspaceName,
18211823
role: CONST.POLICY.ROLE.ADMIN,
18221824
owner: sessionEmail,
18231825
ownerAccountID: sessionAccountID,
18241826
isPolicyExpenseChatEnabled: true,
18251827
areCategoriesEnabled: true,
18261828
approver: sessionEmail,
1827-
areCompanyCardsEnabled: true,
1829+
areCompanyCardsEnabled: !isAnnualSubscription,
18281830
areExpensifyCardsEnabled: false,
18291831
outputCurrency,
18301832
pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD,
@@ -1888,6 +1890,7 @@ function buildPolicyData(options: BuildPolicyDataOptions = {}) {
18881890
shouldAddOnboardingTasks = true,
18891891
companySize,
18901892
userReportedIntegration,
1893+
isAnnualSubscription = false,
18911894
} = options;
18921895
const workspaceName = policyName || generateDefaultWorkspaceName(policyOwnerEmail);
18931896

@@ -1918,7 +1921,9 @@ function buildPolicyData(options: BuildPolicyDataOptions = {}) {
19181921

19191922
// Determine workspace type based on user reported integration
19201923
const workspaceType =
1921-
userReportedIntegration && (CONST.POLICY.CONNECTIONS.CORPORATE as readonly string[]).includes(userReportedIntegration) ? CONST.POLICY.TYPE.CORPORATE : CONST.POLICY.TYPE.TEAM;
1924+
(!!userReportedIntegration && (CONST.POLICY.CONNECTIONS.CORPORATE as readonly string[]).includes(userReportedIntegration)) || isAnnualSubscription
1925+
? CONST.POLICY.TYPE.CORPORATE
1926+
: CONST.POLICY.TYPE.TEAM;
19221927

19231928
// WARNING: The data below should be kept in sync with the API so we create the policy with the correct configuration.
19241929
const optimisticData: OnyxUpdate[] = [
@@ -1945,7 +1950,7 @@ function buildPolicyData(options: BuildPolicyDataOptions = {}) {
19451950
},
19461951
customUnits,
19471952
areCategoriesEnabled: true,
1948-
areCompanyCardsEnabled: true,
1953+
areCompanyCardsEnabled: workspaceType === CONST.POLICY.TYPE.TEAM,
19491954
areTagsEnabled: false,
19501955
areDistanceRatesEnabled: false,
19511956
areWorkflowsEnabled: shouldEnableWorkflowsByDefault,
@@ -2251,6 +2256,7 @@ function buildPolicyData(options: BuildPolicyDataOptions = {}) {
22512256
return {successData, optimisticData, failureData, params};
22522257
}
22532258

2259+
// eslint-disable-next-line @typescript-eslint/max-params
22542260
function createWorkspace(
22552261
policyOwnerEmail = '',
22562262
makeMeAdmin = false,
@@ -2262,6 +2268,7 @@ function createWorkspace(
22622268
shouldAddOnboardingTasks = true,
22632269
companySize?: OnboardingCompanySize,
22642270
userReportedIntegration?: OnboardingAccounting,
2271+
isAnnualSubscription = false,
22652272
): CreateWorkspaceParams {
22662273
const {optimisticData, failureData, successData, params} = buildPolicyData({
22672274
policyOwnerEmail,
@@ -2274,6 +2281,7 @@ function createWorkspace(
22742281
shouldAddOnboardingTasks,
22752282
companySize,
22762283
userReportedIntegration,
2284+
isAnnualSubscription,
22772285
});
22782286

22792287
API.write(WRITE_COMMANDS.CREATE_WORKSPACE, params, {optimisticData, successData, failureData});

src/pages/workspace/WorkspaceConfirmationPage.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,27 @@ import React from 'react';
22
import ScreenWrapper from '@components/ScreenWrapper';
33
import WorkspaceConfirmationForm from '@components/WorkspaceConfirmationForm';
44
import type {WorkspaceConfirmationSubmitFunctionParams} from '@components/WorkspaceConfirmationForm';
5+
import useOnyx from '@hooks/useOnyx';
56
import useResponsiveLayout from '@hooks/useResponsiveLayout';
67
import {createWorkspaceWithPolicyDraftAndNavigateToIt} from '@libs/actions/App';
78
import {generatePolicyID} from '@libs/actions/Policy/Policy';
89
import getCurrentUrl from '@libs/Navigation/currentUrl';
10+
import CONST from '@src/CONST';
11+
import ONYXKEYS from '@src/ONYXKEYS';
912
import ROUTES from '@src/ROUTES';
1013

1114
function WorkspaceConfirmationPage() {
1215
// It is necessary to use here isSmallScreenWidth because on a wide layout we should always navigate to ROUTES.WORKSPACE_OVERVIEW.
1316
// shouldUseNarrowLayout cannot be used to determine that as this screen is displayed in RHP and shouldUseNarrowLayout always returns true.
1417
// eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
1518
const {isSmallScreenWidth} = useResponsiveLayout();
19+
const [privateSubscription] = useOnyx(ONYXKEYS.NVP_PRIVATE_SUBSCRIPTION, {canBeMissing: false});
20+
const isAnnualSubscription = privateSubscription?.type === CONST.SUBSCRIPTION.TYPE.ANNUAL;
1621

1722
const onSubmit = (params: WorkspaceConfirmationSubmitFunctionParams) => {
1823
const policyID = params.policyID || generatePolicyID();
1924
const routeToNavigate = isSmallScreenWidth ? ROUTES.WORKSPACE_INITIAL.getRoute(policyID) : ROUTES.WORKSPACE_OVERVIEW.getRoute(policyID);
20-
createWorkspaceWithPolicyDraftAndNavigateToIt('', params.name, false, false, '', policyID, params.currency, params.avatarFile as File, routeToNavigate);
25+
createWorkspaceWithPolicyDraftAndNavigateToIt('', params.name, false, false, '', policyID, params.currency, params.avatarFile as File, routeToNavigate, isAnnualSubscription);
2126
};
2227
const currentUrl = getCurrentUrl();
2328
// Approved Accountants and Guides can enter a flow where they make a workspace for other users,

0 commit comments

Comments
 (0)