From 468e8970a311ee0350c9f8b321485132e88fd15e Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Aug 2020 15:04:11 -0700 Subject: [PATCH 1/3] rename poorly named editor actions Signed-off-by: shmck --- src/channel.ts | 5 +++-- web-app/src/services/state/actions/editor.ts | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/channel.ts b/src/channel.ts index 862e50f4..e1d11d01 100644 --- a/src/channel.ts +++ b/src/channel.ts @@ -55,12 +55,13 @@ class Channel implements Channel { openWorkspace() return // load step actions (git commits, commands, open files) - case 'SETUP_ACTIONS': + case 'EDITOR_LEVEL_ENTER': + case 'EDITOR_STEP_ENTER': await vscode.commands.executeCommand(COMMANDS.SET_CURRENT_POSITION, action.payload.position) hooks.onSetupEnter(action.payload.actions) return // load solution step actions (git commits, commands, open files) - case 'SOLUTION_ACTIONS': + case 'EDITOR_SOLUTION_ENTER': await vscode.commands.executeCommand(COMMANDS.SET_CURRENT_POSITION, action.payload.position) hooks.onSolutionEnter(action.payload.actions) return diff --git a/web-app/src/services/state/actions/editor.ts b/web-app/src/services/state/actions/editor.ts index 7a035560..72ef00ad 100644 --- a/web-app/src/services/state/actions/editor.ts +++ b/web-app/src/services/state/actions/editor.ts @@ -32,7 +32,7 @@ export default (editorSend: any) => ({ const step: TT.Step | null = selectors.currentStep(context) // load step actions editorSend({ - type: 'SETUP_ACTIONS', + type: 'EDITOR_LEVEL_ENTER', payload: { position: { stepId: step?.id || null, @@ -48,7 +48,7 @@ export default (editorSend: any) => ({ if (step && step.setup) { // load step actions editorSend({ - type: 'SETUP_ACTIONS', + type: 'EDITOR_STEP_ENTER', payload: { // set position here position: { @@ -76,7 +76,7 @@ export default (editorSend: any) => ({ // tell editor to load solution commit if (step && step.solution) { editorSend({ - type: 'SOLUTION_ACTIONS', + type: 'EDITOR_SOLUTION_ENTER', payload: { position: { stepId: step.id, From cf4095f120ffcfc3216a321c6a2cc5f83d270bf9 Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Aug 2020 15:40:13 -0700 Subject: [PATCH 2/3] setup step/level/tutorial complete tracking Signed-off-by: shmck --- src/channel.ts | 9 ++++++++ src/services/hooks/index.ts | 16 +++++++++++++ web-app/src/services/state/actions/editor.ts | 24 ++++++++++++++++++++ web-app/src/services/state/machine.ts | 13 +++++++---- 4 files changed, 58 insertions(+), 4 deletions(-) diff --git a/src/channel.ts b/src/channel.ts index e1d11d01..f13e3c06 100644 --- a/src/channel.ts +++ b/src/channel.ts @@ -81,6 +81,15 @@ class Channel implements Channel { case 'EDITOR_RUN_RESET_POSITION': actions.onRunReset({ type: 'POSITION', position: action.payload.position }, this.context) return + case 'EDITOR_STEP_COMPLETE': + hooks.onStepComplete(action.payload) + return + case 'EDITOR_LEVEL_COMPLETE': + hooks.onLevelComplete(action.payload) + return + case 'EDITOR_TUTORIAL_COMPLETE': + hooks.onTutorialComplete(action.payload) + return default: logger(`No match for action type: ${actionType}`) return diff --git a/src/services/hooks/index.ts b/src/services/hooks/index.ts index cc6fc640..e6dabc7e 100644 --- a/src/services/hooks/index.ts +++ b/src/services/hooks/index.ts @@ -1,3 +1,4 @@ +import * as T from 'typings' import * as TT from 'typings/tutorial' import * as git from '../git' import loadCommits from './utils/loadCommits' @@ -39,3 +40,18 @@ export const onSolutionEnter = async (actions: TT.StepActions): Promise => export const onError = async (error: Error): Promise => { telemetryOnError(error) } + +export const onStepComplete = async ({ position }: { position: T.Position }): Promise => { + /* TODO */ + console.log(`ON STEP COMPLETE: ${JSON.stringify(position)}`) +} + +export const onLevelComplete = async ({ position }: { position: T.Position }): Promise => { + /* TODO */ + console.log(`ON LEVEL COMPLETE: ${JSON.stringify(position)}`) +} + +export const onTutorialComplete = async ({ position }: { position: T.Position }): Promise => { + /* TODO */ + console.log(`ON LEVEL COMPLETE: ${JSON.stringify(position)}`) +} diff --git a/web-app/src/services/state/actions/editor.ts b/web-app/src/services/state/actions/editor.ts index 72ef00ad..c68eb8dd 100644 --- a/web-app/src/services/state/actions/editor.ts +++ b/web-app/src/services/state/actions/editor.ts @@ -133,4 +133,28 @@ export default (editorSend: any) => ({ }, }) }, + onStepComplete(context: T.MachineContext): void { + editorSend({ + type: 'EDITOR_STEP_COMPLETE', + payload: { + position: context.position, + }, + }) + }, + onLevelComplete(context: T.MachineContext): void { + editorSend({ + type: 'EDITOR_LEVEL_COMPLETE', + payload: { + position: context.position, + }, + }) + }, + onTutorialComplete(context: T.MachineContext): void { + editorSend({ + type: 'EDITOR_TUTORIAL_COMPLETE', + payload: { + position: context.position, + }, + }) + }, }) diff --git a/web-app/src/services/state/machine.ts b/web-app/src/services/state/machine.ts index e97c1744..2b3e679d 100644 --- a/web-app/src/services/state/machine.ts +++ b/web-app/src/services/state/machine.ts @@ -198,9 +198,12 @@ export const createMachine = (options: any) => { on: { LOAD_NEXT_STEP: { target: 'Normal', - actions: ['loadStep', 'updateStepPosition'], + actions: ['onStepComplete', 'loadStep', 'updateStepPosition'], + }, + LEVEL_COMPLETE: { + target: 'LevelComplete', + actions: ['onLevelComplete'], }, - LEVEL_COMPLETE: 'LevelComplete', }, }, LevelComplete: { @@ -223,14 +226,16 @@ export const createMachine = (options: any) => { target: 'Load', actions: ['updatePosition'], }, - COMPLETED: '#completed-tutorial', + COMPLETED: { + target: '#completed-tutorial', + actions: ['onTutorialComplete'], + }, }, }, }, }, Completed: { id: 'completed-tutorial', - onEntry: ['userTutorialComplete'], // unusued on: { SELECT_TUTORIAL: { target: '#select-new-tutorial', From 78c2c1d45675d4d18e3e316207574c69b577a55d Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 2 Aug 2020 15:48:57 -0700 Subject: [PATCH 3/3] limit hook payloads Signed-off-by: shmck --- src/services/hooks/index.ts | 16 +++++++--------- web-app/src/services/state/actions/editor.ts | 7 ++++--- web-app/src/services/state/machine.ts | 4 ++-- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/services/hooks/index.ts b/src/services/hooks/index.ts index e6dabc7e..95f5b5de 100644 --- a/src/services/hooks/index.ts +++ b/src/services/hooks/index.ts @@ -8,6 +8,7 @@ import runCommands from './utils/runCommands' import runVSCodeCommands from './utils/runVSCodeCommands' import { onError as telemetryOnError } from '../telemetry' import { onRunTest } from '../../actions/onTest' +import logger from '../logger' export const onInit = async (actions: TT.StepActions): Promise => { await loadCommits(actions?.commits) @@ -41,17 +42,14 @@ export const onError = async (error: Error): Promise => { telemetryOnError(error) } -export const onStepComplete = async ({ position }: { position: T.Position }): Promise => { - /* TODO */ - console.log(`ON STEP COMPLETE: ${JSON.stringify(position)}`) +export const onStepComplete = async ({ levelId, stepId }: { levelId: string; stepId: string }): Promise => { + logger(`ON STEP COMPLETE: ${JSON.stringify({ levelId, stepId })}`) } -export const onLevelComplete = async ({ position }: { position: T.Position }): Promise => { - /* TODO */ - console.log(`ON LEVEL COMPLETE: ${JSON.stringify(position)}`) +export const onLevelComplete = async ({ levelId }: { levelId: string }): Promise => { + logger(`ON LEVEL COMPLETE: ${JSON.stringify(levelId)}`) } -export const onTutorialComplete = async ({ position }: { position: T.Position }): Promise => { - /* TODO */ - console.log(`ON LEVEL COMPLETE: ${JSON.stringify(position)}`) +export const onTutorialComplete = async ({ tutorialId }: { tutorialId: string }): Promise => { + logger(`ON TUTORIAL COMPLETE: ${JSON.stringify(tutorialId)}`) } diff --git a/web-app/src/services/state/actions/editor.ts b/web-app/src/services/state/actions/editor.ts index c68eb8dd..c57296e2 100644 --- a/web-app/src/services/state/actions/editor.ts +++ b/web-app/src/services/state/actions/editor.ts @@ -137,7 +137,8 @@ export default (editorSend: any) => ({ editorSend({ type: 'EDITOR_STEP_COMPLETE', payload: { - position: context.position, + levelId: context.position.levelId, + stepId: context.position.levelId, }, }) }, @@ -145,7 +146,7 @@ export default (editorSend: any) => ({ editorSend({ type: 'EDITOR_LEVEL_COMPLETE', payload: { - position: context.position, + levelId: context.position.levelId, }, }) }, @@ -153,7 +154,7 @@ export default (editorSend: any) => ({ editorSend({ type: 'EDITOR_TUTORIAL_COMPLETE', payload: { - position: context.position, + tutorialId: context.tutorial?.id, }, }) }, diff --git a/web-app/src/services/state/machine.ts b/web-app/src/services/state/machine.ts index 2b3e679d..43e9077e 100644 --- a/web-app/src/services/state/machine.ts +++ b/web-app/src/services/state/machine.ts @@ -181,7 +181,7 @@ export const createMachine = (options: any) => { on: { TEST_PASS: { target: 'StepNext', - actions: ['testPass', 'updateStepPosition'], + actions: ['onStepComplete', 'testPass', 'updateStepPosition'], }, TEST_FAIL: { target: 'Normal', @@ -198,7 +198,7 @@ export const createMachine = (options: any) => { on: { LOAD_NEXT_STEP: { target: 'Normal', - actions: ['onStepComplete', 'loadStep', 'updateStepPosition'], + actions: ['loadStep', 'updateStepPosition'], }, LEVEL_COMPLETE: { target: 'LevelComplete',