Skip to content

WIP - Split state machines #83

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 11 commits into from
Prev Previous commit
Next Next commit
simplify machine launch file
  • Loading branch information
ShMcK committed Jan 26, 2020
commit a73d0fbad20a1dfbacbb865d427c8a2e37d38f1c
48 changes: 41 additions & 7 deletions web-app/src/services/state/machine.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,65 @@
import * as CR from 'typings'
import * as G from 'typings/graphql'
import { Machine } from 'xstate'
import { authenticateMachine } from './authenticate'
import { selectTutorialMachine } from './selectTutorial'
import { playTutorialMachine } from './playTutorial'

export const machine = Machine<CR.MachineContext, CR.MachineStateSchema, CR.MachineEvent>({
export type MachineEvent = {
type: 'NONE'
}

export type MachineContext = {
env: CR.Environment
error: CR.ErrorMessage | null
tutorial: G.Tutorial | null
}

export type MachineStateSchema = {
states: {
Initializing: {}
Start: {}
PlayTutorial: {}
}
}

export const machine = Machine<MachineContext, MachineStateSchema, MachineEvent>({
id: 'root',
initial: 'SelectTutorial',
initial: 'Initializing',
context: {
error: null,
env: { machineId: '', sessionId: '', token: '' },
tutorial: null,
},
states: {
// load environment
// authenticate with environment
Initializing: {
invoke: {
src: authenticateMachine,
onDone: 'Start',
data: {
env: (context: MachineContext) => context.env,
error: null,
},
},
},

// start/continue a tutorial
// select tutorial
// view tutorial summary
SelectTutorial: {
Start: {
invoke: {
src: selectTutorialMachine,
onDone: 'PlayTutorial',
data: {
env: (context: CR.MachineContext) => context.env,
tutorial: (context: CR.MachineContext) => context.tutorial,
env: (context: MachineContext) => context.env,
tutorial: (context: MachineContext) => context.tutorial,
error: null,
},
},
},

// initialize a selected tutorial
// progress through tutorial level/steps
// complete tutorial
Expand All @@ -34,8 +68,8 @@ export const machine = Machine<CR.MachineContext, CR.MachineStateSchema, CR.Mach
src: playTutorialMachine,
onDone: 'SelectTutorial',
data: {
context: (context: CR.MachineContext) => context.env,
tutorial: (context: CR.MachineContext) => context.tutorial,
context: (context: MachineContext) => context.env,
tutorial: (context: MachineContext) => context.tutorial,
error: null,
},
},
Expand Down