Skip to content

Instantly share code, notes, and snippets.

@justinramel
Last active January 21, 2020 18:47
Show Gist options
  • Save justinramel/4e828d604a568265a1d5245fef9461e7 to your computer and use it in GitHub Desktop.
Save justinramel/4e828d604a568265a1d5245fef9461e7 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 fetchMachine = Machine(
{
id: 'login',
initial: 'getLocalTokens',
context: {
user: undefined,
sessionToken: undefined,
accessToken: undefined,
errorMessage: undefined
},
states: {
getLocalTokens: {
invoke: {
src: 'getLocalTokensService',
onDone: {
target: 'autoLogin',
actions: 'setContextFromLocalTokens'
},
onError: {
target: 'manualLogin'
}
}
},
autoLogin: {
on: {
'': [
{
target: 'complete',
cond: (ctx, _) => ctx.accessToken !== undefined
},
{
target: 'manualLogin',
cond: (ctx, _) => ctx.accessToken === undefined
}
]
}
},
manualLogin: {
entry: 'resetContext',
on: {
LOGIN: 'getSessionToken'
}
},
getSessionToken: {
invoke: {
src: 'getSessionTokenService',
onDone: {
target: 'getAccessToken',
actions: 'setSessionToken'
},
onError: {
target: 'error',
actions: 'setErrorMessage'
}
}
},
getAccessToken: {
invoke: {
src: 'getAccessTokenService',
onDone: {
target: 'complete',
actions: 'setAccessToken'
},
onError: {
target: 'error',
actions: 'setErrorMessage'
}
}
},
complete: {
entry: 'onComplete',
on: {
LOGOUT: { target: 'manualLogin', actions: 'onLogout' }
}
},
error: {
on: {
LOGIN: 'getSessionToken'
}
}
}
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment