@@ -24,31 +24,17 @@ import * as PhoneNumber from '@libs/PhoneNumber';
2424import { getDefaultApprover , isUserPolicyAdmin } from '@libs/PolicyUtils' ;
2525import * as ReportActionsUtils from '@libs/ReportActionsUtils' ;
2626import * as ReportUtils from '@libs/ReportUtils' ;
27- import { updateWorkflowDataOnApproverRemoval } from '@libs/WorkflowUtils' ;
2827import * as FormActions from '@userActions/FormActions' ;
29- import { getRemoveApprovalWorkflowOnyxData , getUpdateApprovalWorkflowOnyxData } from '@userActions/Workflow' ;
3028import CONST from '@src/CONST' ;
3129import ONYXKEYS from '@src/ONYXKEYS' ;
32- import type {
33- ImportedSpreadsheetMemberData ,
34- InvitedEmailsToAccountIDs ,
35- PersonalDetails ,
36- PersonalDetailsList ,
37- Policy ,
38- PolicyEmployee ,
39- PolicyOwnershipChangeChecks ,
40- Report ,
41- ReportAction ,
42- ReportActions ,
43- } from '@src/types/onyx' ;
44- import type ApprovalWorkflow from '@src/types/onyx/ApprovalWorkflow' ;
30+ import type { ImportedSpreadsheetMemberData , InvitedEmailsToAccountIDs , Policy , PolicyEmployee , PolicyOwnershipChangeChecks , Report , ReportAction , ReportActions } from '@src/types/onyx' ;
4531import type { PendingAction } from '@src/types/onyx/OnyxCommon' ;
4632import type { JoinWorkspaceResolution } from '@src/types/onyx/OriginalMessage' ;
4733import type { ApprovalRule } from '@src/types/onyx/Policy' ;
4834import type { NotificationPreference , Participant } from '@src/types/onyx/Report' ;
4935import type { OnyxData } from '@src/types/onyx/Request' ;
5036import { isEmptyObject } from '@src/types/utils/EmptyObject' ;
51- import { createPolicyExpenseChats , getSetPolicyPreventSelfApprovalOnyxData } from './Policy' ;
37+ import { createPolicyExpenseChats } from './Policy' ;
5238
5339type OnyxDataReturnType = {
5440 optimisticData : OnyxUpdate [ ] ;
@@ -409,13 +395,7 @@ function resetAccountingPreferredExporter(policyID: string, loginList: string[])
409395 * Remove the passed members from the policy employeeList
410396 * Please see https://github.com/Expensify/App/blob/main/README.md#Security for more details
411397 */
412- function removeMembers (
413- policyID : string ,
414- selectedMemberEmails : string [ ] ,
415- policyMemberEmailsToAccountIDs : Record < string , number > ,
416- approvalWorkflows : ApprovalWorkflow [ ] ,
417- allPersonalDetails : OnyxEntry < PersonalDetailsList > ,
418- ) {
398+ function removeMembers ( policyID : string , selectedMemberEmails : string [ ] , policyMemberEmailsToAccountIDs : Record < string , number > ) {
419399 if ( selectedMemberEmails . length === 0 ) {
420400 return ;
421401 }
@@ -427,46 +407,6 @@ function removeMembers(
427407 // eslint-disable-next-line @typescript-eslint/no-deprecated
428408 const policy = getPolicy ( policyID ) ;
429409
430- const optimisticData : OnyxUpdate [ ] = [ ] ;
431- const successData : OnyxUpdate [ ] = [ ] ;
432- const failureData : OnyxUpdate [ ] = [ ] ;
433-
434- // Update approval workflows after member removal
435- // Check if any of the account IDs are approvers
436- const hasApprovers = selectedMemberEmails . some ( ( selectedMemberEmail ) => isApprover ( policy , selectedMemberEmail ) ) ;
437- const ownerDetails = allPersonalDetails ?. [ policy ?. ownerAccountID ?? CONST . DEFAULT_NUMBER_ID ] ?? ( { } as PersonalDetails ) ;
438-
439- if ( hasApprovers ) {
440- const ownerEmail = ownerDetails . login ;
441- // eslint-disable-next-line unicorn/no-array-for-each
442- accountIDs . forEach ( ( accountID ) => {
443- const removedApprover = allPersonalDetails ?. [ accountID ] ;
444- if ( ! removedApprover ?. login || ! ownerEmail ) {
445- return ;
446- }
447- const updatedWorkflows = updateWorkflowDataOnApproverRemoval ( {
448- approvalWorkflows,
449- removedApprover,
450- ownerDetails,
451- } ) ;
452- // eslint-disable-next-line unicorn/no-array-for-each
453- updatedWorkflows . forEach ( ( workflow ) => {
454- if ( workflow ?. removeApprovalWorkflow ) {
455- const { removeApprovalWorkflow, ...updatedWorkflow } = workflow ;
456- const onyxDataForRemoveApprovalWorkflow = getRemoveApprovalWorkflowOnyxData ( updatedWorkflow , policy ) ;
457- optimisticData . push ( ...( onyxDataForRemoveApprovalWorkflow . optimisticData ?? [ ] ) ) ;
458- successData . push ( ...( onyxDataForRemoveApprovalWorkflow . successData ?? [ ] ) ) ;
459- failureData . push ( ...( onyxDataForRemoveApprovalWorkflow . failureData ?? [ ] ) ) ;
460- } else {
461- const onyxDataForUpdateApprovalWorkflow = getUpdateApprovalWorkflowOnyxData ( workflow , [ ] , [ ] , policy ) ;
462- optimisticData . push ( ...( onyxDataForUpdateApprovalWorkflow . optimisticData ?? [ ] ) ) ;
463- successData . push ( ...( onyxDataForUpdateApprovalWorkflow . successData ?? [ ] ) ) ;
464- failureData . push ( ...( onyxDataForUpdateApprovalWorkflow . failureData ?? [ ] ) ) ;
465- }
466- } ) ;
467- } ) ;
468- }
469-
470410 const workspaceChats = ReportUtils . getWorkspaceChats ( policyID , accountIDs ) ;
471411 const optimisticClosedReportActions = workspaceChats . map ( ( ) =>
472412 ReportUtils . buildOptimisticClosedReportAction ( sessionEmail , policy ?. name ?? '' , CONST . REPORT . ARCHIVE_REASON . REMOVED_FROM_POLICY ) ,
@@ -537,32 +477,38 @@ function removeMembers(
537477 const approvalRules : ApprovalRule [ ] = policy ?. rules ?. approvalRules ?? [ ] ;
538478 const optimisticApprovalRules = approvalRules . filter ( ( rule ) => ! selectedMemberEmails . includes ( rule ?. approver ?? '' ) ) ;
539479
540- optimisticData . push ( {
541- onyxMethod : Onyx . METHOD . MERGE ,
542- key : policyKey ,
543- value : {
544- employeeList : optimisticMembersState ,
545- approver : selectedMemberEmails . includes ( policy ?. approver ?? '' ) ? policy ?. owner : policy ?. approver ,
546- rules : {
547- ...( policy ?. rules ?? { } ) ,
548- approvalRules : optimisticApprovalRules ,
480+ const optimisticData : OnyxUpdate [ ] = [
481+ {
482+ onyxMethod : Onyx . METHOD . MERGE ,
483+ key : policyKey ,
484+ value : {
485+ employeeList : optimisticMembersState ,
486+ approver : selectedMemberEmails . includes ( policy ?. approver ?? '' ) ? policy ?. owner : policy ?. approver ,
487+ rules : {
488+ ...( policy ?. rules ?? { } ) ,
489+ approvalRules : optimisticApprovalRules ,
490+ } ,
549491 } ,
550492 } ,
551- } ) ;
493+ ] ;
552494 optimisticData . push ( ...announceRoomMembers . optimisticData , ...adminRoomMembers . optimisticData , ...preferredExporterOnyxData . optimisticData ) ;
553495
554- successData . push ( {
555- onyxMethod : Onyx . METHOD . MERGE ,
556- key : policyKey ,
557- value : { employeeList : successMembersState } ,
558- } ) ;
496+ const successData : OnyxUpdate [ ] = [
497+ {
498+ onyxMethod : Onyx . METHOD . MERGE ,
499+ key : policyKey ,
500+ value : { employeeList : successMembersState } ,
501+ } ,
502+ ] ;
559503 successData . push ( ...announceRoomMembers . successData , ...adminRoomMembers . successData , ...preferredExporterOnyxData . successData ) ;
560504
561- failureData . push ( {
562- onyxMethod : Onyx . METHOD . MERGE ,
563- key : policyKey ,
564- value : { employeeList : failureMembersState , approver : policy ?. approver , rules : policy ?. rules } ,
565- } ) ;
505+ const failureData : OnyxUpdate [ ] = [
506+ {
507+ onyxMethod : Onyx . METHOD . MERGE ,
508+ key : policyKey ,
509+ value : { employeeList : failureMembersState , approver : policy ?. approver , rules : policy ?. rules } ,
510+ } ,
511+ ] ;
566512 failureData . push ( ...announceRoomMembers . failureData , ...adminRoomMembers . failureData , ...preferredExporterOnyxData . failureData ) ;
567513
568514 const pendingChatMembers = ReportUtils . getPendingChatMembers ( accountIDs , [ ] , CONST . RED_BRICK_ROAD_PENDING_ACTION . DELETE ) ;
@@ -701,16 +647,6 @@ function removeMembers(
701647 policyID,
702648 } ;
703649
704- // Update "Prevent Self Approvals" after member removal
705- const previousEmployeesCount = Object . values ( policy ?. employeeList ?? { } ) . filter ( ( employee ) => employee . pendingAction !== CONST . RED_BRICK_ROAD_PENDING_ACTION . DELETE ) . length ;
706- const remainingEmployeeCount = previousEmployeesCount - accountIDs . length ;
707- if ( remainingEmployeeCount === 1 && policy ?. preventSelfApproval ) {
708- const onyxDataForSetPolicyPreventSelfApproval = getSetPolicyPreventSelfApprovalOnyxData ( policyID , false ) ;
709- optimisticData . push ( ...( onyxDataForSetPolicyPreventSelfApproval . optimisticData ?? [ ] ) ) ;
710- successData . push ( ...( onyxDataForSetPolicyPreventSelfApproval . successData ?? [ ] ) ) ;
711- failureData . push ( ...( onyxDataForSetPolicyPreventSelfApproval . failureData ?? [ ] ) ) ;
712- }
713-
714650 API . write ( WRITE_COMMANDS . DELETE_MEMBERS_FROM_WORKSPACE , params , { optimisticData, successData, failureData} ) ;
715651}
716652
0 commit comments