Skip to content

Instantly share code, notes, and snippets.

@joegaudet
Last active May 10, 2022 18:44
Show Gist options
  • Save joegaudet/f441fbd5ff9b69f20c6597d1f65d10eb to your computer and use it in GitHub Desktop.
Save joegaudet/f441fbd5ff9b69f20c6597d1f65d10eb to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
const machine = Machine(
{
initial: 'intro',
context: {
title: '',
ctaTitle: '',
},
states: {
intro: {
on: {
CLOSE: 'closing',
CTA_CLICKED: 'configureDefault'
},
onEntry: assign({
title: 'New feature: driver tipping',
ctaTitle: 'Yes, setup my default tipping amounts',
})
},
configureDefault: {
on: {
CLOSE: 'closing',
CTA_CLICKED: 'saveAndApplyDefault'
},
onEntry: assign({
title: 'Set your default tip',
ctaTitle: 'Save my default tip',
})
},
saveAndApplyDefault: {
invoke: {
src: async ({modal}) => {
return Math.round(Math.random()) ? Promise.resolve(true) : Promise.reject(false);
},
onDone: {target: 'closing'},
onError: {target: 'error'}
},
onEntry: assign({title: 'Setting your default tip'}),
},
error: {
on: {
CLOSE: 'closing',
CTA_CLICKED: 'saveAndApplyDefault'
},
onEntry: assign({
title: 'Something went wrong',
ctaTitle: 'Retry',
})
},
closing: {
invoke: {
src: ({modal}) => Promise.resolve(true),
onDone: {target: 'closed'},
}
},
closed: {},
},
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment