Skip to content

Instantly share code, notes, and snippets.

@aceslick911
Last active June 28, 2021 17:36
Show Gist options
  • Save aceslick911/2a02c459dc0e76c9692dbebdeeab1fbe to your computer and use it in GitHub Desktop.
Save aceslick911/2a02c459dc0e76c9692dbebdeeab1fbe 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: 'newForm',
context: {
retries: 0,
fromAccount: null,
toAccount: null,
transferAmount: null,
hasFrom: false,
hasTo: false,
hasAmount: false,
},
states: {
newForm: {
on: {
REQUEST_FROM_INFO:{ target:'collect_transfer_details',
actions:'collect_transfer_details'
}
},
},
collect_transfer_details: {
on: {
initial: 'collect_transfer_details.incomplete_form',
},
states: {
incomplete_form: {
on: {
SET_FROM: {
target: 'incomplete_form.NEED_INFO',
actions: assign({
fromDetails: (context, event) => {
context.fromAccount = event.sender;
context.hasFrom = true;
}
}),
},
SET_TO: {
target: 'incomplete_form.NEED_INFO',
actions: assign({
toDetails: (context, event) => {
context.toAccount = event.reciever;
context.hasTo = true;
}
}),
},
SET_AMOUNT: {
target: 'incomplete_form.NEED_INFO',
actions: assign({
amountDetails: (context, event) => {
context.transferAmount = event.transferAmount;
context.hasAmount = true;
}
}),
},
SEND_TRANSFER: {
target: '..success',
}
},
states:{
NEED_INFO:{
target: 'incomplete_form',
actions: ['collect_transfer_details.incomplete_form.SET_TO','collect_transfer_details.incomplete_form.SET_AMOUNT','collect_transfer_details.incomplete_form.SEND_TRANSFER'],
},
}
}
}
}
},
success: {
type: 'final'
},
failure: {
on: {
RETRY: {
target: 'newForm',
actions: assign({
retries: (context, event) => context.retries + 1
})
}
}
}
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment