-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.jsx
90 lines (81 loc) · 2.5 KB
/
index.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import React, { useEffect, useState } from 'react';
import { Link } from 'react-router-dom';
import { Col, Container, ProgressBar, Row } from 'react-bootstrap';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faCheck } from '@fortawesome/free-solid-svg-icons/faCheck';
import { faTimes } from '@fortawesome/free-solid-svg-icons/faTimes';
import data from '../../../../data/javascript/index.json';
import './javascript.css';
const DELAY_LOAD = 2000;
const Javascript = () => {
const [delayFinish, setDelay] = useState(false);
useEffect(() => {
setTimeout(() => {
setDelay(true);
}, DELAY_LOAD);
});
useEffect(() => {
if (delayFinish) {
data.quizzes.forEach(quiz => {
// Note: we preload all questions for now
import(`../../../../data/javascript/${quiz.key}/index.json`);
import(`!raw-loader! ../../../data/javascript/${quiz.key}/question.js`);
});
}
}, [delayFinish]);
const curriculumProgress = JSON.parse(
localStorage.getItem('curriculumProgress'),
);
const showCurriculumProgress = key => {
if (!curriculumProgress) return '';
if (curriculumProgress[key] === 'success') {
return <FontAwesomeIcon icon={faCheck} color="green" />;
}
if (curriculumProgress[key] === 'fail') {
return <FontAwesomeIcon icon={faTimes} color="red" />;
}
return '';
};
const calculateProgressBar = () => {
let succeededQuizzes;
if (curriculumProgress) {
succeededQuizzes = Object.keys(curriculumProgress).filter(
key => curriculumProgress[key] === 'success',
).length;
} else {
succeededQuizzes = 0;
}
return [
`${succeededQuizzes}/${data.quizzes.length}`,
(succeededQuizzes * 100) / data.quizzes.length,
];
};
return (
<Container className="mt-5 mb-3">
<h2>This is Javascript</h2>
<Row className="mt-3 mb-3">
<Col md={12} lg={8}>
<h5>Your Progress:</h5>
<ProgressBar
animated
striped
variant="success"
label={calculateProgressBar()[0]}
now={calculateProgressBar()[1]}
/>
</Col>
</Row>
<div>
{data.quizzes.map(quizz => (
<div key={quizz.key}>
<Link to={`javascript/${quizz.key}`} className="link-question">
{quizz.title}
</Link>
{showCurriculumProgress(quizz.key)}
</div>
))}
</div>
</Container>
);
};
export default Javascript;