Skip to content

Instantly share code, notes, and snippets.

@bultas
Last active May 28, 2020 22:05
Show Gist options
  • Save bultas/09ba55bb517c15328ff2be04c639a365 to your computer and use it in GitHub Desktop.
Save bultas/09ba55bb517c15328ff2be04c639a365 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
const persooMachine = Machine({
id: "persoo",
initial: "initialize",
states: {
initialize: {
type: "parallel",
states: {
waitForPersooJS: {
initial: "fetching",
states: {
fetching: {
invoke: {
src: "check-if-persoo",
onDone: {
target: "success",
},
onError: {
actions: "log-general-error",
target: "failure",
},
},
},
success: {
type: "final",
},
failure: {
type: "final",
},
},
},
checkingAuth: {
initial: "fetching",
states: {
fetching: {
invoke: {
src: "check-if-auth",
onDone: {
actions: ["assign-is-auth"],
target: "success",
},
onError: {
actions: "log-general-error",
target: "failure",
},
},
},
success: {
type: "final",
},
failure: {
type: "final",
},
},
},
},
onDone: {
target: "initialized",
actions: ["initialized"],
},
},
initialized: {
initial: "switch",
states: {
switch: {
on: {
"": [{ target: "auth", cond: "isAuth" }, { target: "not-auth" }],
},
},
"not-auth": {
on: {
"highlight-locations": [
{
actions: [
"switch-highlight-locations-state",
"turn-off-highlight",
"highlight-changed",
],
cond: "is-highlight-on",
},
{
actions: [
"switch-highlight-locations-state",
"turn-on-highlight-no-auth",
"highlight-changed",
],
},
],
"offers-in-locations.updated": {
actions: "offersInLocationsUpdated",
},
},
},
auth: {
initial: "idle",
states: {
idle: {
on: {
"offers-in-locations.updated": {
target: "update-offers-data",
},
"highlight-locations": {
target: "highlight",
},
"fetch-abtests-data": [
{
actions: "abtests-fetched",
cond: "ifAbTestsAndProfileFetched",
},
{
target: "fetching-data-for-ab-tests",
},
],
"switch-abtest-variant": {
actions: "switch-abtest-variant",
},
},
},
highlight: {
initial: "init",
states: {
init: {
on: {
"": [
{
target: "turn-off",
cond: "is-highlight-on",
},
{
target: "turn-on",
cond: "areOffersFetched",
},
{
target: "fetching",
},
],
},
},
fetching: {
invoke: {
src: "fetchOffersData",
onDone: {
actions: ["assign-offers"],
target: "init",
},
onError: {
actions: ["log-general-error"],
target: "failed",
},
},
},
"turn-on": {
entry: [
"switch-highlight-locations-state",
"turn-on-highlight",
"highlight-changed",
],
on: {
"": {
target: "success",
},
},
},
"turn-off": {
entry: [
"switch-highlight-locations-state",
"turn-off-highlight",
"highlight-changed",
],
on: {
"": {
target: "success",
},
},
},
success: {
type: "final",
},
failed: {
type: "final",
},
},
onDone: {
target: "idle",
},
},
"update-offers-data": {
invoke: {
src: "fetchOffersData",
onDone: {
actions: ["assign-offers", "offersInLocationsUpdated"],
target: "idle",
},
onError: {
actions: ["log-general-error", "offersInLocationsUpdated"],
target: "idle",
},
},
},
"fetching-data-for-ab-tests": {
type: "parallel",
states: {
"fetching-abtests-data": {
initial: "fetching",
states: {
fetching: {
invoke: {
src: "fetch-abtests-service",
onDone: {
actions: ["assign-abtest"],
target: "success",
},
onError: {
actions: ["abtests-failed", "log-general-error"],
target: "error",
},
},
},
success: {
type: "final",
},
error: {
type: "final",
},
},
},
"fetch-user-profile": {
initial: "fetching",
states: {
fetching: {
invoke: {
src: "fetch-user-profile-service",
onDone: {
actions: ["assign-is-user-profile-fetched"],
target: "success",
},
onError: {
actions: "log-general-error",
target: "error",
},
},
},
success: {
type: "final",
},
error: {
type: "final",
},
},
},
},
onDone: [
{
target: "idle",
actions: ["abtests-fetched"],
cond: "ifAbTestsAndProfileFetched",
},
{
target: "idle",
},
],
},
},
},
},
on: {
"change-env": "env-changing",
"show-admin-bar": {
actions: "show-admin-bar",
},
"show-log": {
actions: "show-log",
},
"show-exceptions": {
actions: "show-exceptions",
},
"exception-log.updated": {
actions: "exceptionsUpdated",
},
},
},
"env-changing": {
invoke: {
src: "change-env-service",
onDone: {
actions: "env-changed",
target: "initialized",
},
onError: {
actions: "log-general-error",
target: "initialized",
},
},
},
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment