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

Commit5b5e179

Browse files
authored
Merge pull requestcoderoad#6 from ShMcK/feature/tutorial-steps
Feature/tutorial steps
2 parents6190afe +9eaa01f commit5b5e179

File tree

8 files changed

+187
-80
lines changed

8 files changed

+187
-80
lines changed

‎src/editor/commands/index.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export const createCommands = ({ context, machine, storage, git, position }: Cre
7373
console.log('save document',document)
7474
if(languageIds.includes(document.languageId)&&document.uri.scheme==='file'){
7575
// do work
76-
vscode.commands.executeCommand('coderoad.run_test')
76+
machine.send('TEST_RUN')
7777
}
7878
})
7979
},
@@ -104,6 +104,9 @@ export const createCommands = ({ context, machine, storage, git, position }: Cre
104104
machine.send(action)
105105
},
106106
[COMMANDS.RUN_TEST]:()=>{
107-
runTest()
107+
runTest({
108+
onSuccess:()=>machine.send('TEST_PASS'),
109+
onFail:()=>machine.send('TEST_FAIL')
110+
})
108111
}
109112
})

‎src/editor/commands/runTest.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import*asvscodefrom'vscode'
22
import{exec}from'../../services/node'
33
import*asstoragefrom'../../services/storage'
4-
import*astestResultfrom'../../services/testResult'
54

65
// ensure only latest run_test action is taken
76
letcurrentId=0
@@ -21,7 +20,12 @@ const getOutputChannel = (name: string): vscode.OutputChannel => {
2120
return_channel
2221
}
2322

24-
exportdefaultasyncfunctionrunTest():Promise<void>{
23+
interfaceProps{
24+
onSuccess():void,
25+
onFail():void
26+
}
27+
28+
exportdefaultasyncfunctionrunTest({ onSuccess, onFail}:Props):Promise<void>{
2529
// increment process id
2630
letprocessId=++currentId
2731

@@ -73,8 +77,8 @@ export default async function runTest(): Promise<void> {
7377
// exit early
7478
return
7579
}
76-
//@ts-ignore
77-
testResult.onSuccess(position)
80+
console.log('call onSuccess')
81+
onSuccess()
7882
}else{
7983
console.log('NOT SUCCESS?')
8084
}
@@ -118,7 +122,8 @@ export default async function runTest(): Promise<void> {
118122
return
119123
}
120124
console.log('ERROR',firstError.message)
121-
testResult.onFailure()
125+
console.log('call onFail')
126+
onFail()
122127
}else{
123128
console.error('NOTE: PARSER DID NOT WORK FOR ',line)
124129
}

‎src/services/storage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ interface ProgressUpdate {
5252
}
5353
}
5454

55-
exportasyncfunctionupdateProgress(record:ProgressUpdate):Promise<void>{
55+
exportasyncfunctionsetProgress(record:ProgressUpdate):Promise<void>{
5656
constprogress=awaitgetProgress()
5757
if(record.levels){
5858
progress.levels={

‎src/services/testResult.ts

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
1-
import*asCRfrom'typings'
2-
import*asvscodefrom'vscode'
3-
import*asstoragefrom'./storage'
4-
5-
exportasyncfunctiononSuccess(position:CR.Position){
6-
console.log('onSuccess',position)
7-
vscode.window.showInformationMessage('SUCCESS')
8-
9-
// calculate progress changes
10-
const[progress,tutorial]=awaitPromise.all([storage.getProgress(),storage.getTutorial()])
11-
12-
if(!tutorial){
13-
thrownewError('No tutorial found')
14-
}
15-
16-
if(!position.stepId){
17-
thrownewError('No step position found')
18-
}
19-
20-
const{ data}=tutorial
21-
22-
// step complete
23-
constnextProgress=progress
24-
nextProgress.steps[position.stepId]=true
25-
26-
// is stage complete
27-
conststeps=data.stages[position.stageId].stepList
28-
constisStageComplete=progress.stages[position.stageId]||steps[steps.length-1]===position.stepId
29-
nextProgress.stages[position.stageId]=isStageComplete
30-
31-
// is level complete
32-
if(isStageComplete){
33-
conststages=data.levels[position.levelId].stageList
34-
constisLevelComplete=progress.levels[position.levelId]||stages[stages.length-1]===position.stageId
35-
nextProgress.levels[position.levelId]=isLevelComplete
36-
37-
if(isLevelComplete){
38-
constlevels=data.summary.levelList
39-
constisTutorialComplete=progress.complete||levels[levels.length-1]===position.levelId
40-
nextProgress.complete=isTutorialComplete
41-
}
42-
}
43-
console.log('nextProgress',nextProgress)
44-
45-
// update ls progress
46-
storage.updateProgress(nextProgress)
47-
// send({ type: 'STEP_COMPLETE', payload: { progress: nextProgress }})
48-
}
49-
50-
exportasyncfunctiononFailure(){
51-
// TODO: capture analytics on stepId
52-
vscode.window.showWarningMessage('FAIL')
53-
}
1+
//import * as CR from 'typings'
2+
//import * as vscode from 'vscode'
3+
//import * as storage from './storage'
4+
5+
//export async function onSuccess(position: CR.Position) {
6+
// console.log('onSuccess', position)
7+
// vscode.window.showInformationMessage('SUCCESS')
8+
9+
// // calculate progress changes
10+
// const [progress, tutorial] = await Promise.all([storage.getProgress(), storage.getTutorial()])
11+
12+
// if (!tutorial) {
13+
// throw new Error('No tutorial found')
14+
// }
15+
16+
// if (!position.stepId) {
17+
// throw new Error('No step position found')
18+
// }
19+
20+
// const { data } = tutorial
21+
22+
// // step complete
23+
// const nextProgress = progress
24+
// nextProgress.steps[position.stepId] = true
25+
26+
// // is stage complete
27+
// const steps = data.stages[position.stageId].stepList
28+
// const isStageComplete = progress.stages[position.stageId] || steps[steps.length - 1] === position.stepId
29+
// nextProgress.stages[position.stageId] = isStageComplete
30+
31+
// // is level complete
32+
// if (isStageComplete) {
33+
// const stages = data.levels[position.levelId].stageList
34+
// const isLevelComplete = progress.levels[position.levelId] || stages[stages.length - 1] === position.stageId
35+
// nextProgress.levels[position.levelId] = isLevelComplete
36+
37+
// if (isLevelComplete) {
38+
// const levels = data.summary.levelList
39+
// const isTutorialComplete = progress.complete || levels[levels.length - 1] === position.levelId
40+
// nextProgress.complete = isTutorialComplete
41+
// }
42+
// }
43+
// console.log('nextProgress', nextProgress)
44+
45+
// // update ls progress
46+
// storage.updateProgress(nextProgress)
47+
// // send({ type: 'STEP_COMPLETE', payload: { progress: nextProgress }})
48+
//}
49+
50+
//export async function onFailure() {
51+
// // TODO: capture analytics on stepId
52+
// vscode.window.showWarningMessage('FAIL')
53+
//}

‎src/state/actions/index.ts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,5 +84,71 @@ export default {
8484
}),
8585
tutorialLoadNext(){
8686
machine.send('LOAD_NEXT')
87+
},
88+
testStart(){
89+
vscode.commands.executeCommand('coderoad.run_test')
90+
},
91+
testPass(){
92+
vscode.window.showInformationMessage('PASS')
93+
},
94+
testFail(){
95+
vscode.window.showWarningMessage('FAIL')
96+
},
97+
//@ts-ignore
98+
stepComplete:assign({
99+
progress:(context:CR.MachineContext):CR.Progress=>{
100+
constnextProgress={
101+
...context.progress,
102+
steps:{
103+
...context.progress.steps,
104+
[context.position.stepId]:true,
105+
}
106+
}
107+
storage.setProgress(nextProgress)
108+
returnnextProgress
109+
}
110+
}),
111+
//@ts-ignore
112+
stageComplete:assign({
113+
progress:(context:CR.MachineContext):CR.Progress=>{
114+
constnextProgress={
115+
...context.progress,
116+
stages:{
117+
...context.progress.stages,
118+
[context.position.stageId]:true,
119+
}
120+
}
121+
storage.setProgress(nextProgress)
122+
returnnextProgress
123+
}
124+
}),
125+
//@ts-ignore
126+
levelComplete:assign({
127+
progress:(context:CR.MachineContext):CR.Progress=>{
128+
constnextProgress={
129+
...context.progress,
130+
levels:{
131+
...context.progress.levels,
132+
[context.position.levelId]:true,
133+
}
134+
}
135+
storage.setProgress(nextProgress)
136+
returnnextProgress
137+
138+
}
139+
}),
140+
//@ts-ignore
141+
tutorialComplete:assign({
142+
progress:(context:CR.MachineContext):CR.Progress=>{
143+
constnextProgress={
144+
...context.progress,
145+
complete:true,
146+
}
147+
storage.setProgress(nextProgress)
148+
returnnextProgress
149+
}
150+
}),
151+
stepLoadNext(){
152+
console.log("LOAD NEXT STEP")
87153
}
88154
}

‎src/state/guards/index.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,29 @@ export default {
66
console.log('GUARD: hasNoNextLevelProgress')
77
returnfalse
88
},
9+
tasksComplete:(context:CR.MachineContext):boolean=>{
10+
console.log('GUARD: tasksComplete')
11+
returnfalse
12+
},
13+
hasNextStep:(context:CR.MachineContext):boolean=>{
14+
console.log('GUARD: hasNextStep')
15+
const{ data, position, progress}=context
16+
conststeps=data.stages[position.stageId].stepList
17+
constisStageComplete=progress.stages[position.stageId]||steps[steps.length-1]===position.stepId
18+
return!isStageComplete
19+
},
20+
hasNextStage:(context:CR.MachineContext):boolean=>{
21+
console.log('GUARD: hasNextStage')
22+
const{ data, position, progress}=context
23+
conststages=data.levels[position.levelId].stageList
24+
constisLevelComplete=progress.levels[position.levelId]||stages[stages.length-1]===position.stageId
25+
return!isLevelComplete
26+
},
27+
hasNextLevel:(context:CR.MachineContext):boolean=>{
28+
console.log('GUARD: hasNextLevel')
29+
const{ data, position, progress}=context
30+
constlevels=data.summary.levelList
31+
constisTutorialComplete=progress.complete||levels[levels.length-1]===position.levelId
32+
return!isTutorialComplete
33+
},
934
}

‎src/state/machine.ts

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export const machine = Machine<
2121
states:{
2222
Initial:{
2323
after:{
24-
1000:'Startup'
24+
2000:'Startup'
2525
}
2626
},
2727
Startup:{
@@ -50,7 +50,7 @@ export const machine = Machine<
5050
ContinueTutorial:{
5151
onEntry:['tutorialContinue'],
5252
on:{
53-
TUTORIAL_START:'#tutorial-load-next'
53+
TUTORIAL_START:'#tutorial-load-next-stage'
5454
}
5555
},
5656
}
@@ -60,8 +60,8 @@ export const machine = Machine<
6060
initial:'Summary',
6161
onEntry:['tutorialSetup'],
6262
states:{
63-
LoadNext:{
64-
id:'tutorial-load-next',
63+
LoadNextStage:{
64+
id:'tutorial-load-next-stage',
6565
onEntry:['tutorialLoadNext'],
6666
on:{
6767
LOAD_NEXT:[
@@ -101,8 +101,9 @@ export const machine = Machine<
101101
},
102102
},
103103
TestRunning:{
104+
onEntry:['testStart'],
104105
on:{
105-
TEST_SUCCESS:[
106+
TEST_PASS:[
106107
{
107108
target:'StageComplete',
108109
cond:'tasksComplete',
@@ -111,29 +112,35 @@ export const machine = Machine<
111112
target:'TestPass',
112113
},
113114
],
114-
TEST_FAILURE:'TestFail',
115+
TEST_FAIL:'TestFail',
115116
},
116117
},
117118
TestPass:{
118-
onEntry:['stepComplete'],
119+
onEntry:['testPass','stepComplete'],
120+
after:{
121+
0:{
122+
target:'StepNext',
123+
cond:'hasNextStep',
124+
}
125+
},
119126
on:{
120-
NEXT:[
121-
{
122-
target:'StageNormal',
123-
cond:'hasNextStep',
124-
},
125-
{
126-
target:'StageComplete',
127-
},
128-
],
127+
NEXT:'StageComplete',
129128
},
130129
},
131130
TestFail:{
132-
on:{
133-
RETURN:'StageNormal',
131+
onEntry:['testFail'],
132+
after:{
133+
0:'StageNormal'
134134
},
135135
},
136+
StepNext:{
137+
onEntry:['stepLoadNext'],
138+
after:{
139+
0:'StageNormal'
140+
}
141+
},
136142
StageComplete:{
143+
onEntry:'stageComplete',
137144
on:{
138145
NEXT:[
139146
{

‎typings/index.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ export interface MachineStateSchema {
146146
}
147147
Tutorial:{
148148
states:{
149-
LoadNext:{}
149+
LoadNextStage:{}
150150
Summary:{}
151151
Level:{}
152152
Stage:{
@@ -155,6 +155,7 @@ export interface MachineStateSchema {
155155
TestRunning:{}
156156
TestPass:{}
157157
TestFail:{}
158+
StepNext:{}
158159
StageComplete:{}
159160
}
160161
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp