Skip to content

Instantly share code, notes, and snippets.

@chnirt
Last active April 3, 2020 09:12
Show Gist options
  • Save chnirt/64651472e49b1da99097c82fa9d95794 to your computer and use it in GitHub Desktop.
Save chnirt/64651472e49b1da99097c82fa9d95794 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 taskMachine = Machine({
id: 'taskMachine',
initial: 'IDLE',
context: {
initial: 'IDLE',
task: null,
permissions: ["TASK_CREATE", "TASK_NEED_APPROVE", "TASK_APPROVE", "TASK_PULL", "TASK_REQUEST_REVIEW", "TASK_NEED_REVIEW_COMPLETE"]
},
states: {
IDLE: {
on: {
CREATE_TASK: {
target: 'DRAFT',
cond: "TASK_CREATE"
// actions: assign({
// initial: (context, event) => context.initial = 'DRAFT'
// })
},
}
},
DRAFT: {
on: {
REQUEST_APPROVE: {
target: 'NEED_APPROVE',
cond: "TASK_NEED_APPROVE"
},
DELETE_TASK: {
target: "IDLE",
cond: "TASK_DELETE"
}
}
},
NEED_APPROVE: {
on: {
APPROVE: {
target: "OFFICIAL",
cond: "TASK_APPROVE"
},
DISAPPROVE: {
target: "DRAFT",
cond: "TASK_DISAPPROVE"
},
CANCEL_NEED_APPROVE: {
target: "DRAFT",
cond: "TASK_NEED_APPROVE_CANCEL"
}
}
},
OFFICIAL: {
on: {
PULL_TASK: {
target: "RUNNING",
cond: "TASK_PULL"
},
CANCEL_TASK: {
target: "NEED_APPROVE",
cond: "TASK_CANCEL"
}
}
},
RUNNING: {
on: {
REQUEST_REVIEW: {
target: "NEED_REVIEW",
cond: "TASK_REQUEST_REVIEW"
},
RETURN_TASK: {
target: "OFFICIAL",
cond: "TASK_RETURN"
}
}
},
NEED_REVIEW: {
on: {
COMPLETE: {
target: "COMPLETED",
cond: "TASK_NEED_REVIEW_COMPLETE"
},
FAIL: {
target: "FAILED",
cond: "TASK_NEED_REVIEW_FAIL"
},
CANCEL_NEED_REVIEW: {
target: "RUNNING",
cond: "TASK_NEED_REVIEW_CANCEL"
}
}
},
COMPLETED: {
type: "final"
},
FAILED: {
type: "final"
},
}
}, {
guards: {
TASK_CREATE: (context) => {
return context.permissions.includes("TASK_CREATE")
},
TASK_DELETE: (context) => {
return context.permissions.includes("TASK_DELETE")
},
TASK_NEED_APPROVE: (context) => {
return context.permissions.includes("TASK_NEED_APPROVE")
},
TASK_APPROVE: (context) => {
return context.permissions.includes("TASK_APPROVE")
},
TASK_DISAPPROVE: (context) => {
return context.permissions.includes("TASK_DISAPPROVE")
},
TASK_NEED_APPROVE_CANCEL: (context) => {
return context.permissions.includes("TASK_NEED_APPROVE_CANCEL")
},
TASK_PULL: (context) => {
return context.permissions.includes("TASK_PULL")
},
TASK_CANCEL: (context) => {
return context.permissions.includes("TASK_CANCEL")
},
TASK_REQUEST_REVIEW: (context) => {
return context.permissions.includes("TASK_REQUEST_REVIEW")
},
TASK_RETURN: (context) => {
return context.permissions.includes("TASK_RETURN")
},
TASK_NEED_REVIEW_COMPLETE: (context) => {
return context.permissions.includes("TASK_NEED_REVIEW_COMPLETE")
},
TASK_NEED_REVIEW_FAIL: (context) => {
return context.permissions.includes("TASK_NEED_REVIEW_FAIL")
},
TASK_NEED_REVIEW_CANCEL: (context) => {
return context.permissions.includes("TASK_NEED_REVIEW_CANCEL")
},
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment