Skip to content

Instantly share code, notes, and snippets.

@nullmastermind
Last active June 30, 2021 10:53
Show Gist options
  • Save nullmastermind/237f819f0f16248fca765e3ced5c865e to your computer and use it in GitHub Desktop.
Save nullmastermind/237f819f0f16248fca765e3ced5c865e 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 noToken = ({token}) => !token;
const hasToken = ({token}) => !!token;
const fetchMachine = Machine({
id: 'user',
initial: 'initial',
context: {
token: null,
},
states: {
initial: {
on: {
FETCH: {
target: 'fetch_loading',
cond: hasToken
},
LOGIN: {
target: 'login_loading',
},
FORGOT: {
target: 'forgot_loading',
},
REGISTER: {
target: 'register_loading',
},
}
},
register_loading: {
on: {
RESOLVE: 'initial',
REJECT: 'register_failure'
}
},
register_failure: {
on: {
RETRY: {
target: 'register_loading',
}
}
},
register_success: {
on: {
LOGOUT: {
target: "initial",
actions: assign({
token: (context) => context.token = null
})
}
}
},
fetch_loading: {
on: {
RESOLVE: 'success',
REJECT: 'fetch_failure'
}
},
fetch_failure: {
on: {
RETRY: {
target: 'fetch_loading',
},
LOGOUT: {
target: 'initial',
actions: assign({
token: (context) => context.token = null
})
}
}
},
forgot_loading: {
on: {
RESOLVE: 'initial',
REJECT: 'forgot_failure'
}
},
forgot_failure: {
on: {
RETRY: {
target: 'forgot_loading',
}
}
},
login_loading: {
on: {
RESOLVE: {
target: 'initial',
actions: assign({
token: (context) => context.token = 'something'
})
},
REJECT: 'login_failure'
}
},
login_failure: {
on: {
RETRY: {
target: 'login_loading'
}
}
},
success: {
on: {
LOGOUT: {
target: 'initial',
actions: assign({
token: (context) => context.token = null
})
}
}
},
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment