Skip to content

Commit 4db9809

Browse files
committed
format levelUI in tutorial index
Signed-off-by: shmck <[email protected]>
1 parent 7bac418 commit 4db9809

File tree

3 files changed

+38
-11
lines changed

3 files changed

+38
-11
lines changed

Diff for: web-app/src/containers/Tutorial/containers/Review.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import * as React from 'react'
2-
import * as TT from 'typings/tutorial'
2+
import * as T from 'typings'
33
import Steps from '../components/Steps'
44
import Content from '../components/Content'
55

66
interface Props {
7-
levels: TT.Level[]
7+
levels: T.LevelUI[]
88
}
99

1010
const styles = {
@@ -31,7 +31,7 @@ const ReviewPage = (props: Props) => {
3131
return (
3232
<div css={styles.container}>
3333
<div css={styles.header}>Review</div>
34-
{props.levels.map((level: TT.Level, index: number) => (
34+
{props.levels.map((level: T.LevelUI, index: number) => (
3535
<div key={level.id}>
3636
<div>
3737
<Content title={level.title} content={level.content} />

Diff for: web-app/src/containers/Tutorial/formatLevels.ts

+32-6
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ interface Input {
1010

1111
type Output = {
1212
level: T.LevelUI
13+
levels: T.LevelUI[]
1314
stepIndex: number
1415
}
1516

@@ -22,16 +23,18 @@ type Output = {
2223
const formatLevels = ({ progress, position, levels, testStatus }: Input): Output => {
2324
// clone levels
2425

25-
const level: TT.Level | undefined = levels.find((l: TT.Level) => l.id === position.levelId)
26+
const levelIndex: number = levels.findIndex((l: TT.Level) => l.id === position.levelId)
2627

27-
if (!level) {
28+
if (levelIndex === -1) {
2829
throw new Error(`Level ${position.levelId} not found`)
2930
}
3031

32+
const currentLevel = levels[levelIndex]
33+
3134
const levelUI: T.LevelUI = {
32-
...level,
35+
...currentLevel,
3336
status: progress.levels[position.levelId] ? 'COMPLETE' : 'ACTIVE',
34-
steps: level.steps.map((step: TT.Step) => {
37+
steps: currentLevel.steps.map((step: TT.Step) => {
3538
// label step status for step component
3639
let status: T.ProgressStatus = 'INCOMPLETE'
3740
let subtasks
@@ -59,11 +62,34 @@ const formatLevels = ({ progress, position, levels, testStatus }: Input): Output
5962
return { ...step, status, subtasks }
6063
}),
6164
}
65+
66+
const completed: T.LevelUI[] = levels.slice(0, levelIndex).map((level: TT.Level) => ({
67+
...level,
68+
status: 'COMPLETE',
69+
steps: level.steps.map((step: TT.Step) => ({
70+
...step,
71+
status: 'COMPLETE',
72+
subtasks: step.subtasks ? step.subtasks.map((st) => ({ name: st, status: 'COMPLETE' })) : undefined,
73+
})),
74+
}))
75+
76+
const incompleted: T.LevelUI[] = levels.slice(levelIndex + 1, levels.length).map((level: TT.Level) => ({
77+
...level,
78+
status: 'INCOMPLETE',
79+
steps: level.steps.map((step: TT.Step) => ({
80+
...step,
81+
status: 'INCOMPLETE',
82+
subtasks: step.subtasks ? step.subtasks.map((st) => ({ name: st, status: 'INCOMPLETE' })) : undefined,
83+
})),
84+
}))
85+
86+
const levelsUI: T.LevelUI[] = [...completed, levelUI, ...incompleted]
87+
6288
let stepIndex = levelUI.steps.findIndex((s: T.StepUI) => s.status === 'ACTIVE')
6389
if (stepIndex === -1) {
64-
stepIndex = level.steps.length
90+
stepIndex = levels[levelIndex].steps.length
6591
}
66-
return { level: levelUI, stepIndex }
92+
return { level: levelUI, levels: levelsUI, stepIndex }
6793
}
6894

6995
export default formatLevels

Diff for: web-app/src/containers/Tutorial/index.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ const TutorialPage = (props: PageProps) => {
105105

106106
const [page, setPage] = React.useState<'level' | 'settings' | 'review'>('level')
107107

108-
const { level, stepIndex } = formatLevels({
108+
// format level code with status for easy rendering
109+
const { level, levels, stepIndex } = formatLevels({
109110
progress,
110111
position,
111112
levels: tutorial.levels,
@@ -123,7 +124,7 @@ const TutorialPage = (props: PageProps) => {
123124
</div>
124125

125126
{page === 'level' && <Level level={level} />}
126-
{page === 'review' && <ReviewPage levels={tutorial.levels} />}
127+
{page === 'review' && <ReviewPage levels={levels} />}
127128
{/* {page === 'settings' && <SettingsPage />} */}
128129
</div>
129130
<div css={styles.footer}>

0 commit comments

Comments
 (0)