@@ -61,6 +61,45 @@ const normalizeTrackForScorecards = (challenge, metadata) => {
6161 return null
6262}
6363
64+ const normalizePhaseToken = ( value ) => ( value || '' )
65+ . toString ( )
66+ . toLowerCase ( )
67+ . trim ( )
68+ . replace ( / \b p h a s e \b $ / , '' )
69+ . replace ( / [ - _ \s ] / g, '' )
70+
71+ const normalizeIdValue = ( value ) => (
72+ value === undefined || value === null
73+ ? ''
74+ : value . toString ( )
75+ )
76+
77+ const getScorecardsForPhase = ( scorecards = [ ] , phases = [ ] , phaseId ) => {
78+ const normalizedPhaseId = normalizeIdValue ( phaseId )
79+ if ( ! normalizedPhaseId ) {
80+ return [ ]
81+ }
82+
83+ const selectedPhase = phases . find ( phase => (
84+ normalizeIdValue ( phase . phaseId ) === normalizedPhaseId ||
85+ normalizeIdValue ( phase . id ) === normalizedPhaseId
86+ ) )
87+
88+ if ( ! selectedPhase || ! selectedPhase . name ) {
89+ return [ ]
90+ }
91+
92+ const normalizedPhaseName = normalizePhaseToken ( selectedPhase . name )
93+ if ( ! normalizedPhaseName ) {
94+ return [ ]
95+ }
96+
97+ return scorecards . filter ( scorecard => (
98+ scorecard &&
99+ normalizePhaseToken ( scorecard . type ) === normalizedPhaseName
100+ ) )
101+ }
102+
64103class ChallengeReviewerField extends Component {
65104 constructor ( props ) {
66105 super ( props )
@@ -602,6 +641,31 @@ class ChallengeReviewerField extends Component {
602641 baseCoefficient : defaultReviewer . baseCoefficient ,
603642 incrementalCoefficient : defaultReviewer . incrementalCoefficient
604643 } )
644+
645+ if ( updatedReviewers [ index ] && ( updatedReviewers [ index ] . isMemberReview !== false ) ) {
646+ const { metadata = { } } = this . props
647+ const scorecardsForPhase = getScorecardsForPhase (
648+ metadata . scorecards || [ ] ,
649+ challenge . phases || [ ] ,
650+ value
651+ )
652+ const currentScorecardId = normalizeIdValue ( updatedReviewers [ index ] . scorecardId )
653+ const hasCurrentScorecard = scorecardsForPhase . some ( scorecard => (
654+ normalizeIdValue ( scorecard . id ) === currentScorecardId
655+ ) )
656+
657+ if ( ! hasCurrentScorecard ) {
658+ const defaultScorecardId = normalizeIdValue ( defaultReviewer && defaultReviewer . scorecardId )
659+ const hasDefaultScorecard = defaultScorecardId && scorecardsForPhase . some ( scorecard => (
660+ normalizeIdValue ( scorecard . id ) === defaultScorecardId
661+ ) )
662+ const fallbackScorecardId = hasDefaultScorecard
663+ ? defaultScorecardId
664+ : normalizeIdValue ( scorecardsForPhase [ 0 ] && scorecardsForPhase [ 0 ] . id )
665+
666+ fieldUpdate . scorecardId = fallbackScorecardId || ''
667+ }
668+ }
605669 }
606670
607671 if ( field === 'memberReviewerCount' ) {
@@ -661,29 +725,12 @@ class ChallengeReviewerField extends Component {
661725 const { challenge, metadata = { } , readOnly = false } = this . props
662726 const { scorecards = [ ] , workflows = [ ] } = metadata
663727 const validationErrors = challenge . submitTriggered ? this . validateReviewer ( reviewer ) : { }
664- const selectedPhase = challenge . phases . find ( p => p . phaseId === reviewer . phaseId )
728+ const filteredScorecards = getScorecardsForPhase (
729+ scorecards ,
730+ challenge . phases || [ ] ,
731+ reviewer . phaseId
732+ )
665733 const isDesignChallenge = challenge && challenge . trackId === DES_TRACK_ID
666- const normalize = ( value ) => ( value || '' )
667- . toString ( )
668- . toLowerCase ( )
669- . trim ( )
670- . replace ( / \b p h a s e \b $ / , '' )
671- . replace ( / [ - _ \s ] / g, '' )
672-
673- const filteredScorecards = scorecards . filter ( item => {
674- if ( ! selectedPhase || ! selectedPhase . name || ! item || ! item . type ) {
675- return false
676- }
677-
678- const normalizedType = normalize ( item . type )
679- const normalizedPhaseName = normalize ( selectedPhase . name )
680-
681- if ( ! normalizedType || ! normalizedPhaseName ) {
682- return false
683- }
684-
685- return normalizedType === normalizedPhaseName
686- } )
687734
688735 return (
689736 < div key = { `reviewer-${ index } ` } className = { styles . reviewerForm } >
0 commit comments