diff --git a/src/shared/components/challenge-detail/Header/TabSelector/index.jsx b/src/shared/components/challenge-detail/Header/TabSelector/index.jsx index e964619d9d..768ad25042 100644 --- a/src/shared/components/challenge-detail/Header/TabSelector/index.jsx +++ b/src/shared/components/challenge-detail/Header/TabSelector/index.jsx @@ -21,6 +21,7 @@ export default function ChallengeViewSelector(props) { const { isLoggedIn, challenge, + isMM, checkpointCount, numOfRegistrants, numOfSubmissions, @@ -32,8 +33,6 @@ export default function ChallengeViewSelector(props) { mySubmissions, } = props; - const challengeSubTrack = challenge.subTrack; - const isMM = challengeSubTrack && challengeSubTrack.indexOf('MARATHON_MATCH') > -1; const forumId = _.get(challenge, 'forumId') || 0; const roles = _.get(challenge, 'userDetails.roles') || []; @@ -189,6 +188,7 @@ export default function ChallengeViewSelector(props) { ChallengeViewSelector.defaultProps = { isLoggedIn: false, challenge: {}, + isMM: false, checkpointCount: 0, numOfRegistrants: 0, numOfSubmissions: 0, @@ -206,6 +206,7 @@ ChallengeViewSelector.propTypes = { roles: PT.arrayOf(PT.string), }), }), + isMM: PT.bool, checkpointCount: PT.number, numOfRegistrants: PT.number, numOfSubmissions: PT.number, diff --git a/src/shared/components/challenge-detail/Header/index.jsx b/src/shared/components/challenge-detail/Header/index.jsx index d51470d6ec..c746aef2cf 100644 --- a/src/shared/components/challenge-detail/Header/index.jsx +++ b/src/shared/components/challenge-detail/Header/index.jsx @@ -450,6 +450,7 @@ export default function ChallengeHeader(props) { -1; + const { + challenge, + isMM, + loadMMSubmissions, + auth, + } = this.props; // Check auth token, go to login page if invalid if (isMM && (_.isEmpty(auth) || _.isEmpty(auth.tokenV3) || isTokenExpired(auth.tokenV3))) { @@ -45,6 +49,7 @@ class MySubmissionsView extends React.Component { const { challengesUrl, challenge, + isMM, hasRegistered, unregistering, submissionEnded, @@ -81,6 +86,7 @@ class MySubmissionsView extends React.Component { hasRegistered={hasRegistered} unregistering={unregistering} submissionEnded={submissionEnded} + isMM={isMM} isLegacyMM={isLegacyMM} mySubmissions={mySubmissions} auth={auth} @@ -105,13 +111,15 @@ MySubmissionsView.propTypes = { checkpoints: PT.arrayOf(PT.object), submissions: PT.arrayOf(PT.object), submissionViewable: PT.string, - track: PT.string.isRequired, + legacy: { + track: PT.string.isRequired, + }, registrants: PT.any, - subTrack: PT.any, }).isRequired, hasRegistered: PT.bool.isRequired, unregistering: PT.bool.isRequired, submissionEnded: PT.bool.isRequired, + isMM: PT.bool.isRequired, isLegacyMM: PT.bool.isRequired, loadingMMSubmissionsForChallengeId: PT.string.isRequired, auth: PT.shape().isRequired, diff --git a/src/shared/components/challenge-detail/Submissions/SubmissionRow/SubmissionHistoryRow/index.jsx b/src/shared/components/challenge-detail/Submissions/SubmissionRow/SubmissionHistoryRow/index.jsx index dd86579aba..d58147effb 100644 --- a/src/shared/components/challenge-detail/Submissions/SubmissionRow/SubmissionHistoryRow/index.jsx +++ b/src/shared/components/challenge-detail/Submissions/SubmissionRow/SubmissionHistoryRow/index.jsx @@ -97,9 +97,15 @@ SubmissionHistoryRow.propTypes = { member: PT.string.isRequired, isMM: PT.bool.isRequired, submission: PT.number.isRequired, - finalScore: PT.number, + finalScore: PT.oneOfType([ + PT.number, + PT.string, + ]), status: PT.string.isRequired, - provisionalScore: PT.number, + provisionalScore: PT.oneOfType([ + PT.number, + PT.string, + ]), submissionTime: PT.string.isRequired, isReviewPhaseComplete: PT.bool, submissionId: PT.string.isRequired, diff --git a/src/shared/components/challenge-detail/Submissions/SubmissionRow/index.jsx b/src/shared/components/challenge-detail/Submissions/SubmissionRow/index.jsx index 57c9900da1..c074465e48 100644 --- a/src/shared/components/challenge-detail/Submissions/SubmissionRow/index.jsx +++ b/src/shared/components/challenge-detail/Submissions/SubmissionRow/index.jsx @@ -177,16 +177,31 @@ SubmissionRow.propTypes = { openHistory: PT.bool.isRequired, member: PT.string.isRequired, submissions: PT.arrayOf(PT.shape({ - provisionalScore: PT.number, - finalScore: PT.number, - initialScore: PT.number, + provisionalScore: PT.oneOfType([ + PT.number, + PT.string, + ]), + finalScore: PT.oneOfType([ + PT.number, + PT.string, + ]), + initialScore: PT.oneOfType([ + PT.number, + PT.string, + ]), status: PT.string.isRequired, submissionId: PT.string.isRequired, submissionTime: PT.string.isRequired, })).isRequired, score: PT.shape({ - final: PT.number, - provisional: PT.number, + final: PT.oneOfType([ + PT.number, + PT.string, + ]), + provisional: PT.oneOfType([ + PT.number, + PT.string, + ]), }), rating: PT.number, toggleHistory: PT.func, diff --git a/src/shared/containers/challenge-detail/index.jsx b/src/shared/containers/challenge-detail/index.jsx index 32bd9b7139..15d15dc5dc 100644 --- a/src/shared/containers/challenge-detail/index.jsx +++ b/src/shared/containers/challenge-detail/index.jsx @@ -8,7 +8,7 @@ import _ from 'lodash'; import communityActions from 'actions/tc-communities'; -import { isMM } from 'utils/challenge'; +import { isMM as checkIsMM } from 'utils/challenge'; import LoadingPagePlaceholder from 'components/LoadingPagePlaceholder'; import pageActions from 'actions/page'; import ChallengeHeader from 'components/challenge-detail/Header'; @@ -387,7 +387,8 @@ class ChallengeDetailPageContainer extends React.Component { ? results : null; const isEmpty = _.isEmpty(challenge); - const isLegacyMM = isMM(challenge) && Boolean(challenge.roundId); + const isMM = checkIsMM(challenge); + const isLegacyMM = isMM && Boolean(challenge.roundId); if (isLoadingChallenge || isLoadingTerms) { return ; @@ -556,7 +557,8 @@ class ChallengeDetailPageContainer extends React.Component { hasRegistered={challenge.isRegistered} unregistering={unregistering} submissionEnded={submissionEnded} - isLegacyMM={isLegacyMM} + isMM + isLegacyMM loadingMMSubmissionsForChallengeId={loadingMMSubmissionsForChallengeId} auth={auth} loadMMSubmissions={loadMMSubmissions} @@ -722,16 +724,14 @@ function mapStateToProps(state, props) { })); } - if (mmSubmissions) { + if (!_.isEmpty(mmSubmissions)) { mmSubmissions = mmSubmissions.map((submission) => { let registrant; let { member } = submission; if (auth.user.handle === submission.member) { mySubmissions = submission.submissions || []; - mySubmissions = mySubmissions.map((mySubmission, index) => { - // eslint-disable-next-line no-param-reassign - mySubmission.id = mySubmissions.length - index; - return mySubmission; + mySubmissions.forEach((mySubmission, index) => { + mySubmissions[index].id = mySubmissions.length - index; }); } let submissionDetail = _.find(challenge.submissions, { createdBy: submission.createdBy }); @@ -760,6 +760,8 @@ function mapStateToProps(state, props) { member, }); }); + } else { + mySubmissions = _.filter(challenge.submissions, s => (`${s.memberId}` === `${auth.user.userId}`)); } } return { diff --git a/src/shared/utils/challenge.js b/src/shared/utils/challenge.js index 387aacc8a3..8ce43a945b 100644 --- a/src/shared/utils/challenge.js +++ b/src/shared/utils/challenge.js @@ -8,7 +8,7 @@ import _ from 'lodash'; * @param {Object} challenge challenge object */ export function isMM(challenge) { - return challenge.challengeType && challenge.challengeType.name === 'Marathon Match'; + return challenge.type === 'Marathon Match'; } /** @@ -16,7 +16,7 @@ export function isMM(challenge) { * @param {Object} challenge challenge object */ export function isDevelopMM(challenge) { - return challenge.challengeType && challenge.challengeType.name === 'Develop Marathon Match'; + return challenge.type === 'Develop Marathon Match'; } /**