Skip to content

Commit ceca9fa

Browse files
authored
Merge pull request #3411 from sumitdaga/issue-3406
feat: Allow accept/decline multiple copilot invitation requests in parallel. Also, it fixes issue #3406
2 parents 53619ca + bc0f5db commit ceca9fa

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/components/TeamManagement/TopcoderManagementDialog.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class TopcoderManagementDialog extends React.Component {
2424
managerType: {},
2525
showAlreadyMemberError: false,
2626
errorMessage: null,
27-
processingInviteRequestId: null, // id of invite which request is being processing
27+
processingInviteRequestIds: [], // ids of invites for which request is being processed
2828
}
2929

3030
this.onUserRoleChange = this.onUserRoleChange.bind(this)
@@ -156,7 +156,7 @@ class TopcoderManagementDialog extends React.Component {
156156
members, currentUser, isMember, removeMember, onCancel, removeInvite, approveOrDecline, topcoderTeamInvites = [],
157157
selectedMembers, processingInvites, updatingMemberIds
158158
} = this.props
159-
const { processingInviteRequestId } = this.state
159+
const { processingInviteRequestIds } = this.state
160160
const showRemove = currentUser.isAdmin || (isMember && checkPermission(PERMISSIONS.INVITE_TOPCODER_MEMBER))
161161
const showApproveDecline = currentUser.isAdmin || currentUser.isCopilotManager
162162
let i = 0
@@ -274,21 +274,21 @@ class TopcoderManagementDialog extends React.Component {
274274
removeInvite(invite)
275275
}
276276
const approve = () => {
277-
this.setState({ processingInviteRequestId: invite.id })
277+
this.setState(prevState => ({ processingInviteRequestIds: [ ...prevState.processingInviteRequestIds, invite.id ] }))
278278
approveOrDecline({
279279
userId: invite.userId,
280280
status: 'request_approved'
281281
}).then(() => {
282-
this.setState({ processingInviteRequestId: null })
282+
this.setState(prevState => ({ processingInviteRequestIds: _.xor(prevState.processingInviteRequestIds, [invite.id]) }))
283283
})
284284
}
285285
const decline = () => {
286-
this.setState({ processingInviteRequestId: invite.id })
286+
this.setState(prevState => ({ processingInviteRequestIds: [ ...prevState.processingInviteRequestIds, invite.id ] }))
287287
approveOrDecline({
288288
userId: invite.userId,
289289
status: 'request_rejected'
290290
}).then(() => {
291-
this.setState({ processingInviteRequestId: null })
291+
this.setState(prevState => ({ processingInviteRequestIds: _.xor(prevState.processingInviteRequestIds, [invite.id]) }))
292292
})
293293
}
294294
const userFullName = getFullNameWithFallback(invite.member)
@@ -313,7 +313,7 @@ class TopcoderManagementDialog extends React.Component {
313313
{
314314
invite.status===PROJECT_MEMBER_INVITE_STATUS_REQUESTED && showApproveDecline &&
315315
<div className="member-remove">
316-
{!processingInviteRequestId ? ([
316+
{!_.includes(processingInviteRequestIds, invite.id) ? ([
317317
<span onClick={approve} key="approve">approve</span>,
318318
<span onClick={decline} key="decline">decline</span>
319319
]) : (

0 commit comments

Comments
 (0)