Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions src/components/ChallengeEditor/AssignedMember-Field/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
<div className={styles.row}>
<div className={cn(styles.field, styles.col1)}>
Expand Down
34 changes: 25 additions & 9 deletions src/components/ChallengeEditor/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down Expand Up @@ -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)
Expand All @@ -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
Expand Down Expand Up @@ -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)
}

Expand Down
23 changes: 15 additions & 8 deletions src/containers/ChallengeEditor/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 () {
Expand Down Expand Up @@ -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 (<Loader />)
}
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 <div>
<Route
exact
Expand Down Expand Up @@ -239,8 +246,8 @@ ChallengeEditor.propTypes = {
loadMemberDetails: PropTypes.func,
updateChallengeDetails: PropTypes.func.isRequired,
partiallyUpdateChallengeDetails: PropTypes.func.isRequired,
createChallenge: PropTypes.func.isRequired,
members: PropTypes.arrayOf(PropTypes.shape())
createChallenge: PropTypes.func.isRequired
// members: PropTypes.arrayOf(PropTypes.shape())
}

const mapStateToProps = ({ projects: { projectDetail }, challenges: { challengeDetails, challengeResources, metadata, isLoading, attachments, failedToLoad }, auth: { token }, members: { members } }) => ({
Expand All @@ -251,8 +258,8 @@ const mapStateToProps = ({ projects: { projectDetail }, challenges: { challengeD
isLoading,
attachments,
token,
failedToLoad,
members
failedToLoad
// members
})

const mapDispatchToProps = {
Expand Down