Skip to content

Instantly share code, notes, and snippets.

@sylvanaar
Last active January 9, 2021 01:36
Show Gist options
  • Save sylvanaar/7c82db0c6601b7a5b06c1d71abf91f9b to your computer and use it in GitHub Desktop.
Save sylvanaar/7c82db0c6601b7a5b06c1d71abf91f9b 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)
// Token Datapoint
const token = {
initial: "unloaded",
states: {
unloaded: {
on: {
FETCH: "fetching",
},
},
fetching: {
invoke: {
id: "refreshToken",
src: "refreshToken",
onError: [
{ target: "loaded", cond: "loaded" },
{ target: "unloaded", cond: "notloaded" },
],
onDone: { target: "loaded", actions: ["setToken"] },
},
},
loaded: {
on: {
EXPIRED: { target: "fetching", cond: "online" },
},
},
},
};
const auth = {
initial: "start",
states: {
start: {
on: {
LOGIN: "loggedIn",
LOGOUT: "loggedOut",
},
},
loggedIn: {
// activities: ["countdown"],
on: {
LOGOUT: "loggedOut",
EXPIRED: { actions: send({type: "FETCH", to: "datapoints.token" }) },
},
},
loggedOut: {
// entry: "clearData",
on: {
LOGIN: { actions: send({type: "FETCH", to: "datapoints.token" }) }
},
},
},
};
const network = {
initial: "start",
states: {
start: {
on: {
ONLINE: "online",
OFFLINE: "offline",
},
},
offline: {
entry: { actions: send({ type: "OFFLINE", to: "datapoints"})},
on: {
ONLINE: "online",
},
},
online: {
on: {
OFFLINE: "offline",
},
},
},
};
const machine = Machine(
{
id: "datapoints",
type: "parallel",
context: {
token: null,
promise: null,
expiresAt: 0,
},
states: {
auth,
network,
token,
},
},
{},
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment