From 51c45001483ed9c80a812e93b3050b9faa076f6a Mon Sep 17 00:00:00 2001 From: Vikas Agarwal Date: Wed, 16 Sep 2020 16:38:10 +0530 Subject: [PATCH 1/4] fix: github#813-When user register and submit to a public challenge it is not updated on the WM challenge listing page --- src/components/ChallengesComponent/ChallengeCard/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ChallengesComponent/ChallengeCard/index.js b/src/components/ChallengesComponent/ChallengeCard/index.js index 734d07e1..1213f3ce 100644 --- a/src/components/ChallengesComponent/ChallengeCard/index.js +++ b/src/components/ChallengesComponent/ChallengeCard/index.js @@ -258,11 +258,11 @@ class ChallengeCard extends React.Component {
- {challenge.numRegistrants || 0} + {challenge.numOfRegistrants || 0}
- {challenge.numSubmissions || 0} + {challenge.numOfSubmissions || 0}
From 4b960a868bdea6c79249e27a319f80b3aeb9b28b Mon Sep 17 00:00:00 2001 From: Vikas Agarwal Date: Wed, 16 Sep 2020 17:48:50 +0530 Subject: [PATCH 2/4] fix: git#810-'Work Type is required field' validation is not removed once the user selected a type from the list --- src/components/ChallengeEditor/Track-Field/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ChallengeEditor/Track-Field/index.js b/src/components/ChallengeEditor/Track-Field/index.js index 71a4e003..ee7f9771 100644 --- a/src/components/ChallengeEditor/Track-Field/index.js +++ b/src/components/ChallengeEditor/Track-Field/index.js @@ -24,7 +24,7 @@ const TrackField = ({ challenge, tracks, onUpdateOthers, disabled }) => { } - { challenge.submitTriggered && !challenge.track &&
+ { challenge.submitTriggered && !challenge.trackId &&
Work Type is required field From 83aaed3a0d171820c89fcaa7275b1504a436663d Mon Sep 17 00:00:00 2001 From: Vikas Agarwal Date: Thu, 17 Sep 2020 13:33:17 +0530 Subject: [PATCH 3/4] fix: git#802-Challenge phase is not updated in listing page Implemented showing basic phase details with current data model. The existing code was assuming very old data model that is why it was not showing correct phase details. It still might not be showing correct details for different phases and it has to be fixed as case are identified. --- .../ChallengeCard/index.js | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/components/ChallengesComponent/ChallengeCard/index.js b/src/components/ChallengesComponent/ChallengeCard/index.js index 1213f3ce..30903c6e 100644 --- a/src/components/ChallengesComponent/ChallengeCard/index.js +++ b/src/components/ChallengesComponent/ChallengeCard/index.js @@ -1,7 +1,7 @@ /** * Component to render a row for ChallengeList component */ -import _ from 'lodash' +// import _ from 'lodash' import React from 'react' import PropTypes from 'prop-types' import cn from 'classnames' @@ -39,17 +39,16 @@ const getTimeLeft = (phase, status) => { if (phase.phaseType === 'Final Fix') { return FF_TIME_LEFT_MSG } - - let time = moment(phase.scheduledEndTime).diff() + let time = moment(phase.scheduledEndDate).diff() const late = time < 0 if (late) time = -time - if (status !== CHALLENGE_STATUS.COMPLETED) { + if (status !== CHALLENGE_STATUS.COMPLETED.toLowerCase()) { const duration = getFormattedDuration(time) return late ? `Late by ${duration}` : `${duration} to go` } - return moment(phase.scheduledEndTime).format('DD/MM/YYYY') + return moment(phase.scheduledEndDate).format('DD/MM/YYYY') } /** @@ -58,8 +57,8 @@ const getTimeLeft = (phase, status) => { * @returns {{phaseMessage: string, endTime: {late, text}}} */ const getPhaseInfo = (c) => { - const { allPhases, currentPhases, subTrack, status } = c - let checkPhases = (currentPhases && currentPhases.length > 0 ? currentPhases : allPhases) + const { currentPhaseNames, status, startDate, phases } = c + /* let checkPhases = (currentPhases && currentPhases.length > 0 ? currentPhases : allPhases) if (_.isEmpty(checkPhases)) checkPhases = [] let statusPhase = checkPhases .filter(p => p.phaseType !== 'Registration') @@ -68,12 +67,26 @@ const getPhaseInfo = (c) => { if (!statusPhase && subTrack === 'FIRST_2_FINISH' && checkPhases.length) { statusPhase = Object.clone(checkPhases[0]) statusPhase.phaseType = 'Submission' - } + } */ let phaseMessage = STALLED_MSG - if (statusPhase) phaseMessage = statusPhase.phaseType - else if (status === 'DRAFT') phaseMessage = DRAFT_MSG - - const endTime = getTimeLeft(statusPhase) + // if (statusPhase) phaseMessage = statusPhase.phaseType + // else if (status === 'DRAFT') phaseMessage = DRAFT_MSG + var lowerStatus = status.toLowerCase() + if (lowerStatus === 'draft') { + phaseMessage = DRAFT_MSG + } else if (lowerStatus === 'active') { + if (!currentPhaseNames || currentPhaseNames.length === 0) { + var timeToStart = moment(startDate).diff() + if (timeToStart > 0) { + phaseMessage = `Scheduled in ${getFormattedDuration(timeToStart)}` + } + } else { + phaseMessage = currentPhaseNames.join('/') + } + } + const activePhases = phases.filter(p => !!p.isOpen) + const activePhase = activePhases.length > 0 ? activePhases[0] : null + const endTime = getTimeLeft(activePhase, lowerStatus) return { phaseMessage, endTime } } From 46d0ccfc24f8c7c23e58f7379dd41e319a525f42 Mon Sep 17 00:00:00 2001 From: Vikas Agarwal Date: Fri, 18 Sep 2020 17:48:18 +0530 Subject: [PATCH 4/4] fix: git#823-Popup message or toaster is missing to notify user if there is any server side error --- .../ChallengeCard/index.js | 56 ++++++++----------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/src/components/ChallengesComponent/ChallengeCard/index.js b/src/components/ChallengesComponent/ChallengeCard/index.js index 30903c6e..e42371c2 100644 --- a/src/components/ChallengesComponent/ChallengeCard/index.js +++ b/src/components/ChallengesComponent/ChallengeCard/index.js @@ -1,7 +1,7 @@ /** * Component to render a row for ChallengeList component */ -// import _ from 'lodash' +import _ from 'lodash' import React from 'react' import PropTypes from 'prop-types' import cn from 'classnames' @@ -11,13 +11,13 @@ import 'moment-duration-format' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faFile, faUser } from '@fortawesome/free-solid-svg-icons' import ChallengeStatus from '../ChallengeStatus' -import Modal from '../../Modal' import ChallengeTag from '../ChallengeTag' import styles from './ChallengeCard.module.scss' import { getFormattedDuration } from '../../../util/date' import { CHALLENGE_STATUS, COMMUNITY_APP_URL, DIRECT_PROJECT_URL, ONLINE_REVIEW_URL } from '../../../config/constants' -import { OutlineButton, PrimaryButton } from '../../Buttons' import { patchChallenge } from '../../../services/challenges' +import ConfirmationModal from '../../Modal/ConfirmationModal' +import AlertModal from '../../Modal/AlertModal' const theme = { container: styles.modalContainer @@ -208,7 +208,8 @@ class ChallengeCard extends React.Component { const response = await patchChallenge(challenge.id, { status: 'Active' }) this.setState({ isLaunch: true, isConfirm: response.data.id, isSaving: false }) } catch (e) { - this.setState({ isSaving: false }) + const error = _.get(e, 'response.data.message', 'Unable to activate the challenge') + this.setState({ isSaving: false, error }) } } @@ -219,37 +220,28 @@ class ChallengeCard extends React.Component { return (
{ isLaunch && !isConfirm && ( - this.resetModal()}> -
-
Launch Challenge Confirmation
- {`Do you want to launch ${challenge.type} challenge "${challenge.name}"?`} -
-
- this.resetModal()} /> -
-
- this.onLaunchChallenge()} /> -
-
-
-
+ ) } { isLaunch && isConfirm && ( - -
-
Success
- Your challenge is saved as active -
-
- -
-
this.resetModal()}> - -
-
-
-
+ ) }