Skip to content

Instantly share code, notes, and snippets.

@srikanthkyatham
Created February 12, 2020 15:51
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 srikanthkyatham/e9f66b70612001078ec769449f336c29 to your computer and use it in GitHub Desktop.
Save srikanthkyatham/e9f66b70612001078ec769449f336c29 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 transferMachine = Machine(
{
id: "transfer",
initial: "initial_state",
states: {
initial_state: {
on: {
"": [
{ target: "member_error", cond: "isMember" },
{
target: "single_account_error",
cond: "isSingleAccount"
},
{ target: "before_10th_error", cond: "isBefore10th" },
{ target: "owner_accounts", cond: "areOwnerAccounts" }
]
}
},
member_error: {},
single_account_error: {},
before_10th_error: {},
owner_accounts: {
on: {
FROM_SELECTED: [
{
target: "clerk_from_bank_account_selected",
cond: "isClerkBankSelected"
},
{
target: "non_clerk_from_bank_account_selected",
cond: "isNonClerkBankSelected"
}
]
}
},
clerk_from_bank_account_selected: {
entry: "disable_to_clerk_bank_accounts",
on: {
TO_SELECTED: "to_account_selected"
}
},
non_clerk_from_bank_account_selected: {
entry: "disable_to_non_clerk_bank_accounts",
on: {
TO_SELECTED: "to_account_selected"
}
},
to_account_selected: {
on: {
TRANSFER_SUCCESS: ".transfer_success",
TRANSFER_ERROR: ".transfer_error"
},
initial: "transfer_check",
states: {
transfer_check: {
on: {
DO_TRANSFER: [
{
target: "transfer_progress",
cond: "isOneOfBanksWhereClerkWorks"
}
]
}
},
transfer_success: {
entry: "go_to_main_page"
},
transfer_progress: {},
transfer_error: {}
}
}
}
},
{
guards: {
isMember: (context, event) => {
return false;
},
isSingleAccount: (context, event) => {
return false;
},
isBefore10th: (context, event) => {
return false;
},
areOwnerAccounts: (context, event) => {
// all accounts should have same name
return true;
},
isOneOfBanksWhereClerkWorks: (context, event) => {
return true;
},
isClerkBankSelected: (context, event) => {
return true;
},
isNotClerkBankSelected: (context, event) => {
return false;
}
},
actions: {
go_to_main_page: (context, event) => {
console.log("going to main page");
},
disable_to_clerk_bank_accounts: (context, event) => {
console.log("disable_to_clerk_bank_accounts");
},
disable_to_non_clerk_bank_accounts: (context, event) => {
console.log("disable_to_non_clerk_bank_accounts");
}
}
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment