@@ -9,6 +9,14 @@ import styles from './ChallengeReviewer-Field.module.scss'
99import { validateValue } from '../../../util/input-check'
1010import AssignedMemberField from '../AssignedMember-Field'
1111import { getResourceRoleByName } from '../../../util/tc'
12+ import { isEqual } from 'lodash'
13+
14+ const ResourceToPhaseNameMap = {
15+ Reviewer : 'Review' ,
16+ Approver : 'Approval' ,
17+ Screener : 'Screening' ,
18+ 'Iterative Reviewer' : 'Iterative Review'
19+ }
1220
1321class ChallengeReviewerField extends Component {
1422 constructor ( props ) {
@@ -31,6 +39,8 @@ class ChallengeReviewerField extends Component {
3139 this . syncAssignmentsOnCountChange = this . syncAssignmentsOnCountChange . bind ( this )
3240 this . handlePhaseChangeWithReassign = this . handlePhaseChangeWithReassign . bind ( this )
3341 this . handleToggleShouldOpen = this . handleToggleShouldOpen . bind ( this )
42+ this . updateAssignedMembers = this . updateAssignedMembers . bind ( this )
43+ this . doUpdateAssignedMembers = true
3444 }
3545
3646 isAIReviewer ( reviewer ) {
@@ -95,8 +105,50 @@ class ChallengeReviewerField extends Component {
95105 this . loadWorkflows ( )
96106 }
97107
108+ updateAssignedMembers ( challengeResources , challenge ) {
109+ const reviewersWithPhaseName = challenge . reviewers . map ( item => {
110+ const phase = challenge . phases && challenge . phases . find ( p => p . phaseId === item . phaseId )
111+ return {
112+ ...item ,
113+ name : phase . name
114+ }
115+ } )
116+
117+ const reviewerIndex = { }
118+ reviewersWithPhaseName . forEach ( ( reviewer , index ) => {
119+ if ( ! reviewerIndex [ reviewer . name ] ) {
120+ reviewerIndex [ reviewer . name ] = index
121+ }
122+ } )
123+
124+ const assignedMembers = { }
125+
126+ challengeResources . forEach ( ( resource ) => {
127+ const index = reviewerIndex [ ResourceToPhaseNameMap [ resource . roleName ] ]
128+
129+ if ( ! assignedMembers [ index ] ) {
130+ assignedMembers [ index ] = [ {
131+ handle : resource . memberHandle ,
132+ userId : resource . memberId
133+ } ]
134+ return
135+ }
136+
137+ assignedMembers [ index ] . push ( {
138+ handle : resource . memberHandle ,
139+ userId : resource . memberId
140+ } )
141+ } )
142+
143+ if ( ! isEqual ( this . state . assignedMembers , assignedMembers ) ) {
144+ this . setState ( {
145+ assignedMembers
146+ } )
147+ }
148+ }
149+
98150 componentDidUpdate ( prevProps ) {
99- const { challenge } = this . props
151+ const { challenge, challengeResources } = this . props
100152 const prevChallenge = prevProps . challenge
101153
102154 if ( challenge && prevChallenge &&
@@ -106,6 +158,10 @@ class ChallengeReviewerField extends Component {
106158 }
107159 }
108160
161+ if ( challenge && this . doUpdateAssignedMembers ) {
162+ this . updateAssignedMembers ( challengeResources , challenge )
163+ }
164+
109165 if ( challenge && prevChallenge &&
110166 ( challenge . typeId !== prevChallenge . typeId || challenge . trackId !== prevChallenge . trackId ) ) {
111167 this . loadDefaultReviewers ( )
@@ -157,13 +213,18 @@ class ChallengeReviewerField extends Component {
157213 const oldHandle = prevMember && prevMember . handle
158214 // replaceResourceInRole gracefully handles deletion when newMember is falsy
159215 replaceResourceInRole ( challenge . id , role . id , newMemberHandle , oldHandle )
160-
216+ this . doUpdateAssignedMembers = false
161217 return {
162218 assignedMembers : {
163219 ...prev . assignedMembers ,
164220 [ reviewerIndex ] : newHandles
165221 }
166222 }
223+ } , ( ) => {
224+ const n = this
225+ setTimeout ( ( ) => {
226+ n . doUpdateAssignedMembers = true
227+ } , 1000 )
167228 } )
168229 }
169230
@@ -343,7 +404,8 @@ class ChallengeReviewerField extends Component {
343404 incrementalCoefficient : ( defaultReviewer && defaultReviewer . incrementalCoefficient ) || 0 ,
344405 type : isAIReviewer
345406 ? undefined
346- : ( defaultReviewer && defaultReviewer . opportunityType ) || REVIEW_OPPORTUNITY_TYPES . REGULAR_REVIEW
407+ : ( defaultReviewer && defaultReviewer . opportunityType ) || REVIEW_OPPORTUNITY_TYPES . REGULAR_REVIEW ,
408+ shouldOpenOpportunity : false
347409 }
348410
349411 if ( isAIReviewer ) {
@@ -901,12 +963,14 @@ ChallengeReviewerField.propTypes = {
901963 loadWorkflows : PropTypes . func . isRequired ,
902964 replaceResourceInRole : PropTypes . func . isRequired ,
903965 createResource : PropTypes . func . isRequired ,
904- deleteResource : PropTypes . func . isRequired
966+ deleteResource : PropTypes . func . isRequired ,
967+ challengeResources : PropTypes . array . isRequired
905968}
906969
907970const mapStateToProps = ( state ) => ( {
908971 metadata : state . challenges . metadata || { } ,
909- isLoading : state . challenges . isLoading
972+ isLoading : state . challenges . isLoading ,
973+ challengeResources : state . challenges . challengeResources
910974} )
911975
912976const mapDispatchToProps = {
0 commit comments