Skip to content

Commit b44914a

Browse files
committed
refactor traverse content component
Signed-off-by: shmck <[email protected]>
1 parent a87e5c7 commit b44914a

File tree

2 files changed

+62
-41
lines changed

2 files changed

+62
-41
lines changed

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

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import * as React from 'react'
2+
import * as T from 'typings'
3+
import * as TT from 'typings/tutorial'
4+
import { Menu } from '@alifd/next'
5+
import Icon from '../../components/Icon'
6+
7+
interface Props {
8+
tutorial: TT.Tutorial
9+
position: T.Position
10+
progress: T.Progress
11+
setTitle: (title: string) => void
12+
setContent: (content: string) => void
13+
}
14+
15+
const ContentMenu = ({ tutorial, position, progress, setTitle, setContent }: Props) => {
16+
const setMenuContent = (levelId: string) => {
17+
const selectedLevel: TT.Level | undefined = tutorial.levels.find((l: TT.Level) => l.id === levelId)
18+
if (selectedLevel) {
19+
setTitle(selectedLevel.title)
20+
setContent(selectedLevel.content)
21+
}
22+
}
23+
return (
24+
<Menu>
25+
{tutorial.levels.map((level: TT.Level) => {
26+
const isCurrent = level.id === position.levelId
27+
const isComplete = progress.levels[level.id]
28+
let icon
29+
let disabled = false
30+
31+
if (isComplete) {
32+
// completed icon
33+
icon = <Icon type="minus" size="xs" />
34+
} else if (isCurrent) {
35+
// current icon`
36+
icon = <Icon type="minus" size="xs" />
37+
} else {
38+
// upcoming
39+
disabled = true
40+
icon = <Icon type="lock" size="xs" />
41+
}
42+
return (
43+
<Menu.Item key={level.id} disabled={disabled} onSelect={() => setMenuContent(level.id)}>
44+
{icon}&nbsp;&nbsp;&nbsp;{level.title}
45+
</Menu.Item>
46+
)
47+
})}
48+
</Menu>
49+
)
50+
}
51+
52+
export default ContentMenu

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

+10-41
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import * as React from 'react'
22
import * as T from 'typings'
33
import * as TT from 'typings/tutorial'
4-
import { Menu } from '@alifd/next'
54
import * as selectors from '../../services/selectors'
6-
import Icon from '../../components/Icon'
5+
import ContentMenu from './ContentMenu'
76
import Level from './components/Level'
8-
import logger from '../../services/logger'
97

108
interface PageProps {
119
context: T.MachineContext
@@ -45,48 +43,19 @@ const TutorialPage = (props: PageProps) => {
4543
return { ...step, status }
4644
})
4745

48-
const setMenuContent = (levelId: string) => {
49-
const selectedLevel: TT.Level | undefined = tutorial.levels.find((l: TT.Level) => l.id === levelId)
50-
if (selectedLevel) {
51-
setTitle(selectedLevel.title)
52-
setContent(selectedLevel.content)
53-
}
54-
}
55-
56-
const menu = (
57-
<Menu>
58-
{tutorial.levels.map((level: TT.Level) => {
59-
const isCurrent = level.id === position.levelId
60-
logger('progress', progress)
61-
const isComplete = progress.levels[level.id]
62-
let icon
63-
let disabled = false
64-
65-
if (isComplete) {
66-
// completed icon
67-
icon = <Icon type="minus" size="xs" />
68-
} else if (isCurrent) {
69-
// current icon`
70-
icon = <Icon type="minus" size="xs" />
71-
} else {
72-
// upcoming
73-
disabled = true
74-
icon = <Icon type="lock" size="xs" />
75-
}
76-
return (
77-
<Menu.Item key={level.id} disabled={disabled} onSelect={() => setMenuContent(level.id)}>
78-
{icon}&nbsp;&nbsp;&nbsp;{level.title}
79-
</Menu.Item>
80-
)
81-
})}
82-
</Menu>
83-
)
84-
8546
return (
8647
<Level
8748
title={title}
8849
content={content}
89-
menu={menu}
50+
menu={
51+
<ContentMenu
52+
tutorial={tutorial}
53+
position={position}
54+
progress={progress}
55+
setTitle={setTitle}
56+
setContent={setContent}
57+
/>
58+
}
9059
index={tutorial.levels.findIndex((l: TT.Level) => l.id === position.levelId)}
9160
steps={steps}
9261
status={progress.levels[position.levelId] ? 'COMPLETE' : 'ACTIVE'}

0 commit comments

Comments
 (0)