Skip to content

Instantly share code, notes, and snippets.

@peterfarrell
Last active May 28, 2021 22:49
Show Gist options
  • Save peterfarrell/aa7e534e257201bd182588a88b88096f to your computer and use it in GitHub Desktop.
Save peterfarrell/aa7e534e257201bd182588a88b88096f 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: 'fetch',
initial: 'idle',
context: {
item: undefined,
retries: 0
},
states: {
idle: {
on: {
FETCH: 'loading',
},
after: {
1000: { target: 'loading' }
}
},
loading: {
on: {
RESOLVE: 'item',
REJECT: 'failure'
}
},
item: {
on: {
FETCH: 'loading'
}
},
failure: {
on: {
RETRY: {
target: 'loading',
actions: assign({
retries: (context, event) => context.retries + 1
})
}
}
}
}
});
const orderMachine = Machine({
id: 'order',
context: {
item: undefined
},
initial: 'loading',
states: {
loading: {
invoke: {
id: 'fetch',
src: fetchMachine,
onDone: {
target: 'nuu',
actions: assign({ item: (context, event) => event.data })
},
}
},
nuu: {
on: {
MAKE_PENDING: 'pending',
},
},
pending: {
on: {
ACCEPT: 'accepted',
CANCEL: 'canceled',
HOLD: 'held',
}
},
accepted: {
on: {
UNPEND: 'pending',
PROCESS: 'in_process',
CANCEL: 'canceled',
HOLD: 'held',
}
},
in_process: {
on: {
COMPLETE: 'completed',
CANCEL: 'canceled',
HOLD: 'held',
}
},
completed: {
on: {
DELIVER: 'delivered',
PICKUP: 'delivered',
CANCEL: 'canceled',
HOLD: 'held',
}
},
held: {
on: {
UNHOLD: 'completed'
}
},
delivered: {
type: 'final'
},
canceled: {
type: 'final'
},
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment