Skip to content

Instantly share code, notes, and snippets.

@signaes
Last active September 8, 2020 14:34
Show Gist options
  • Save signaes/64402adb59bdb39e88a0e9ab617578ee to your computer and use it in GitHub Desktop.
Save signaes/64402adb59bdb39e88a0e9ab617578ee to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
// - XState (all XState exports)
const defineProgramMachine = Machine({
id: 'defineProgram',
type: 'parallel',
context: {
workoutToBeRemoved: null,
weekToBeRemoved: null,
selectedEvent: null,
selectedWeek: null,
},
states: {
desktop: {
initial: 'idle',
states: {
deleted: {
type: 'final',
},
idle: {
on: {
DEFINE_WORKOUTS: 'define_workouts',
EDIT_EVENT: {
target: 'edit_event',
actions: ['setSelectedEvent'],
},
REMOVE_WORKOUT: {
target: 'confirm_workout_removal',
actions: ['setWorkoutToBeRemoved']
},
REMOVE_WEEK: {
target: 'confirm_week_removal',
actions: ['setWeekToBeRemoved']
},
DELETE_PROGRAM: 'confirm_program_deletion',
}
},
define_workouts: {
on: {
CANCEL: 'idle',
COMMIT: 'idle',
}
},
edit_event: {
on: {
EDIT_EVENT: {
target: 'edit_event',
actions: ['setSelectedEvent'],
},
DEFINE_WORKOUTS: 'define_workouts',
BACK: {
target: 'idle',
actions: ['unsetSelectedEvent'],
},
CONFIRM: 'confirm_day',
}
},
confirm_program_deletion: {
on: {
CANCEL: {
target: 'idle',
},
COMMIT: {
target: 'deleted',
},
}
},
confirm_day: {
on: {
CANCEL: {
target: 'idle',
actions: ['unsetSelectedEvent'],
},
COMMIT: {
target: 'idle',
actions: ['unsetSelectedEvent'],
},
}
},
confirm_workout_removal: {
on: {
CANCEL: {
target: 'idle',
actions: ['unsetWorkoutToBeRemoved'],
},
COMMIT: {
target: 'idle',
actions: ['unsetWorkoutToBeRemoved'],
}
}
},
confirm_week_removal: {
on: {
CANCEL: {
target: 'idle',
actions: ['unsetWeekToBeRemoved'],
},
COMMIT: {
target: 'idle',
actions: ['unsetWeekToBeRemoved'],
}
}
}
}
},
mobile: {
initial: 'idle',
states: {
deleted: {
type: 'final',
},
idle: {
on: {
DEFINE_WORKOUTS: 'define_workouts',
WEEKLY_VIEW: {
target: 'weekly_view',
actions: ['setSelectedWeek'],
},
EDIT_EVENT: {
target: 'weekly_view.edit_event',
actions: ['setSelectedEvent'],
},
REMOVE_WORKOUT: {
target: 'weekly_view.confirm_workout_removal',
actions: ['setWorkoutToBeRemoved']
},
REMOVE_WEEK: {
target: 'confirm_week_removal',
actions: ['setWeekToBeRemoved']
},
DELETE_PROGRAM: 'confirm_program_deletion',
}
},
confirm_week_removal: {
on: {
CANCEL: {
target: 'idle',
actions: ['unsetWeekToBeRemoved'],
},
COMMIT: {
target: 'idle',
actions: ['unsetWeekToBeRemoved'],
}
}
},
confirm_program_deletion: {
on: {
CANCEL: {
target: 'idle',
},
COMMIT: {
target: 'deleted',
},
}
},
define_workouts: {
on: {
CANCEL: 'idle',
COMMIT: 'idle',
}
},
weekly_view: {
initial: 'idle',
states: {
idle: {
on: {
BACK: {
target: '#defineProgram.mobile.idle',
actions: ['unsetSelectedWeek'],
},
DEFINE_WORKOUTS: 'define_workouts',
EDIT_EVENT: {
target: 'edit_event',
actions: ['setSelectedEvent'],
},
REMOVE_WORKOUT: {
target: 'confirm_workout_removal',
actions: ['setWorkoutToBeRemoved']
},
}
},
define_workouts: {
on: {
CANCEL: 'idle',
COMMIT: 'idle',
}
},
edit_event: {
on: {
BACK: {
target: 'idle',
actions: ['unsetSelectedEvent'],
},
CONFIRM: 'confirm_day',
}
},
confirm_day: {
on: {
CANCEL: {
target: 'idle',
actions: ['unsetSelectedEvent'],
},
COMMIT: {
target: 'idle',
actions: ['unsetSelectedEvent'],
},
}
},
confirm_workout_removal: {
on: {
CANCEL: {
target: 'idle',
actions: ['unsetWorkoutToBeRemoved'],
},
COMMIT: {
target: 'idle',
actions: ['unsetWorkoutToBeRemoved'],
}
}
}
}
}
}
}
}
},
{
actions: {
setSelectedEvent: assign({
selectedEvent: (_, { selectedEvent }) => selectedEvent,
}),
unsetSelectedEvent: assign({
selectedEvent: () => null,
}),
setSelectedWeek: assign({
selectedWeek: (_, { week }) => week,
}),
unsetSelectedWeek: assign({
selectedWeek: () => null,
}),
setWorkoutToBeRemoved: assign({
workoutToBeRemoved: (_, { workoutToBeRemoved }) => workoutToBeRemoved,
}),
unsetWorkoutToBeRemoved: assign({
workoutToBeRemoved: () => null,
}),
setWeekToBeRemoved: assign({
weekToBeRemoved: (_, { weekToBeRemoved }) => weekToBeRemoved,
}),
unsetWeekToBeRemoved: assign({
weekToBeRemoved: () => null,
}),
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment