Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4a6d6f7

Browse files
authored
Merge pull request#388 from coderoad/feature/on-reset
Feature/on reset
2 parentsdb94db6 +98c7c50 commit4a6d6f7

File tree

16 files changed

+194
-76
lines changed

16 files changed

+194
-76
lines changed

‎src/channel/index.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ import saveCommit from '../actions/saveCommit'
88
import{setupActions,solutionActions}from'../actions/setupActions'
99
importtutorialConfigfrom'../actions/tutorialConfig'
1010
import{COMMANDS}from'../editor/commands'
11-
importloggerfrom'../services/logger'
1211
importContextfrom'./context'
13-
import{version,compareVersions}from'../services/dependencies'
14-
import{openWorkspace,checkWorkspaceEmpty}from'../services/workspace'
1512
import{readFile}from'fs'
1613
import{join}from'path'
1714
import{promisify}from'util'
15+
importloggerfrom'../services/logger'
16+
import{version,compareVersions}from'../services/dependencies'
17+
import{openWorkspace,checkWorkspaceEmpty}from'../services/workspace'
1818
import{showOutput}from'../services/testRunner/output'
19+
import{exec}from'../services/node'
1920
import{WORKSPACE_ROOT,TUTORIAL_URL}from'../environment'
2021

2122
constreadFileAsync=promisify(readFile)
@@ -319,6 +320,17 @@ class Channel implements Channel {
319320
case'EDITOR_RUN_TEST':
320321
vscode.commands.executeCommand(COMMANDS.RUN_TEST,action?.payload)
321322
return
323+
case'EDITOR_RUN_RESET_SCRIPT':
324+
consttutorial:TT.Tutorial|null=this.context.tutorial.get()
325+
// if tutorial.config.reset.command, run it
326+
if(tutorial?.config?.reset?.command){
327+
awaitexec({command:tutorial.config.reset.command})
328+
}
329+
return
330+
case'EDITOR_RUN_RESET_TO_LAST_PASS':
331+
return
332+
case'EDITOR_RUN_RESET_TO_TIMELINE':
333+
return
322334
default:
323335
logger(`No match for action type:${actionType}`)
324336
return

‎src/services/git/lastPass.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import*asTTfrom'../../../typings/tutorial'
2+
import*asTfrom'../../../typings'
3+
4+
constgetLastPassCommitHash=(position:T.Position,levels:TT.Level[])=>{
5+
// get previous position
6+
const{ levelId, stepId}=position
7+
8+
// get solution hash if it exists
9+
// else get setup hash
10+
}
11+
12+
exportdefaultgetLastPassCommitHash

‎typings/tutorial.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@ import { ProgressStatus } from './index'
22

33
exporttypeMaybe<T>=T|null
44

5+
exporttypeConfigReset={
6+
command?:string
7+
}
8+
59
exporttypeTutorialConfig={
6-
appVersions:TutorialAppVersions
10+
appVersions?:TutorialAppVersions
711
testRunner:TestRunnerConfig
812
repo:TutorialRepo
913
dependencies?:TutorialDependency[]
14+
reset?:ConfigReset
1015
}
1116

1217
/** Logical groupings of tasks */

‎web-app/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"react-addons-css-transition-group":"^15.6.2",
4040
"react-dom":"^16.13.1",
4141
"reselect":"^4.0.0",
42+
"use-media":"^1.4.0",
4243
"xstate":"^4.11.0"
4344
},
4445
"devDependencies": {
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import*asReactfrom'react'
2+
import{Dialog}from'@alifd/next'
3+
importButtonfrom'../../../components/Button'
4+
importMarkdownfrom'../../../components/Markdown'
5+
6+
interfaceProps{
7+
disabled:boolean
8+
onReset():void
9+
}
10+
11+
constReset=(props:Props)=>{
12+
const[modalState,setModalState]=React.useState<'none'|'confirm'|'progress'>('none')
13+
14+
constonClose=()=>{
15+
setModalState('none')
16+
}
17+
18+
constonOk=()=>{
19+
setModalState('progress')
20+
props.onReset()
21+
returnsetTimeout(()=>{
22+
setModalState('none')
23+
},3000)
24+
}
25+
26+
return(
27+
<>
28+
<Buttontype="secondary"size="medium"onClick={()=>setModalState('confirm')}disabled={props.disabled}>
29+
Reset
30+
</Button>
31+
<Dialog
32+
title="Reset"
33+
visible={modalState==='confirm'}
34+
onOk={onOk}
35+
onCancel={onClose}
36+
onClose={onClose}
37+
footerActions={['ok','cancel']}
38+
>
39+
<Markdown>
40+
{`Are you sure you want to reset your progress?
41+
Resetting progress will remove the commits you have made and replace them with the tutorial commit timeline. Your code may look different after resetting.`}
42+
</Markdown>
43+
</Dialog>
44+
<Dialog
45+
title="Resetting..."
46+
visible={modalState==='progress'}
47+
footer={false}
48+
onClose={onClose}
49+
closeable={false}
50+
>
51+
Reverting progress to an earlier commit...
52+
</Dialog>
53+
</>
54+
)
55+
}
56+
57+
exportdefaultReset
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import*asReactfrom'react'
2+
import{Progress}from'@alifd/next'
3+
importuseMediafrom'use-media'
4+
5+
conststyles={
6+
progress:{
7+
display:'flex'as'flex',
8+
justifyContent:'flex-end'as'flex-end',
9+
alignItems:'center'as'center',
10+
width:'10rem',
11+
color:'white',
12+
},
13+
text:{color:'white'},
14+
}
15+
16+
interfaceProps{
17+
current:number
18+
max:number
19+
}
20+
21+
constStepProgress=(props:Props)=>{
22+
constText=(
23+
<spanstyle={styles.text}>
24+
{props.current} of{props.max}
25+
</span>
26+
)
27+
28+
constisWide=useMedia({minWidth:'340px'})
29+
30+
if(isWide){
31+
return(
32+
<Progress
33+
state="success"
34+
progressive
35+
percent={(props.current/props.max)*100}
36+
shape="line"
37+
color="rgb(85, 132, 255)"
38+
css={styles.progress}
39+
textRender={()=>{
40+
returnText
41+
}}
42+
/>
43+
)
44+
}
45+
return<divcss={{marginRight:'0.5rem',fontSize:'80%'}}>{Text}</div>
46+
}
47+
48+
exportdefaultStepProgress

‎web-app/src/containers/Tutorial/index.tsx

Lines changed: 19 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ import * as selectors from '../../services/selectors'
44
importSideMenufrom'./components/SideMenu'
55
importLevelfrom'./components/Level'
66
importIconfrom'../../components/Icon'
7-
importSettingsPagefrom'./containers/Settings'
87
importReviewPagefrom'./containers/Review'
98
importButtonfrom'../../components/Button'
109
importProcessMessagesfrom'../../components/ProcessMessages'
1110
importTestMessagefrom'../../components/TestMessage'
12-
import{Progress}from'@alifd/next'
11+
importStepProgressfrom'./components/StepProgress'
1312
import{DISPLAY_RUN_TEST_BUTTON}from'../../environment'
1413
importformatLevelsfrom'./formatLevels'
14+
// import SettingsPage from './containers/Settings'
15+
// import Reset from './components/Reset'
1516

1617
conststyles={
1718
header:{
@@ -47,13 +48,6 @@ const styles = {
4748
right:0,
4849
color:'white',
4950
},
50-
taskProgress:{
51-
display:'flex'as'flex',
52-
justifyContent:'flex-end'as'flex-end',
53-
alignItems:'center'as'center',
54-
width:'10rem',
55-
color:'white',
56-
},
5751
processes:{
5852
padding:'0 1rem',
5953
position:'fixed'as'fixed',
@@ -100,6 +94,10 @@ const TutorialPage = (props: PageProps) => {
10094
props.send({type:'RUN_TEST'})
10195
}
10296

97+
constonReset=():void=>{
98+
// TODO
99+
}
100+
103101
const[menuVisible,setMenuVisible]=React.useState(false)
104102

105103
const[page,setPage]=React.useState<'level'|'settings'|'review'>('level')
@@ -140,39 +138,27 @@ const TutorialPage = (props: PageProps) => {
140138
</div>
141139
)}
142140
{/* Left */}
143-
{DISPLAY_RUN_TEST_BUTTON&&level.status!=='COMPLETE' ?(
144-
<Buttonstyle={{marginLeft:'1rem'}}type="primary"onClick={onRunTest}disabled={processes.length>0}>
145-
Run
146-
</Button>
147-
) :(
148-
<div/>
149-
)}
141+
<divcss={{flex:1}}>
142+
{DISPLAY_RUN_TEST_BUTTON&&level.status!=='COMPLETE' ?(
143+
<Buttonstyle={{marginLeft:'1rem'}}type="primary"onClick={onRunTest}disabled={processes.length>0}>
144+
Run
145+
</Button>
146+
) :null}
147+
</div>
150148

151149
{/* Center */}
152-
<div/>
150+
<divcss={{flex:1,display:'flex',justifyContent:'center'}}>
151+
{/* <Reset onReset={onReset} disabled={processes.length > 0} /> */}
152+
</div>
153153

154154
{/* Right */}
155-
<div>
155+
<divcss={{flex:1,display:'flex',justifyContent:'flex-end'}}>
156156
{level.status==='COMPLETE'||!level.steps.length ?(
157157
<Buttonstyle={{marginRight:'1rem'}}type="primary"onClick={onContinue}>
158158
Continue
159159
</Button>
160160
) :(
161-
<Progress
162-
state="success"
163-
progressive
164-
percent={(stepIndex/level.steps.length)*100}
165-
shape="line"
166-
color="rgb(85, 132, 255)"
167-
css={styles.taskProgress}
168-
textRender={()=>{
169-
return(
170-
<spanstyle={{color:'white'}}>
171-
{stepIndex} of{level.steps.length}
172-
</span>
173-
)
174-
}}
175-
/>
161+
<StepProgresscurrent={stepIndex}max={level.steps.length}/>
176162
)}
177163
</div>
178164
</div>

‎web-app/src/services/state/actions/editor.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,9 @@ export default (editorSend: any) => ({
117117
payload:{position:context.position},
118118
})
119119
},
120+
runResetScript(){
121+
editorSend({
122+
type:'EDITOR_RUN_RESET_SCRIPT',
123+
})
124+
},
120125
})

‎web-app/src/services/state/machine.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,9 @@ export const createMachine = (options: any) => {
168168
RUN_TEST:{
169169
actions:['runTest'],
170170
},
171+
RESET_SCRIPT:{
172+
actions:['runResetScript'],
173+
},
171174
},
172175
},
173176
TestRunning:{

‎web-app/stories/Review.stories.tsx

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -142,16 +142,5 @@ storiesOf('Review', module)
142142
.addDecorator(SideBarDecorator)
143143
.addDecorator(withKnobs)
144144
.add('Example',()=>{
145-
constprogress={
146-
levels:{
147-
'1':true,
148-
},
149-
steps:{
150-
'1.1':true,
151-
'1.2':true,
152-
'1.3':true,
153-
'2.1':true,
154-
},
155-
}
156-
return<Reviewlevels={levels}progress={progress}/>
145+
return<Reviewlevels={levels}/>
157146
})

‎web-app/stories/Tests.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ import SideBarDecorator from './utils/SideBarDecorator'
55

66
storiesOf('Test Message',module)
77
.addDecorator(SideBarDecorator)
8-
.add('Fail',()=><TestMessagecontent={'Test failed for some reason'}/>)
8+
.add('Fail',()=><TestMessagemessage={'Test failed for some reason'}/>)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp