diff --git a/src/components/ChallengeEditor/AssignedMember-Field/index.js b/src/components/ChallengeEditor/AssignedMember-Field/index.js index b6ea7b90..4731518d 100644 --- a/src/components/ChallengeEditor/AssignedMember-Field/index.js +++ b/src/components/ChallengeEditor/AssignedMember-Field/index.js @@ -8,12 +8,11 @@ import styles from './AssignedMember-Field.module.scss' import SelectUserAutocomplete from '../../SelectUserAutocomplete' const AssignedMemberField = ({ challenge, onChange, assignedMemberDetails, readOnly }) => { - const value = challenge.task.memberId ? { + const value = assignedMemberDetails ? { // if we know assigned member details, then show user `handle`, otherwise fallback to `userId` - label: assignedMemberDetails ? assignedMemberDetails.handle : `User id: ${challenge.task.memberId}`, - value: challenge.task.memberId + label: assignedMemberDetails.handle, + value: assignedMemberDetails.userId + '' } : null - return (
diff --git a/src/components/ChallengeEditor/index.js b/src/components/ChallengeEditor/index.js index 8924578c..f5d5d792 100644 --- a/src/components/ChallengeEditor/index.js +++ b/src/components/ChallengeEditor/index.js @@ -310,18 +310,18 @@ class ChallengeEditor extends Component { let assignedMemberDetails if (option && option.value) { - newChallenge.task = { + /* newChallenge.task = { ...oldChallenge.task, memberId: option.value // TODO uncomment as soon as issue in API is fixed https://github.com/topcoder-platform/challenge-api/issues/272 // isAssigned: true - } + } */ assignedMemberDetails = { handle: option.label, userId: parseInt(option.value, 10) } } else { - newChallenge.task = _.omit(oldChallenge.task, ['memberId', 'isAssigned']) + // newChallenge.task = _.omit(oldChallenge.task, ['memberId', 'isAssigned']) assignedMemberDetails = null } @@ -851,7 +851,7 @@ class ChallengeEditor extends Component { } async updateAllChallengeInfo (status, cb = () => {}) { - const { updateChallengeDetails } = this.props + const { updateChallengeDetails, assignedMemberDetails: oldAssignedMember } = this.props if (this.state.isSaving) return this.setState({ isSaving: true }) const challenge = this.collectChallengeData(status) @@ -861,9 +861,17 @@ class ChallengeEditor extends Component { const challengeId = this.getCurrentChallengeId() const action = await updateChallengeDetails(challengeId, challenge) const { copilot: previousCopilot, reviewer: previousReviewer } = this.state.draftChallenge.data - const { copilot, reviewer } = this.state.challenge + const { challenge: { copilot, reviewer }, assignedMemberDetails: assignedMember } = this.state if (copilot) await this.updateResource(challengeId, 'Copilot', copilot, previousCopilot) if (reviewer) await this.updateResource(challengeId, 'Reviewer', reviewer, previousReviewer) + console.log(oldAssignedMember, 'oldAssignedMember') + console.log(assignedMember, 'assignedMember') + const oldMemberHandle = _.get(oldAssignedMember, 'handle') + // assigned member has been updated + if (assignedMember && assignedMember.handle !== oldMemberHandle) { + await this.updateResource(challengeId, 'Submitter', assignedMember.handle, oldMemberHandle) + } + this.updateTimeLastSaved() const draftChallenge = { data: action.challengeDetails } draftChallenge.data.copilot = copilot @@ -911,11 +919,19 @@ class ChallengeEditor extends Component { roleId: resourceRole ? resourceRole.id : null } if (prevValue) { - const oldResource = _.pick(newResource, ['challengeId', 'roleId']) - oldResource.memberHandle = prevValue - await deleteResource(oldResource) + try { + const oldResource = _.pick(newResource, ['challengeId', 'roleId']) + oldResource.memberHandle = prevValue + await deleteResource(oldResource) + } catch (err) { + const errorMessage = _.get(err, 'response.data.message') + // ignore error where the resource does not exist already + if (errorMessage.indexOf('doesn\'t have resource with roleId') === -1) { + throw err + } + } } - + console.log('creating new resource') await createResource(newResource) } diff --git a/src/containers/ChallengeEditor/index.js b/src/containers/ChallengeEditor/index.js index fc7257ee..81831317 100644 --- a/src/containers/ChallengeEditor/index.js +++ b/src/containers/ChallengeEditor/index.js @@ -29,6 +29,7 @@ import { } from '../../actions/members' import { connect } from 'react-redux' +import { SUBMITTER_ROLE_UUID } from '../../config/constants' class ChallengeEditor extends Component { componentDidMount () { @@ -125,15 +126,21 @@ class ChallengeEditor extends Component { projectDetail, updateChallengeDetails, partiallyUpdateChallengeDetails, - createChallenge, - members + createChallenge + // members } = this.props const challengeId = _.get(match.params, 'challengeId', null) if (challengeId && (!challengeDetails || !challengeDetails.id)) { return () } - const assignedMemberId = _.get(challengeDetails, 'task.memberId') - const assignedMemberDetails = _.find(members, (member) => member.userId.toString() === assignedMemberId) + const submitters = challengeResources && challengeResources.filter(cr => cr.roleId === SUBMITTER_ROLE_UUID) + var assignedMemberDetails = null + if (submitters && submitters.length === 1) { + assignedMemberDetails = { + userId: submitters[0].memberId, + handle: submitters[0].memberHandle + } + } return
({ @@ -251,8 +258,8 @@ const mapStateToProps = ({ projects: { projectDetail }, challenges: { challengeD isLoading, attachments, token, - failedToLoad, - members + failedToLoad + // members }) const mapDispatchToProps = {