diff --git a/web-app/src/containers/Tutorial/components/Reset.tsx b/web-app/src/containers/Tutorial/components/Reset.tsx
index 197a9674..7b02d329 100644
--- a/web-app/src/containers/Tutorial/components/Reset.tsx
+++ b/web-app/src/containers/Tutorial/components/Reset.tsx
@@ -4,6 +4,8 @@ import { Button, Dialog, Message } from '@alifd/next'
interface Props {
disabled?: boolean
onReset(): void
+ warning?: boolean
+ style?: React.CSSProperties
}
const Reset = (props: Props) => {
@@ -24,11 +26,13 @@ const Reset = (props: Props) => {
return (
<>
setModalState('confirm')}
disabled={props.disabled}
+ warning={props.warning}
+ style={props.style}
>
Reset
diff --git a/web-app/src/containers/Tutorial/components/SideMenu.tsx b/web-app/src/containers/Tutorial/components/SideMenu.tsx
index 68b15b05..31323880 100644
--- a/web-app/src/containers/Tutorial/components/SideMenu.tsx
+++ b/web-app/src/containers/Tutorial/components/SideMenu.tsx
@@ -81,10 +81,10 @@ const SideMenu = (props: Props) => {
About
- {/* - {
onMenuClose()
props.setPage('settings')
@@ -92,8 +92,7 @@ const SideMenu = (props: Props) => {
>
Settings
- {' '}
- */}
+
)
diff --git a/web-app/src/containers/Tutorial/containers/Settings.tsx b/web-app/src/containers/Tutorial/containers/Settings.tsx
index 2b5cfc56..76ee9dea 100644
--- a/web-app/src/containers/Tutorial/containers/Settings.tsx
+++ b/web-app/src/containers/Tutorial/containers/Settings.tsx
@@ -1,15 +1,78 @@
-import * as React from 'react'
+import Button from 'components/Button'
+import React, { useState, useEffect } from 'react'
+import { Theme } from '../../../styles/theme'
+import Reset from '../components/Reset'
+
+import * as T from 'typings'
const styles = {
- container: {
+ flexColumn: {
+ display: 'flex' as 'flex',
+ flexDirection: 'column' as 'column',
+ },
+ container: (theme: Theme) => ({
display: 'flex' as 'flex',
flexDirection: 'column' as 'column',
- padding: '1rem',
+ backgroundColor: theme['$color-white'],
+ height: 'auto',
+ }),
+ header: (theme: Theme) => ({
+ display: 'flex' as 'flex',
+ alignItems: 'center',
+ justifyContent: 'space-between',
+ height: '2rem',
+ backgroundColor: theme['$color-fill1-2'],
+ fontSize: '1rem',
+ lineHeight: '1rem',
+ padding: '10px 0.4rem',
+ }),
+ content: {
+ padding: '0.5rem',
},
+ menu: {},
+ menuItem: {
+ display: 'flex' as 'flex',
+ border: '1px solid rgb(173, 173, 173)',
+ borderRadius: '5px',
+ padding: '0.5rem',
+ },
+ menuItemHeader: {
+ fontWeight: 'bold' as 'bold',
+ },
+ menuItemContent: {},
+ menuItemButton: {
+ marginLeft: 'auto' as 'auto',
+ },
+}
+
+interface Props {
+ onReset(): void
}
-const SettingsPage = () => {
- return
Settings coming soon...
+const SettingsPage = (props: Props) => {
+ return (
+
+
+
+
+
+
+
Reset Tutorial
+
+ This will reset the whole tutorial and change the source files back to the first level and first task
+ checkpoint. This will reset the whole tutorial and change the source files back to the first level and
+ first task checkpoint. This will reset the whole tutorial and change the source files back to the first
+ level and first task checkpoint.
+
+
+
+
+
+
+
+ )
}
export default SettingsPage
diff --git a/web-app/src/containers/Tutorial/index.tsx b/web-app/src/containers/Tutorial/index.tsx
index c7827e8d..c16c62e2 100644
--- a/web-app/src/containers/Tutorial/index.tsx
+++ b/web-app/src/containers/Tutorial/index.tsx
@@ -18,6 +18,7 @@ import ScrollContent from './components/ScrollContent'
import CompletedBanner from './components/CompletedBanner'
import { Theme } from '../../styles/theme'
import { useTheme } from 'emotion-theming'
+import SettingsPage from './containers/Settings'
const styles = {
page: {
@@ -127,6 +128,18 @@ const TutorialPage = (props: PageProps) => {
const [page, setPage] = React.useState<'about' | 'level' | 'review' | 'settings'>('level')
+ const onSettingsReset = () => {
+ //Reset to first level first step
+ const level: T.LevelUI | null = levels.length ? levels[1] : null
+ if (level) {
+ onResetToPosition({
+ levelId: level.id,
+ stepId: level.steps.length ? level.steps[0].id : null,
+ complete: false,
+ })
+ setPage('level')
+ }
+ }
// format level code with status for easy rendering
const { level, levels, levelIndex, stepIndex } = formatLevels({
position,
@@ -155,7 +168,7 @@ const TutorialPage = (props: PageProps) => {
)}
{page === 'review' && }
- {/* {page === 'settings' && } */}
+ {page === 'settings' && }
{props.state === 'Completed' ? (
diff --git a/web-app/stories/Settings.stories.tsx b/web-app/stories/Settings.stories.tsx
new file mode 100644
index 00000000..2d442aff
--- /dev/null
+++ b/web-app/stories/Settings.stories.tsx
@@ -0,0 +1,10 @@
+import * as React from 'react'
+import { storiesOf } from '@storybook/react'
+import SideBarDecorator from './utils/SideBarDecorator'
+import Settings from '../src/containers/Tutorial/containers/Settings'
+
+storiesOf('Settings', module)
+ .addDecorator(SideBarDecorator)
+ .add('Settings Page', () => {
+ return console.log('Reset...')} />
+ })