Skip to content

Instantly share code, notes, and snippets.

@shedali
Created November 4, 2020 16:19
Show Gist options
  • Save shedali/0eab4f773895484e0ad728f993889069 to your computer and use it in GitHub Desktop.
Save shedali/0eab4f773895484e0ad728f993889069 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
const fetchMachine = Machine({
id: 'INITIAL',
initial: 'INITIAL',
context:{
sufficientNotional: false,
sufficientMarginal: false,
instrumentCount: 0,
editingInstrument: false,
sufficientFunds: false
},
states: {
BASKET_ERROR:{},
EMPTY:{
on:{
ADD_INSTRUMENT: [
{
target: "BASKET_READY",
cond: 'canPlaceOrder'
},
{
target: "BASKET_UNREADY",
cond: 'canNotPlaceOrder'
}
]
}
},
BASKET_READY:{
on: {
PLACE_ORDER: "BASKET_PENDING"
}
},
BASKET_PENDING:{
on: {
EXECUTION_SUCCESS: "BASKET_EXECUTED",
EXECUTION_ERROR: "BASKET_ERROR"
}
},
BASKET_EXECUTED:{},
BASKET_UNREADY: {
on: {
ADD_FUNDS:[{
actions: 'add_funds',
target: "BASKET_READY",
cond: 'sufficientFunds'
}, {
action: 'add_funds',
target: "BASKET_UNREADY",
cond: 'insufficientFunds'
}],
ADD_INSTRUMENT: [
{
target: "BASKET_READY",
cond: 'canPlaceOrder'
},
{
target: "BASKET_UNREADY",
cond: 'canNotPlaceOrder'
}
]
}
},
INITIAL:{
on: {
CREATE_BASKET: "EMPTY"
}
}
}
}, {
guards: {
hasSufficientNotional: (context) => context.hasSufficientNotional === true,
hasSufficientMarginal: (context) => context.hasSufficientMarginal === true,
canPlaceOrder: context=>context.hasSufficientMarginal && context.hasSufficientNotional,
canNotPlaceOrder: context=>!context.hasSufficientMarginal || !context.hasSufficientNotional,
hasEmptyBasket: context=>context.hasEmptyBasket,
isEditingInstrument: context=>context.isEditingInstrument
},
actions:{
edit_instrument: (context, event)=>{
return context.isEditingInstrument=true
},
add_funds: (context, event)=>{
return context.sufficientFunds = true;
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment