Skip to content

Instantly share code, notes, and snippets.

@n8io
Created July 17, 2020 13:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save n8io/a20709703fec28327b73a7bbddc9555c to your computer and use it in GitHub Desktop.
Save n8io/a20709703fec28327b73a7bbddc9555c to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
const State = {
START: 'START',
EMAIL_INPUT_FOCUS: 'EMAIL_INPUT_FOCUS',
EMAIL_INPUT_INVALID: 'EMAIL_INPUT_INVALID',
EMAIL_INPUT_VALID: 'EMAIL_INPUT_VALID',
FORGOT_PASSWORD_LINK_FOCUS: 'FORGOT_PASSWORD_LINK_FOCUS',
FORGOT_PASSWORD_LINK_REDIRECT: 'FORGOT_PASSWORD_LINK_REDIRECT',
PASSWORD_INPUT_FOCUS: 'PASSWORD_INPUT_FOCUS',
PASSWORD_INPUT_INVALID: 'PASSWORD_INPUT_INVALID',
PASSWORD_INPUT_VALID: 'PASSWORD_INPUT_VALID',
LOG_IN_AWAITING_RESPONSE: 'LOG_IN_AWAITING_RESPONSE',
LOG_IN_BUTTON_FOCUS: 'LOG_IN_BUTTON_FOCUS',
LOG_IN_FAILURE: 'LOG_IN_FAILURE',
LOG_IN_SUCCESS_REDIRECT: 'LOG_IN_SUCCESS_REDIRECT',
SIGN_UP_LINK_FOCUS: 'SIGN_UP_LINK_FOCUS',
SIGN_UP_LINK_REDIRECT: 'SIGN_UP_LINK_REDIRECT',
};
const Event = {
EMAIL_INPUT_BLURRED: 'EMAIL_INPUT_BLURRED',
EMAIL_INPUT_FOCUSED: 'EMAIL_INPUT_FOCUSED',
EMAIL_INPUT_TABBED: 'EMAIL_INPUT_TABBED',
EMAIL_INPUT_TYPED_INVALID: 'EMAIL_INPUT_TYPED_INVALID',
EMAIL_INPUT_TYPED_VALID: 'EMAIL_INPUT_TYPED_VALID',
FORGOT_PASSWORD_LINK_BLURRED: 'FORGOT_PASSWORD_LINK_BLURRED',
FORGOT_PASSWORD_LINK_PRESSED: 'FORGOT_PASSWORD_LINK_PRESSED',
FORGOT_PASSWORD_LINK_FOCUSED: 'FORGOT_PASSWORD_LINK_FOCUSED',
FORGOT_PASSWORD_LINK_TABBED: 'FORGOT_PASSWORD_LINK_TABBED',
LOG_IN_RESPONSE_FAILED: 'LOG_IN_RESPONSE_FAILED',
LOG_IN_RESPONSE_SUCCESSFUL: 'LOG_IN_RESPONSE_SUCCESSFUL',
LOG_IN_SUBMITTED: 'LOG_IN_SUBMITTED',
LOG_IN_BUTTON_BLURRED: 'LOG_IN_BUTTON_BLURRED',
LOG_IN_BUTTON_PRESSED: 'LOG_IN_BUTTON_PRESSED',
LOG_IN_BUTTON_FOCUSED: 'LOG_IN_BUTTON_FOCUSED',
LOG_IN_BUTTON_TABBED: 'LOG_IN_BUTTON_TABBED',
PASSWORD_INPUT_BLURRED: 'PASSWORD_INPUT_BLURRED',
PASSWORD_INPUT_FOCUSED: 'PASSWORD_INPUT_FOCUSED',
PASSWORD_INPUT_TABBED: 'PASSWORD_INPUT_TABBED',
PASSWORD_INPUT_TYPED_INVALID: 'PASSWORD_INPUT_TYPED_INVALID',
PASSWORD_INPUT_TYPED_VALID: 'PASSWORD_INPUT_TYPED_VALID',
SIGN_UP_LINK_BLURRED: 'SIGN_UP_LINK_BLURRED',
SIGN_UP_LINK_PRESSED: 'SIGN_UP_LINK_PRESSED',
SIGN_UP_LINK_FOCUSED: 'SIGN_UP_LINK_FOCUSED',
SIGN_UP_LINK_TABBED: 'SIGN_UP_LINK_TABBED',
};
const fetchMachine = Machine({
initial: State.START,
context: { userExists: true },
states: {
[State.START]: {
on: {
[Event.EMAIL_INPUT_FOCUSED]: State.EMAIL_INPUT_FOCUS,
[Event.PASSWORD_INPUT_FOCUSED]: State.PASSWORD_INPUT_FOCUS,
[Event.LOG_IN_BUTTON_FOCUSED]: State.LOG_IN_BUTTON_FOCUS,
[Event.FORGOT_PASSWORD_LINK_FOCUSED]: State.FORGOT_PASSWORD_LINK_FOCUS,
[Event.SIGN_UP_LINK_FOCUSED]: State.SIGN_UP_LINK_FOCUS,
},
},
[State.EMAIL_INPUT_FOCUS]: {
on: {
[Event.EMAIL_INPUT_BLURRED]: State.START,
[Event.EMAIL_INPUT_TABBED]: State.PASSWORD_INPUT_FOCUS,
[Event.EMAIL_INPUT_TYPED_INVALID]: State.EMAIL_INPUT_INVALID,
[Event.EMAIL_INPUT_TYPED_VALID]: State.EMAIL_INPUT_VALID,
[Event.LOG_IN_SUBMITTED]: State.LOG_IN_AWAITING_RESPONSE,
[Event.PASSWORD_INPUT_FOCUSED]: State.PASSWORD_INPUT_FOCUS,
[Event.LOG_IN_BUTTON_FOCUSED]: State.LOG_IN_BUTTON_FOCUS,
[Event.FORGOT_PASSWORD_LINK_FOCUSED]: State.FORGOT_PASSWORD_LINK_FOCUS,
[Event.SIGN_UP_LINK_FOCUSED]: State.SIGN_UP_LINK_FOCUS,
},
},
[State.EMAIL_INPUT_INVALID]: {
on: {
[Event.EMAIL_INPUT_BLURRED]: State.START,
[Event.EMAIL_INPUT_TABBED]: State.PASSWORD_INPUT_FOCUS,
[Event.EMAIL_INPUT_TYPED_VALID]: State.EMAIL_INPUT_VALID,
[Event.PASSWORD_INPUT_FOCUSED]: State.PASSWORD_INPUT_FOCUS,
[Event.LOG_IN_BUTTON_FOCUSED]: State.LOG_IN_BUTTON_FOCUS,
[Event.FORGOT_PASSWORD_LINK_FOCUSED]: State.FORGOT_PASSWORD_LINK_FOCUS,
[Event.SIGN_UP_LINK_FOCUSED]: State.SIGN_UP_LINK_FOCUS,
},
},
[State.EMAIL_INPUT_VALID]: {
on: {
[Event.EMAIL_INPUT_BLURRED]: State.START,
[Event.EMAIL_INPUT_TABBED]: State.PASSWORD_INPUT_FOCUS,
[Event.LOG_IN_SUBMITTED]: State.LOG_IN_AWAITING_RESPONSE,
[Event.PASSWORD_INPUT_FOCUSED]: State.PASSWORD_INPUT_FOCUS,
[Event.LOG_IN_BUTTON_FOCUSED]: State.LOG_IN_BUTTON_FOCUS,
[Event.FORGOT_PASSWORD_LINK_FOCUSED]: State.FORGOT_PASSWORD_LINK_FOCUS,
[Event.SIGN_UP_LINK_FOCUSED]: State.SIGN_UP_LINK_FOCUS,
},
},
[State.PASSWORD_INPUT_FOCUS]: {
on: {
[Event.LOG_IN_SUBMITTED]: State.LOG_IN_AWAITING_RESPONSE,
[Event.PASSWORD_INPUT_BLURRED]: State.START,
[Event.PASSWORD_INPUT_TABBED]: State.LOG_IN_BUTTON_FOCUS,
[Event.PASSWORD_INPUT_TYPED_INVALID]: State.PASSWORD_INPUT_INVALID,
[Event.PASSWORD_INPUT_TYPED_VALID]: State.PASSWORD_INPUT_VALID,
[Event.EMAIL_INPUT_FOCUSED]: State.EMAIL_INPUT_FOCUS,
[Event.LOG_IN_BUTTON_FOCUSED]: State.LOG_IN_BUTTON_FOCUS,
[Event.FORGOT_PASSWORD_LINK_FOCUSED]: State.FORGOT_PASSWORD_LINK_FOCUS,
[Event.SIGN_UP_LINK_FOCUSED]: State.SIGN_UP_LINK_FOCUS,
},
},
[State.PASSWORD_INPUT_INVALID]: {
on: {
[Event.PASSWORD_INPUT_BLURRED]: State.START,
[Event.PASSWORD_INPUT_TABBED]: State.LOG_IN_BUTTON_FOCUS,
[Event.PASSWORD_INPUT_TYPED_VALID]: State.PASSWORD_INPUT_VALID,
[Event.EMAIL_INPUT_FOCUSED]: State.EMAIL_INPUT_FOCUS,
[Event.LOG_IN_BUTTON_FOCUSED]: State.LOG_IN_BUTTON_FOCUS,
[Event.FORGOT_PASSWORD_LINK_FOCUSED]: State.FORGOT_PASSWORD_LINK_FOCUS,
[Event.SIGN_UP_LINK_FOCUSED]: State.SIGN_UP_LINK_FOCUS,
},
},
[State.PASSWORD_INPUT_VALID]: {
on: {
[Event.PASSWORD_INPUT_BLURRED]: State.START,
[Event.PASSWORD_INPUT_TABBED]: State.LOG_IN_BUTTON_FOCUS,
[Event.LOG_IN_SUBMITTED]: State.LOG_IN_AWAITING_RESPONSE,
[Event.EMAIL_INPUT_FOCUSED]: State.EMAIL_INPUT_FOCUS,
[Event.LOG_IN_BUTTON_FOCUSED]: State.LOG_IN_BUTTON_FOCUS,
[Event.FORGOT_PASSWORD_LINK_FOCUSED]: State.FORGOT_PASSWORD_LINK_FOCUS,
[Event.SIGN_UP_LINK_FOCUSED]: State.SIGN_UP_LINK_FOCUS,
},
},
[State.LOG_IN_BUTTON_FOCUS]: {
on: {
[Event.LOG_IN_BUTTON_BLURRED]: State.START,
[Event.LOG_IN_BUTTON_TABBED]: State.SIGN_UP_LINK_FOCUS,
[Event.LOG_IN_BUTTON_PRESSED]: State.LOG_IN_AWAITING_RESPONSE,
[Event.LOG_IN_SUBMITTED]: State.LOG_IN_AWAITING_RESPONSE,
[Event.EMAIL_INPUT_FOCUSED]: State.EMAIL_INPUT_FOCUS,
[Event.PASSWORD_INPUT_FOCUSED]: State.PASSWORD_INPUT_FOCUS,
[Event.FORGOT_PASSWORD_LINK_FOCUSED]: State.FORGOT_PASSWORD_LINK_FOCUS,
[Event.SIGN_UP_LINK_FOCUSED]: State.SIGN_UP_LINK_FOCUS,
},
},
[State.LOG_IN_AWAITING_RESPONSE]: {
on: {
[Event.LOG_IN_RESPONSE_SUCCESSFUL]: State.LOG_IN_SUCCESS_REDIRECT,
[Event.LOG_IN_RESPONSE_FAILED]: State.LOG_IN_FAILURE,
[Event.EMAIL_INPUT_FOCUSED]: State.EMAIL_INPUT_FOCUS,
[Event.PASSWORD_INPUT_FOCUSED]: State.PASSWORD_INPUT_FOCUS,
[Event.FORGOT_PASSWORD_LINK_FOCUSED]: State.FORGOT_PASSWORD_LINK_FOCUS,
[Event.SIGN_UP_LINK_FOCUSED]: State.SIGN_UP_LINK_FOCUS,
},
},
[State.SIGN_UP_LINK_FOCUS]: {
on: {
[Event.SIGN_UP_LINK_BLURRED]: State.START,
[Event.SIGN_UP_LINK_TABBED]: State.FORGOT_PASSWORD_LINK_FOCUS,
[Event.SIGN_UP_LINK_PRESSED]: State.SIGN_UP_LINK_REDIRECT,
[Event.EMAIL_INPUT_FOCUSED]: State.EMAIL_INPUT_FOCUS,
[Event.PASSWORD_INPUT_FOCUSED]: State.PASSWORD_INPUT_FOCUS,
[Event.LOG_IN_BUTTON_FOCUSED]: State.LOG_IN_BUTTON_FOCUS,
[Event.FORGOT_PASSWORD_LINK_FOCUSED]: State.FORGOT_PASSWORD_LINK_FOCUS,
},
},
[State.FORGOT_PASSWORD_LINK_FOCUS]: {
on: {
[Event.FORGOT_PASSWORD_LINK_BLURRED]: State.START,
[Event.FORGOT_PASSWORD_LINK_PRESSED]:
State.FORGOT_PASSWORD_LINK_REDIRECT,
[Event.FORGOT_PASSWORD_LINK_TABBED]: State.EMAIL_INPUT_FOCUS,
[Event.EMAIL_INPUT_FOCUSED]: State.EMAIL_INPUT_FOCUS,
[Event.PASSWORD_INPUT_FOCUSED]: State.PASSWORD_INPUT_FOCUS,
[Event.LOG_IN_BUTTON_FOCUSED]: State.LOG_IN_BUTTON_FOCUS,
[Event.SIGN_UP_LINK_FOCUSED]: State.SIGN_UP_LINK_FOCUS,
},
},
[State.LOG_IN_FAILURE]: {
[Event.EMAIL_INPUT_FOCUSED]: State.EMAIL_INPUT_FOCUS,
[Event.PASSWORD_INPUT_FOCUSED]: State.PASSWORD_INPUT_FOCUS,
[Event.LOG_IN_BUTTON_FOCUSED]: State.LOG_IN_BUTTON_FOCUS,
[Event.FORGOT_PASSWORD_LINK_FOCUSED]: State.FORGOT_PASSWORD_LINK_FOCUS,
[Event.SIGN_UP_LINK_FOCUSED]: State.SIGN_UP_LINK_FOCUS,
},
[State.LOG_IN_SUCCESS_REDIRECT]: {},
[State.FORGOT_PASSWORD_LINK_REDIRECT]: {},
[State.SIGN_UP_LINK_REDIRECT]: {},
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment