Skip to content

Instantly share code, notes, and snippets.

@mcspud
Created September 26, 2019 01:28
Show Gist options
  • Save mcspud/7858b81d76103b37f800a983329b560b to your computer and use it in GitHub Desktop.
Save mcspud/7858b81d76103b37f800a983329b560b 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: 'update_email',
initial: 'load_contact_data',
context: {
contactData: {},
emailData: {},
challengeData: {},
verificationData: {},
emailOTPVerificationData: {},
newEmail: '',
},
states: {
load_contact_data: {
invoke: {
src: 'load_contact_details_machine',
onDone: {
target: 'load_email_data',
actions: [
'assignContactData'
]
},
onError: {
target: 'load_data_error'
}
}
},
load_email_data: {
invoke: {
src: 'load_email_details_machine',
onDone: {
target: 'view_email',
actions: [
'assignEmailData'
]
},
onError: {
target: 'load_data_error',
}
}
},
load_data_error: {
on: {
TRY_AGAIN: {
target: 'load_contact_data'
},
EXIT_FLOW: {
target: 'exit_flow_on_error'
}
}
},
view_email: {
on: {
NEXT: {
target: 'determine_challenge',
}
}
},
determine_challenge: {
invoke: {
src: 'determine_challenge_type',
onDone: {
target: 'display_challenge',
actions: ['assignChallengeData'],
},
onError: {
target: 'determine_challenge_error',
}
}
},
determine_challenge_error: {
on: {
TRY_AGAIN: {
target: 'determine_challenge',
},
EXIT_FLOW: {
target: 'exit_flow_on_error'
}
}
},
exit_flow_on_error: {
type: 'final'
},
display_challenge: {
on: {
NEXT: { target: 'request_verification_code' },
BACK: { target: 'view_email' },
}
},
request_verification_code: {
invoke: {
src: 'getChallengeData',
onDone: {
target: 'enter_verification_code',
actions: ['assignVerificationData']
},
onError: {
target: 'verification_code_error'
}
}
},
enter_verification_code: {
on: {
BACK: {
target: 'view_email'
},
DATA_CHANGED: {
actions: 'assignVerificationToken',
},
SEND_VERIFICATION_CODE: {
target: 'validate_verification_code'
}
},
},
validate_verification_code: {
invoke: {
src: 'completeChallenge',
onDone: {
target: 'enter_new_email',
actions: ['assignVerificationData']
},
onError: {
target: 'verification_code_error'
}
}
},
verification_code_error: {
on: {
TRY_AGAIN: { target: 'enter_verification_code' }
}
},
enter_new_email: {
on: {
BACK: { target: 'view_email' },
SUBMIT: { target: 'display_new_email_otp_challenge' },
DATA_CHANGED: { actions: ['assignNewEmailData'] }
}
},
display_new_email_otp_challenge: {
on: {
BACK: { target: 'enter_new_email', },
SUBMIT: { target: 'request_email_otp', }
},
},
request_email_otp: {
invoke: {
src: 'sendEmailOTP',
onDone: {
target: 'enter_email_otp',
actions: [
'assignEmailOTPVerificationData'
] ,
},
onError: {
target: 'request_email_otp_error'
},
}
},
request_email_otp_error: {
},
enter_email_otp: {
on: {
BACK: {
target: 'display_new_email_otp_challenge'
},
DATA_CHANGED: {
actions: 'assignEmailOTP'
},
SEND_VERIFICATION_CODE: {
target: 'validate_email_otp'
}
},
},
validate_email_otp: {
invoke: {
src: 'verifyEmailOTP',
onDone: {
target: 'update_email_complete',
},
onError: {
target: 'validate_email_otp_error'
},
}
},
update_email_complete: {
type: 'final',
invoke: {
src: 'returnToHomepage'
}
},
validate_email_otp_error: {
on: {
TRY_AGAIN: { target: 'enter_email_otp' }
}
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment