Skip to content

Commit 93fdaae

Browse files
committed
fix: validation member
1 parent eca0216 commit 93fdaae

4 files changed

Lines changed: 25 additions & 49 deletions

File tree

src/libs/actions/Policy/Member.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -400,11 +400,9 @@ function removeMembers(policy: OnyxEntry<Policy>, selectedMemberEmails: string[]
400400
const employee = policy?.employeeList?.[employeeEmail];
401401
optimisticMembersState[employeeEmail] = optimisticMembersState[employeeEmail] ?? {};
402402
failureMembersState[employeeEmail] = failureMembersState[employeeEmail] ?? {};
403-
404-
if (selectedMemberEmailsWithDuplicates.includes(employeeEmail)) {
403+
if (employee?.email && selectedMemberEmails.includes(employee.email)) {
405404
continue;
406405
}
407-
408406
if (employee?.submitsTo && selectedMemberEmails.includes(employee?.submitsTo)) {
409407
optimisticMembersState[employeeEmail] = {
410408
...optimisticMembersState[employeeEmail],

src/libs/actions/Workflow.ts

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,7 @@ function createApprovalWorkflow({approvalWorkflow, policy, addExpenseApprovalsTa
8080
onyxMethod: Onyx.METHOD.MERGE,
8181
key: `${ONYXKEYS.COLLECTION.POLICY}${policy.id}`,
8282
value: {
83-
employeeList: Object.fromEntries(
84-
Object.keys(updatedEmployees).map((key) => [
85-
key,
86-
previousEmployeeList[key]?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE ? {pendingFields: null} : {pendingAction: null, pendingFields: null},
87-
]),
88-
),
83+
employeeList: Object.fromEntries(Object.keys(updatedEmployees).map((key) => [key, {pendingAction: null, pendingFields: null}])),
8984
},
9085
},
9186
];
@@ -156,12 +151,7 @@ function updateApprovalWorkflow(approvalWorkflow: ApprovalWorkflow, membersToRem
156151
onyxMethod: Onyx.METHOD.MERGE,
157152
key: `${ONYXKEYS.COLLECTION.POLICY}${policy.id}`,
158153
value: {
159-
employeeList: Object.fromEntries(
160-
Object.keys(updatedEmployees).map((key) => [
161-
key,
162-
previousEmployeeList[key]?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE ? {pendingFields: null} : {pendingAction: null, pendingFields: null},
163-
]),
164-
),
154+
employeeList: Object.fromEntries(Object.keys(updatedEmployees).map((key) => [key, {pendingAction: null, pendingFields: null}])),
165155
},
166156
},
167157
];
@@ -219,12 +209,7 @@ function removeApprovalWorkflow(approvalWorkflow: ApprovalWorkflow, policy: Onyx
219209
onyxMethod: Onyx.METHOD.MERGE,
220210
key: `${ONYXKEYS.COLLECTION.POLICY}${policy.id}`,
221211
value: {
222-
employeeList: Object.fromEntries(
223-
Object.keys(updatedEmployees).map((key) => [
224-
key,
225-
previousEmployeeList[key]?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE ? {pendingFields: null} : {pendingAction: null, pendingFields: null},
226-
]),
227-
),
212+
employeeList: Object.fromEntries(Object.keys(updatedEmployees).map((key) => [key, {pendingAction: null}])),
228213
},
229214
},
230215
];

src/pages/workspace/WorkspaceMembersPage.tsx

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -228,22 +228,12 @@ function WorkspaceMembersPage({personalDetails, route, policy}: WorkspaceMembers
228228
* Please see https://github.com/Expensify/App/blob/main/README.md#Security for more details
229229
*/
230230
const removeUsers = () => {
231-
const selectedEmployeesToRemove = [...selectedEmployees];
232-
233-
// eslint-disable-next-line @typescript-eslint/no-deprecated
234-
InteractionManager.runAfterInteractions(() => {
235-
setSelectedEmployees([]);
236-
removeMembers(policy, selectedEmployeesToRemove, policyMemberEmailsToAccountIDs);
237-
238-
// Check if any of the members are approvers
239-
const hasApprovers = selectedEmployeesToRemove.some((email) => isApprover(policy, email));
240-
241-
if (!hasApprovers) {
242-
return;
243-
}
231+
// Check if any of the members are approvers
232+
const hasApprovers = selectedEmployees.some((email) => isApprover(policy, email));
244233

234+
if (hasApprovers) {
245235
const ownerEmail = ownerDetails.login;
246-
for (const login of selectedEmployeesToRemove) {
236+
for (const login of selectedEmployees) {
247237
if (!isApprover(policy, login)) {
248238
continue;
249239
}
@@ -267,6 +257,12 @@ function WorkspaceMembersPage({personalDetails, route, policy}: WorkspaceMembers
267257
}
268258
}
269259
}
260+
}
261+
262+
// eslint-disable-next-line @typescript-eslint/no-deprecated
263+
InteractionManager.runAfterInteractions(() => {
264+
setSelectedEmployees([]);
265+
removeMembers(policy, selectedEmployees, policyMemberEmailsToAccountIDs);
270266
});
271267
};
272268

src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {Str} from 'expensify-common';
22
import React, {useEffect} from 'react';
3-
import {InteractionManager, View} from 'react-native';
3+
import {View} from 'react-native';
44
import type {OnyxEntry} from 'react-native-onyx';
55
import type {ValueOf} from 'type-fest';
66
import Avatar from '@components/Avatar';
@@ -178,28 +178,25 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM
178178
return;
179179
}
180180

181-
// Remove the member and close the modal
182-
removeMemberAndCloseModal();
183-
184181
// Update approval workflows after approver removal
185182
const updatedWorkflows = updateWorkflowDataOnApproverRemoval({
186183
approvalWorkflows,
187184
removedApprover,
188185
ownerDetails,
189186
});
190187

191-
// eslint-disable-next-line @typescript-eslint/no-deprecated
192-
InteractionManager.runAfterInteractions(() => {
193-
for (const workflow of updatedWorkflows) {
194-
if (workflow?.removeApprovalWorkflow) {
195-
const {removeApprovalWorkflow, ...updatedWorkflow} = workflow;
188+
for (const workflow of updatedWorkflows) {
189+
if (workflow?.removeApprovalWorkflow) {
190+
const {removeApprovalWorkflow, ...updatedWorkflow} = workflow;
196191

197-
removeApprovalWorkflowAction(updatedWorkflow, policy);
198-
} else {
199-
updateApprovalWorkflow(workflow, [], [], policy);
200-
}
192+
removeApprovalWorkflowAction(updatedWorkflow, policy);
193+
} else {
194+
updateApprovalWorkflow(workflow, [], [], policy);
201195
}
202-
});
196+
}
197+
198+
// Remove the member and close the modal
199+
removeMemberAndCloseModal();
203200
};
204201

205202
const showRemoveMemberModal = async () => {

0 commit comments

Comments
 (0)