Skip to content

Instantly share code, notes, and snippets.

@wmcbain
Last active March 5, 2020 17:02
Show Gist options
  • Save wmcbain/37b3b02c10906ab4a8789d6a75591ddf to your computer and use it in GitHub Desktop.
Save wmcbain/37b3b02c10906ab4a8789d6a75591ddf 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 authSteps = {
authIsLoading: 'authIsLoading',
isLoggedIn: 'isLoggedIn',
isNotLoggedIn: 'isNotLoggedIn',
waitForUserChoice: 'waitForUserChoice',
forkInRoad: 'forkInRoad',
registerPhoneNumber: 'registerPhoneNumber',
submitPhoneNumber: 'submitPhoneNumber',
waitForDeeplink: 'waitForDeeplink',
registerUser: 'registerUser',
registrationComplete: 'registrationComplete',
};
const authEvents = {
loggedIn: 'LOGGED_IN',
notLoggedIn: 'NOT_LOGGED_IN',
register: 'REGISTER',
registerPhoneNumber: 'REGISTER_PHONE_NUMBER',
phoneNumberSubmitted: 'PHONE_NUMBER_SUBMITTED',
deeplinkCaptured: 'DEEPLINK_CAPTURED',
userRegistered: 'USER_REGISTERED',
userAuthenticated: 'USER_AUTHENTICATED',
cancel: 'CANCEL',
};
const authMachine = Machine({
id: 'auth_machine',
initial: 'authIsLoading',
context: {
alleToken: null,
registrationFields: {
firstName: '',
lastName: '',
emailAddress: '',
password: '',
},
},
states: {
// HomeScreen.tsx
authIsLoading: {
on: {
LOGGED_IN: 'isLoggedIn',
NOT_LOGGED_IN: 'isNotLoggedIn',
},
},
// HomeScreen.tsx
isLoggedIn: {
entry: 'redirectToAccount',
type: 'final',
},
isNotLoggedIn: {
initial: 'waitForUserChoice',
onDone: 'waitForDeeplink',
states: {
// HomeScreen.tsx
waitForUserChoice: {
on: {
REGISTER: 'forkInRoad',
DEEPLINK_CAPTURED: 'phoneDeeplinkOverride',
},
},
// ForkInRoadScreen.tsx
forkInRoad: {
entry: 'redirectToForkInRoad',
on: {
REGISTER_PHONE_NUMBER: 'registerPhoneNumber',
CANCEL: 'waitForUserChoice',
},
},
// RegisterPhoneScreen.tsx
registerPhoneNumber: {
entry: 'redirectToRegisterPhoneNumber',
on: {
PHONE_NUMBER_SUBMITTED: 'submitPhoneNumber',
CANCEL: 'waitForUserChoice',
},
},
phoneDeeplinkOverride: {
type: 'final',
},
// HomeScreen.tsx
submitPhoneNumber: {
entry: 'phoneNumberSubmitted',
type: 'final',
},
},
},
// HomeScreen.tsx
waitForDeeplink: {
on: {
DEEPLINK_CAPTURED: 'registerUser',
},
},
// RegisterUserScreen.tsx
registerUser: {
on: {
USER_REGISTERED: 'registrationComplete',
CANCEL: 'waitForDeeplink',
},
},
registrationComplete: {
entry: 'authenticateUser',
on: {
USER_AUTHENTICATED: 'isLoggedIn',
},
},
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment