Skip to content

Commit 818442c

Browse files
committed
fix: challenge status missing
1 parent c1fecb7 commit 818442c

File tree

2 files changed

+113
-7
lines changed

2 files changed

+113
-7
lines changed

src/shared/components/challenge-detail/Header/index.jsx

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ import TabSelector from './TabSelector';
3030

3131
import style from './style.scss';
3232

33+
/* Holds day and hour range in ms. */
34+
const HOUR_MS = 60 * 60 * 1000;
35+
const DAY_MS = 24 * HOUR_MS;
36+
3337
export default function ChallengeHeader(props) {
3438
const {
3539
isLoggedIn,
@@ -128,6 +132,26 @@ export default function ChallengeHeader(props) {
128132
*/
129133
const hasSubmissions = !_.isEmpty(mySubmissions);
130134

135+
const openPhases = sortedAllPhases.filter(p => p.isOpen);
136+
let nextPhase = openPhases[0];
137+
if (hasRegistered && openPhases[0] && openPhases[0].name === 'Registration') {
138+
nextPhase = openPhases[1] || {};
139+
}
140+
const nextDeadline = nextPhase && nextPhase.name;
141+
142+
const deadlineEnd = moment(nextPhase && phaseEndDate(nextPhase));
143+
const currentTime = moment();
144+
145+
let timeLeft = deadlineEnd.isAfter(currentTime)
146+
? deadlineEnd.diff(currentTime) : 0;
147+
148+
let format;
149+
if (timeLeft > DAY_MS) format = 'D[d] H[h]';
150+
else if (timeLeft > HOUR_MS) format = 'H[h] m[min]';
151+
else format = 'm[min] s[s]';
152+
153+
timeLeft = moment.duration(timeLeft).format(format);
154+
131155
let relevantPhases = [];
132156

133157
if (showDeadlineDetail) {
@@ -202,6 +226,41 @@ export default function ChallengeHeader(props) {
202226

203227
const checkpointCount = checkpoints && checkpoints.numberOfPassedScreeningSubmissions;
204228

229+
let nextDeadlineMsg;
230+
switch ((status || '').toLowerCase()) {
231+
case 'active':
232+
nextDeadlineMsg = (
233+
<div styleName="next-deadline">
234+
Next Deadline:
235+
{' '}
236+
{
237+
<span styleName="deadline-highlighted">
238+
{nextDeadline || '-'}
239+
</span>
240+
}
241+
</div>
242+
);
243+
break;
244+
case 'completed':
245+
nextDeadlineMsg = (
246+
<div styleName="completed">
247+
The challenge is finished.
248+
</div>
249+
);
250+
break;
251+
default:
252+
nextDeadlineMsg = (
253+
<div>
254+
Status:
255+
&zwnj;
256+
<span styleName="deadline-highlighted">
257+
{_.upperFirst(_.lowerCase(status))}
258+
</span>
259+
</div>
260+
);
261+
break;
262+
}
263+
205264
// Legacy MMs have a roundId field, but new MMs do not.
206265
// This is used to disable registration/submission for legacy MMs.
207266
const isLegacyMM = isMM(challenge) && Boolean(challenge.roundId);
@@ -382,7 +441,18 @@ export default function ChallengeHeader(props) {
382441
<div styleName="deadlines-view">
383442
<div styleName={`deadlines-overview ${showDeadlineDetail ? 'opened' : ''}`}>
384443
<div styleName="deadlines-overview-text">
385-
Competition Timeline
444+
{nextDeadlineMsg}
445+
{
446+
(status || '').toLowerCase() === 'active'
447+
&& (
448+
<div styleName="current-phase">
449+
Current Deadline Ends:{' '}
450+
<span styleName="deadline-highlighted">
451+
{timeLeft}
452+
</span>
453+
</div>
454+
)
455+
}
386456
</div>
387457
<a
388458
onClick={onToggleDeadlines}

src/shared/components/challenge-detail/Header/style.scss

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -555,10 +555,9 @@
555555

556556
.deadlines-overview {
557557
background-color: #555;
558-
display: none;
559558
align-items: center;
560559
justify-content: space-between;
561-
height: 56px;
560+
height: 60px;
562561
border-bottom-left-radius: 8px;
563562
border-bottom-right-radius: 8px;
564563

@@ -572,12 +571,49 @@
572571
}
573572

574573
.deadlines-overview-text {
575-
@include barlow-semi-bold;
574+
@include roboto-regular;
576575

576+
display: flex;
577+
justify-content: flex-start;
577578
color: $tc-white;
578-
font-size: 16px;
579-
line-height: 18px;
580-
text-transform: uppercase;
579+
line-height: 20px;
580+
padding: 24px 23px;
581+
font-size: 15px;
582+
583+
@include xs-to-md {
584+
flex-direction: column;
585+
padding: 0;
586+
}
587+
588+
.next-deadline {
589+
word-wrap: normal;
590+
border-right: $tc-gray-50 solid 1px;
591+
padding-right: 10px;
592+
display: inline;
593+
594+
@include xs-to-md {
595+
border-right: none;
596+
}
597+
}
598+
599+
.completed {
600+
border-right: none;
601+
}
602+
603+
.current-phase {
604+
overflow-wrap: normal;
605+
padding-left: 10px;
606+
607+
@include xs-to-md {
608+
padding-left: 0;
609+
margin-top: 4px;
610+
}
611+
}
612+
613+
.deadline-highlighted {
614+
color: $tc-white;
615+
font-weight: 700;
616+
}
581617
}
582618

583619
.deadlines-collapser {

0 commit comments

Comments
 (0)