Skip to content

Commit 355a653

Browse files
committed
Delete option is not available in WM for some roles when the challenge is not started
https://topcoder.atlassian.net/browse/PROD-4328
1 parent 3c7bbc6 commit 355a653

File tree

2 files changed

+57
-22
lines changed

2 files changed

+57
-22
lines changed

src/components/ChallengeEditor/ChallengeViewTabs/index.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ const ChallengeViewTabs = ({
6060
if (!loggedInUser) {
6161
return null
6262
}
63-
const loggedInUserResourceTmps = _.filter(_.cloneDeep(challengeResources), { memberId: `${loggedInUser.userId}` })
63+
const loggedInUserResourceTmps = _.cloneDeep(_.filter(challengeResources, { memberId: `${loggedInUser.userId}` }))
6464
let loggedInUserResourceTmp = null
6565
if (loggedInUserResourceTmps.length > 0) {
6666
loggedInUserResourceTmp = loggedInUserResourceTmps[0]
@@ -79,11 +79,16 @@ const ChallengeViewTabs = ({
7979
[loggedInUser, challengeResources, metadata]
8080
)
8181
const canEditResource = useMemo(
82-
() =>
83-
((loggedInUserResource &&
84-
checkEditResourceRoles(loggedInUserResource.roles)) ||
85-
checkAdmin(token)) &&
86-
selectedTab === 1,
82+
() => {
83+
return selectedTab === 1 &&
84+
(
85+
(
86+
loggedInUserResource &&
87+
checkEditResourceRoles(loggedInUserResource.roles)
88+
) ||
89+
checkAdmin(token)
90+
)
91+
},
8792
[loggedInUserResource, token, selectedTab]
8893
)
8994

@@ -288,6 +293,7 @@ const ChallengeViewTabs = ({
288293
canEditResource={canEditResource}
289294
deleteResource={deleteResource}
290295
submissions={submissions}
296+
loggedInUserResource={loggedInUserResource}
291297
/>
292298
)}
293299
{selectedTab === 2 && (

src/components/ChallengeEditor/Resources/index.js

Lines changed: 45 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import PT from 'prop-types'
88
import moment from 'moment'
99
import _ from 'lodash'
1010
import cn from 'classnames'
11-
import { getTCMemberURL } from '../../../config/constants'
11+
import { getTCMemberURL, CHALLENGE_STATUS } from '../../../config/constants'
1212
import ReactSVG from 'react-svg'
1313
import { getRatingLevel, sortList } from '../../../util/tc'
1414
import { getCurrentPhase } from '../../../util/phase'
@@ -81,7 +81,13 @@ export default class Resources extends React.Component {
8181
}
8282

8383
componentDidUpdate (prevProps) {
84-
const { resources, resourcesSort, submissions, challenge } = this.props
84+
const {
85+
resources,
86+
resourcesSort,
87+
submissions,
88+
challenge,
89+
loggedInUserResource
90+
} = this.props
8591
if (
8692
!_.isEqual(prevProps.resources, resources) ||
8793
!_.isEqual(prevProps.resourcesSort, resourcesSort)
@@ -91,7 +97,8 @@ export default class Resources extends React.Component {
9197
if (
9298
!_.isEqual(prevProps.submissions, submissions) ||
9399
!_.isEqual(prevProps.challenge, challenge) ||
94-
!_.isEqual(prevProps.resources, resources)
100+
!_.isEqual(prevProps.resources, resources) ||
101+
!_.isEqual(prevProps.loggedInUserResource, loggedInUserResource)
95102
) {
96103
this.updateExceptionHandlesDelete()
97104
}
@@ -143,30 +150,50 @@ export default class Resources extends React.Component {
143150

144151
/**
145152
* Update exception handles delete
146-
* Don't allow deletion of submitters who submitted, or creator of challenge
147153
*/
148154
updateExceptionHandlesDelete () {
149-
const { submissions, challenge, resources } = this.props
155+
const {
156+
submissions,
157+
challenge,
158+
resources,
159+
loggedInUserResource
160+
} = this.props
150161
const currentPhase = getCurrentPhase(challenge).toLowerCase()
151162
const isCurrentPhasesNotSubmissionOrRegistration = _.every(['submission', 'registration'], (phase) => currentPhase.indexOf(phase) < 0)
152163
const exceptionHandlesDeleteList = {}
153-
// do not allow to delete owner of challenge
164+
// The creator of the challenge can't be deleted
154165
exceptionHandlesDeleteList[challenge.createdBy] = true
155166
_.forEach(submissions, (s) => {
156-
// do not allow to delete member that submit submission
167+
// do not allow to delete submitters who submitted
157168
exceptionHandlesDeleteList[s.createdBy] = true
158169
})
159170

160171
const exceptionResourceIdDeleteList = {}
161172
_.forEach(resources, (resourceItem) => {
173+
if (exceptionHandlesDeleteList[resourceItem.memberHandle]) {
174+
exceptionResourceIdDeleteList[resourceItem.id] = true
175+
}
162176
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]
177+
// if the challenge is in New or Draft status
178+
// we will allow removing reviewers and copilots
179+
_.some([
180+
CHALLENGE_STATUS.DRAFT,
181+
CHALLENGE_STATUS.NEW
182+
], (status) => challenge.status.toUpperCase() === status)
183+
) {
184+
if (
185+
// Copilots can't delete themselves from the challenge
186+
loggedInUserResource &&
187+
_.some(loggedInUserResource.roles, (role) => `${role}`.toLowerCase().indexOf('copilot') >= 0) &&
188+
loggedInUserResource.memberHandle === resourceItem.memberHandle
189+
) {
190+
exceptionResourceIdDeleteList[resourceItem.id] = true
191+
}
192+
} else if (
193+
// If the current phase is not submission or registration
194+
// then we will disable removing reviewers and copilots.
195+
_.some(['reviewer', 'copilot'], (role) => `${resourceItem.role}`.toLowerCase().indexOf(role) >= 0) &&
196+
isCurrentPhasesNotSubmissionOrRegistration
170197
) {
171198
exceptionResourceIdDeleteList[resourceItem.id] = true
172199
}
@@ -430,7 +457,8 @@ Resources.defaultProps = {
430457
results: [],
431458
checkpointResults: {},
432459
resourcesSort: {},
433-
submissions: []
460+
submissions: [],
461+
loggedInUserResource: null
434462
}
435463

436464
Resources.propTypes = {
@@ -458,5 +486,6 @@ Resources.propTypes = {
458486
sort: PT.string
459487
}),
460488
canEditResource: PT.bool.isRequired,
461-
deleteResource: PT.func.isRequired
489+
deleteResource: PT.func.isRequired,
490+
loggedInUserResource: PT.any
462491
}

0 commit comments

Comments
 (0)