Skip to content

Instantly share code, notes, and snippets.

@janek26
Created August 11, 2021 09:38
Show Gist options
  • Save janek26/5158cd1138aaab449b556375906456ac to your computer and use it in GitHub Desktop.
Save janek26/5158cd1138aaab449b556375906456ac to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
const sendMachineDefaultContext = {
amount: "",
contract: "0x0",
walletAddress: "",
transactionHash: null,
tokens: [],
zkSyncTokens: [],
zkSyncConfig: null,
}
const sendMaschine = Machine({
id: "send",
initial: "readyToPair",
context: sendMachineDefaultContext,
states: {
readyToPair: {
on: { START_PAIR: "pairing" },
},
pairing: {
invoke: {
id: "pairing",
src: async () => {
},
onDone: "fetchTokens",
onError: "readyToPair",
},
},
fetchTokens: {
invoke: {
id: "fetchTokens",
src: async () => {
},
onDone: {
target: "fetchBalancesAndAllowances",
actions: assign((_context, event) => {
const {
data: { zkSyncTokens, zkSyncConfig },
} = event
return { zkSyncTokens, zkSyncConfig }
}),
},
onError: "error",
},
},
fetchBalancesAndAllowances: {
invoke: {
id: "fetchBalancesAndAllowances",
src: async (context) => {
},
onDone: {
target: "approve",
actions: [
assign((_context, event) => {
const { data: tokens } = event
return { tokens }
}),
"checkApproveSkip",
],
},
onError: "error",
},
},
approve: {
on: {
SEND_APPROVE: "approving",
SKIP_APPROVE: "send",
APPROVE_STAY: "approve",
CHANGE_TOKENS: { target: "approve", actions: ["setContext"] },
CHANGE_CONTEXT: {
target: "approve",
actions: ["setContext", "checkApproveSkip"],
},
},
},
approving: {
entry: "resetTransactionHash",
invoke: {
id: "approving",
src: async (context) => {
},
onDone: {
target: "waitForTx",
},
onError: [
{
target: "approve",
},
{ target: "error" },
],
},
},
waitForTx: {
entry: "setTransactionHash",
invoke: {
id: "waitForTx",
src: async (_context, event) => {
},
onDone: [
{
target: "fetchBalancesAndAllowances",
},
{
target: "success",
},
],
},
},
send: {
on: {
SEND_TRANSACTION: "sending",
CHANGE_TOKENS: { target: "send", actions: ["setContext"] },
CHANGE_CONTEXT: {
target: "approve",
actions: ["setContext", "checkApproveSkip"],
},
},
},
sending: {
entry: "resetTransactionHash",
invoke: {
id: "sending",
src: async (context) => {
},
onDone: { target: "waitForTx" },
onError: [
{
target: "send",
},
{ target: "error" },
],
},
},
success: {},
error: {},
},
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment