@@ -11,6 +11,7 @@ import cn from 'classnames'
11
11
import { getTCMemberURL } from '../../../config/constants'
12
12
import ReactSVG from 'react-svg'
13
13
import { getRatingLevel , sortList } from '../../../util/tc'
14
+ import { getCurrentPhase } from '../../../util/phase'
14
15
import styles from './styles.module.scss'
15
16
import ResourcesDeleteModal from '../ResourcesDeleteModal'
16
17
@@ -63,7 +64,7 @@ export default class Resources extends React.Component {
63
64
} ,
64
65
selectedTab : 0 ,
65
66
showDeleteResourceModal : null ,
66
- exceptionHandlesDeleteList : { }
67
+ exceptionResourceIdDeleteList : { }
67
68
}
68
69
69
70
this . sortResources = this . sortResources . bind ( this )
@@ -89,11 +90,13 @@ export default class Resources extends React.Component {
89
90
}
90
91
if (
91
92
! _ . isEqual ( prevProps . submissions , submissions ) ||
92
- ! _ . isEqual ( prevProps . challenge , challenge )
93
+ ! _ . isEqual ( prevProps . challenge , challenge ) ||
94
+ ! _ . isEqual ( prevProps . resources , resources )
93
95
) {
94
96
this . updateExceptionHandlesDelete ( )
95
97
}
96
98
}
99
+
97
100
onSortChange ( sort ) {
98
101
this . setState ( {
99
102
resourcesSort : sort
@@ -143,13 +146,32 @@ export default class Resources extends React.Component {
143
146
* Don't allow deletion of submitters who submitted, or creator of challenge
144
147
*/
145
148
updateExceptionHandlesDelete ( ) {
146
- const { submissions, challenge } = this . props
149
+ const { submissions, challenge, resources } = this . props
150
+ const currentPhase = getCurrentPhase ( challenge ) . toLowerCase ( )
151
+ const isCurrentPhasesNotSubmissionOrRegistration = _ . every ( [ 'submission' , 'registration' ] , ( phase ) => currentPhase . indexOf ( phase ) < 0 )
147
152
const exceptionHandlesDeleteList = { }
153
+ // do not allow to delete owner of challenge
148
154
exceptionHandlesDeleteList [ challenge . createdBy ] = true
149
155
_ . forEach ( submissions , ( s ) => {
156
+ // do not allow to delete member that submit submission
150
157
exceptionHandlesDeleteList [ s . createdBy ] = true
151
158
} )
152
- this . setState ( { exceptionHandlesDeleteList } )
159
+
160
+ const exceptionResourceIdDeleteList = { }
161
+ _ . forEach ( resources , ( resourceItem ) => {
162
+ if (
163
+ (
164
+ // If the current phase is not submission or registration
165
+ // then we will disable removing reviewers and copilots.
166
+ _ . some ( [ 'reviewer' , 'copilot' ] , ( role ) => `${ resourceItem . role } ` . toLowerCase ( ) . indexOf ( role ) >= 0 ) &&
167
+ isCurrentPhasesNotSubmissionOrRegistration
168
+ ) ||
169
+ exceptionHandlesDeleteList [ resourceItem . memberHandle ]
170
+ ) {
171
+ exceptionResourceIdDeleteList [ resourceItem . id ] = true
172
+ }
173
+ } )
174
+ this . setState ( { exceptionResourceIdDeleteList } )
153
175
}
154
176
155
177
/**
@@ -209,7 +231,7 @@ export default class Resources extends React.Component {
209
231
const { challenge, canEditResource, deleteResource } = this . props
210
232
const { track } = challenge
211
233
212
- const { sortedResources, selectedTab, showDeleteResourceModal, exceptionHandlesDeleteList } = this . state
234
+ const { sortedResources, selectedTab, showDeleteResourceModal, exceptionResourceIdDeleteList } = this . state
213
235
214
236
const { field, sort } = this . getResourcesSortParam ( )
215
237
const revertSort = sort === 'desc' ? 'asc' : 'desc'
@@ -376,7 +398,7 @@ export default class Resources extends React.Component {
376
398
< span role = 'cell' > { formatDate ( r . created ) } </ span >
377
399
</ td >
378
400
379
- { ( canEditResource && ! exceptionHandlesDeleteList [ r . memberHandle ] ) ? (
401
+ { ( canEditResource && ! exceptionResourceIdDeleteList [ r . id ] ) ? (
380
402
< td className = { cn ( styles [ 'col-8Table' ] , styles [ 'col-bodyTable' ] ) } >
381
403
< button
382
404
onClick = { ( ) => {
0 commit comments