Skip to content
Merged
5 changes: 5 additions & 0 deletions src/libs/API/parameters/DisablePolicyApprovalsParams.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type DisablePolicyApprovalsParams = {
policyID: string;
};

export default DisablePolicyApprovalsParams;
1 change: 1 addition & 0 deletions src/libs/API/parameters/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ export type {default as SetWorkspaceAutoHarvestingParams} from './SetWorkspaceAu
export type {default as SetWorkspaceAutoReportingFrequencyParams} from './SetWorkspaceAutoReportingFrequencyParams';
export type {default as SetWorkspaceAutoReportingMonthlyOffsetParams} from './SetWorkspaceAutoReportingMonthlyOffsetParams';
export type {default as SetWorkspaceApprovalModeParams} from './SetWorkspaceApprovalModeParams';
export type {default as DisablePolicyApprovalsParams} from './DisablePolicyApprovalsParams';
export type {default as SetWorkspacePayerParams} from './SetWorkspacePayerParams';
export type {default as SetWorkspaceReimbursementParams} from './SetWorkspaceReimbursementParams';
export type {default as SetWorkspaceDefaultSpendCategoryParams} from './SetWorkspaceDefaultSpendCategoryParams';
Expand Down
2 changes: 2 additions & 0 deletions src/libs/API/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ const WRITE_COMMANDS = {
SET_WORKSPACE_AUTO_REPORTING_FREQUENCY: 'SetWorkspaceAutoReportingFrequency',
SET_WORKSPACE_AUTO_REPORTING_MONTHLY_OFFSET: 'SetWorkspaceAutoReportingOffset',
SET_WORKSPACE_APPROVAL_MODE: 'SetWorkspaceApprovalMode',
DISABLE_POLICY_APPROVALS: 'DisablePolicyApprovals',
SET_WORKSPACE_PAYER: 'SetWorkspacePayer',
SET_WORKSPACE_REIMBURSEMENT: 'SetWorkspaceReimbursement',
SET_POLICY_DEFAULT_REPORT_TITLE: 'SetPolicyDefaultReportTitle',
Expand Down Expand Up @@ -785,6 +786,7 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.SET_WORKSPACE_AUTO_REPORTING_FREQUENCY]: Parameters.SetWorkspaceAutoReportingFrequencyParams;
[WRITE_COMMANDS.SET_WORKSPACE_AUTO_REPORTING_MONTHLY_OFFSET]: Parameters.SetWorkspaceAutoReportingMonthlyOffsetParams;
[WRITE_COMMANDS.SET_WORKSPACE_APPROVAL_MODE]: Parameters.SetWorkspaceApprovalModeParams;
[WRITE_COMMANDS.DISABLE_POLICY_APPROVALS]: Parameters.DisablePolicyApprovalsParams;
[WRITE_COMMANDS.SET_WORKSPACE_PAYER]: Parameters.SetWorkspacePayerParams;
[WRITE_COMMANDS.SET_WORKSPACE_REIMBURSEMENT]: Parameters.SetWorkspaceReimbursementParams;
[WRITE_COMMANDS.SET_POLICY_DEFAULT_REPORT_TITLE]: Parameters.SetPolicyDefaultReportTitleParams;
Expand Down
54 changes: 44 additions & 10 deletions src/libs/actions/Policy/Policy.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable max-lines */
import {PUBLIC_DOMAINS_SET, Str} from 'expensify-common';
import escapeRegExp from 'lodash/escapeRegExp';
import type {OnyxCollection, OnyxEntry, OnyxUpdate} from 'react-native-onyx';
import type {OnyxCollection, OnyxCollectionInputValue, OnyxEntry, OnyxUpdate} from 'react-native-onyx';
import Onyx from 'react-native-onyx';
import type {TupleToUnion, ValueOf} from 'type-fest';
import type {ReportExportType} from '@components/ButtonWithDropdownMenu/types';
Expand All @@ -16,6 +16,7 @@
CreateWorkspaceParams,
DeleteWorkspaceAvatarParams,
DeleteWorkspaceParams,
DisablePolicyApprovalsParams,
DisablePolicyBillableModeParams,
DowngradeToTeamParams,
DuplicateWorkspaceParams,
Expand Down Expand Up @@ -115,6 +116,7 @@
Policy,
PolicyCategories,
PolicyCategory,
PolicyEmployee,
Report,
ReportAction,
ReportActions,
Expand Down Expand Up @@ -224,7 +226,7 @@
};

const deprecatedAllPolicies: OnyxCollection<Policy> = {};
Onyx.connect({

Check warning on line 229 in src/libs/actions/Policy/Policy.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: (val, key) => {
if (!key) {
Expand All @@ -240,7 +242,7 @@
});

let deprecatedAllReportActions: OnyxCollection<ReportActions>;
Onyx.connect({

Check warning on line 245 in src/libs/actions/Policy/Policy.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.REPORT_ACTIONS,
waitForCollectionCallback: true,
callback: (actions) => {
Expand All @@ -250,7 +252,7 @@

let deprecatedSessionEmail = '';
let deprecatedSessionAccountID = 0;
Onyx.connect({

Check warning on line 255 in src/libs/actions/Policy/Policy.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: (val) => {
deprecatedSessionEmail = val?.email ?? '';
Expand All @@ -259,7 +261,7 @@
});

let deprecatedAllPersonalDetails: OnyxEntry<PersonalDetailsList>;
Onyx.connect({

Check warning on line 264 in src/libs/actions/Policy/Policy.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.PERSONAL_DETAILS_LIST,
callback: (val) => (deprecatedAllPersonalDetails = val),
});
Expand Down Expand Up @@ -828,6 +830,29 @@
...value,
} as OnyxEntry<Policy>;

const optimisticMembersState: OnyxCollectionInputValue<PolicyEmployee> = {};

if (approvalMode === CONST.POLICY.APPROVAL_MODE.OPTIONAL) {
for (const employeeEmail of Object.keys(policy?.employeeList ?? {})) {
Comment thread
cretadn22 marked this conversation as resolved.
const employee = policy?.employeeList?.[employeeEmail];
const updates: Partial<PolicyEmployee> = {};

if (employee?.submitsTo) {
updates.submitsTo = policy?.owner;
}
if (employee?.forwardsTo) {
updates.forwardsTo = '';
}
if (employee?.overLimitForwardsTo) {
updates.overLimitForwardsTo = '';
}

if (Object.keys(updates).length > 0) {
optimisticMembersState[employeeEmail] = updates;
}
}
}

const currentUserAccountID = deprecatedSessionAccountID ?? CONST.DEFAULT_NUMBER_ID;
const currentUserEmail = deprecatedSessionEmail ?? '';

Expand Down Expand Up @@ -886,6 +911,7 @@
value: {
...value,
pendingFields: {approvalMode: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE},
employeeList: optimisticMembersState,
},
},
];
Expand Down Expand Up @@ -920,15 +946,23 @@
},
];

const params: SetWorkspaceApprovalModeParams = {
policyID,
value: JSON.stringify({
...value,
// This property should now be set to false for all Collect policies
isAutoApprovalEnabled: false,
}),
};
API.write(WRITE_COMMANDS.SET_WORKSPACE_APPROVAL_MODE, params, {optimisticData, failureData, successData});
if (approvalMode === CONST.POLICY.APPROVAL_MODE.OPTIONAL) {
const params: DisablePolicyApprovalsParams = {
policyID,
};
API.write(WRITE_COMMANDS.DISABLE_POLICY_APPROVALS, params, {optimisticData, failureData, successData});
} else {
const params: SetWorkspaceApprovalModeParams = {
policyID,
value: JSON.stringify({
...value,
// This property should now be set to false for all Collect policies
isAutoApprovalEnabled: false,
}),
};
// eslint-disable-next-line rulesdir/no-multiple-api-calls
API.write(WRITE_COMMANDS.SET_WORKSPACE_APPROVAL_MODE, params, {optimisticData, failureData, successData});
}
}

function setWorkspacePayer(policyID: string, reimburserEmail: string) {
Expand Down
Loading
Loading