Skip to content

Instantly share code, notes, and snippets.

@keithernet
Created August 6, 2021 14:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save keithernet/e5278ad0226ef61da764dfac7ca606f0 to your computer and use it in GitHub Desktop.
Save keithernet/e5278ad0226ef61da764dfac7ca606f0 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 fetchMachine = Machine({
id: 'cascadingSelectControls',
context: {},
initial: 'awaitingFirstSelection',
states: {
awaitingFirstSelection: {
on: {
FIRST_SELECTED: {
target: 'firstSelected',
actions: 'assignFirstSelection',
},
},
},
firstSelected: {
initial: 'loadingSecondOptions',
exit: ['clearSecond'],
on: {
FIRST_SELECTED: {
actions: 'assignFirstSelection',
target: '.loadingSecondOptions',
internal: false
},
},
states: {
loadingSecondOptions: {
invoke: {
src: 'fetchSecondOptions',
},
on: {
SECOND_OPTIONS_LOADED: {
actions: 'assignSecondOptions',
target: 'awaitingSecondSelection',
},
},
},
awaitingSecondSelection: {
on: {
SECOND_SELECTED: {
actions: 'assignSecondSelection',
target: 'secondSelected',
},
},
},
secondSelected: {
initial: 'loadingThirdOptions',
on: {
SECOND_SELECTED: {
actions: 'assignSecondSelection',
target: '.loadingThirdOptions',
internal: false },
},
exit: ['clearThird'],
states: {
loadingThirdOptions: {
invoke: {
src: 'fetchThirdOptions',
},
on: {
THIRD_OPTIONS_LOADED: {
actions: 'assignThirdOptions',
target: 'awaitingThirdSelection',
},
},
},
awaitingThirdSelection: {
on: {
THIRD_SELECTED: {
target: 'thirdSelected',
actions: 'assignThirdSelection',
},
},
},
thirdSelected: {},
},
},
},
},
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment