Skip to content

Instantly share code, notes, and snippets.

@Bogidon
Last active July 9, 2021 21:03
Show Gist options
  • Save Bogidon/61411fb055db80cc52eb50234e72f16e to your computer and use it in GitHub Desktop.
Save Bogidon/61411fb055db80cc52eb50234e72f16e to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
const TRANSITIONS = {
BACK: 'BACK',
CONTINUE: 'CONTINUE',
};
const STATES = {
INITIALIZE: 'INITIALIZE',
VEHICLE: 'VEHICLE',
ADDITIONAL_VEHICLES: 'ADDITIONAL_VEHICLES',
PERSONAL_DETAILS_INTERSTITIAL: 'ENTER_PERSONAL_DETAILS_INTERSTITIAL',
NAME: 'NAME',
ADDRESS: 'ADDRESS',
EMAIL: 'EMAIL',
BIRTHDATE: 'BIRTHDATE',
GENDER_IDENTITY: 'GENDER_IDENTITY',
VALID_DRIVERS_LICENSE: 'VALID_DRIVERS_LICENSE',
TICKETS_AND_ACCIDENTS: 'TICKETS_AND_ACCIDENTS',
DUI: 'DUI',
SR_22: 'SR_22',
ADDITIONAL_DRIVERS: 'ADDITIONAL_DRIVERS',
INSURANCE_VERIFICATION: 'INSURANCE_VERIFICATION',
INSURANCE_INFORMATION: 'INSURANCE_INFORMATION',
MARITAL_STATUS: 'MARITAL_STATUS',
HOME_OWNERSHIP: 'HOME_OWNERSHIP',
MILITARY_SERVICE: 'MILITARY_SERVICE',
LOADING_OFFERS: 'LOADING_OFFERS',
};
const GUARDS = {
ZERO_TICKETS_OR_ACCIDENTS: 'ZERO_TICKETS_OR_ACCIDENTS',
CURRENTLY_INSURED: 'CURRENTLY_INSURED',
};
const INPUTS = {
VEHICLE: 'VEHICLE',
ADDITION_VEHICLES: 'ADDITIONAL_VEHICLES',
FIRST_NAME: 'FIRST_NAME',
LAST_NAME: 'LAST_NAME',
ADDRESS: 'ADDRESS',
EMAIL: 'EMAIL',
BIRTHDAY: 'BIRTHDAY',
GENDER: 'GENDER',
VALID_DRIVERS_LICENSE: 'VALID_DRIVERS_LICENSE',
TICKETS_AND_ACCIDENTS: 'TICKETS_AND_ACCIDENTS',
DUI: 'DUI',
SR_22: 'SR_22',
MULTIPLE_DRIVERS: 'MULTIPLE_DRIVERS',
CURRENTLY_INSURED: 'CURRENTLY_INSURED',
CURRENT_INSURER: 'CURRENT_INSURER',
MARRIED: 'MARRIED',
HOME_OWNER: 'HOME_OWNER',
MILITARY_MEMBER: 'MILITARY_MEMBER',
};
const fetchMachine = Machine({
id: 'AutoInsurancePrefillFlow',
initial: STATES.VEHICLE,
context: {
retries: 0
},
states: {
// Vehicle
[STATES.VEHICLE]: {
on: {
[TRANSITIONS.CONTINUE]: STATES.ADDITIONAL_VEHICLES,
},
},
[STATES.ADDITIONAL_VEHICLES]: {
on: {
[TRANSITIONS.BACK]: STATES.VEHICLE,
[TRANSITIONS.CONTINUE]: STATES.PERSONAL_DETAILS_INTERSTITIAL,
},
},
// Driver information
[STATES.PERSONAL_DETAILS_INTERSTITIAL]: {
on: {
[TRANSITIONS.BACK]: STATES.ADDITIONAL_VEHICLES,
[TRANSITIONS.CONTINUE]: STATES.NAME,
},
},
[STATES.NAME]: {
on: {
[TRANSITIONS.BACK]: STATES.PERSONAL_DETAILS_INTERSTITIAL,
[TRANSITIONS.CONTINUE]: STATES.ADDRESS,
},
},
[STATES.ADDRESS]: {
on: {
[TRANSITIONS.BACK]: STATES.NAME,
[TRANSITIONS.CONTINUE]: STATES.EMAIL,
},
},
[STATES.EMAIL]: {
on: {
[TRANSITIONS.BACK]: STATES.ADDRESS,
[TRANSITIONS.CONTINUE]: STATES.BIRTHDATE,
},
},
[STATES.BIRTHDATE]: {
on: {
[TRANSITIONS.BACK]: STATES.EMAIL,
[TRANSITIONS.CONTINUE]: STATES.GENDER_IDENTITY,
},
},
[STATES.GENDER_IDENTITY]: {
on: {
[TRANSITIONS.BACK]: STATES.BIRTHDATE,
[TRANSITIONS.CONTINUE]: STATES.VALID_DRIVERS_LICENSE,
},
},
[STATES.VALID_DRIVERS_LICENSE]: {
on: {
[TRANSITIONS.BACK]: STATES.GENDER_IDENTITY,
[TRANSITIONS.CONTINUE]: STATES.TICKETS_AND_ACCIDENTS,
},
},
[STATES.TICKETS_AND_ACCIDENTS]: {
on: {
[TRANSITIONS.BACK]: STATES.VALID_DRIVERS_LICENSE,
[TRANSITIONS.CONTINUE]: [
{
target: STATES.ADDITIONAL_DRIVERS,
cond: GUARDS.ZERO_TICKETS_OR_ACCIDENTS,
},
{
target: STATES.DUI,
},
],
},
},
[STATES.DUI]: {
on: {
[TRANSITIONS.BACK]: STATES.TICKETS_AND_ACCIDENTS,
[TRANSITIONS.CONTINUE]: STATES.SR_22,
},
},
[STATES.SR_22]: {
on: {
[TRANSITIONS.BACK]: STATES.DUI,
[TRANSITIONS.CONTINUE]: STATES.ADDITIONAL_DRIVERS,
},
},
[STATES.ADDITIONAL_DRIVERS]: {
on: {
[TRANSITIONS.BACK]: [
{
target: STATES.TICKETS_AND_ACCIDENTS,
cond: GUARDS.ZERO_TICKETS_OR_ACCIDENTS,
},
{
target: STATES.SR_22,
},
],
[TRANSITIONS.CONTINUE]: STATES.INSURANCE_VERIFICATION,
},
},
// Current insurance
[STATES.INSURANCE_VERIFICATION]: {
on: {
[TRANSITIONS.BACK]: STATES.ADDITIONAL_DRIVERS,
[TRANSITIONS.CONTINUE]: [
{
target: STATES.INSURANCE_INFORMATION,
cond: GUARDS.CURRENTLY_INSURED,
},
{
target: STATES.MARITAL_STATUS,
},
],
},
},
[STATES.INSURANCE_INFORMATION]: {
on: {
[TRANSITIONS.BACK]: STATES.INSURANCE_VERIFICATION,
[TRANSITIONS.CONTINUE]: STATES.MARITAL_STATUS,
},
},
// Discounts
[STATES.MARITAL_STATUS]: {
on: {
[TRANSITIONS.BACK]: [
{
target: STATES.INSURANCE_INFORMATION,
cond: GUARDS.CURRENTLY_INSURED,
},
{
target: STATES.INSURANCE_VERIFICATION,
},
],
[TRANSITIONS.CONTINUE]: STATES.HOME_OWNERSHIP,
},
},
[STATES.HOME_OWNERSHIP]: {
on: {
[TRANSITIONS.BACK]: STATES.MARITAL_STATUS,
[TRANSITIONS.CONTINUE]: STATES.MILITARY_SERVICE,
},
},
[STATES.MILITARY_SERVICE]: {
on: {
[TRANSITIONS.BACK]: STATES.HOME_OWNERSHIP,
[TRANSITIONS.CONTINUE]: STATES.LOADING_OFFERS,
},
},
// Loading
[STATES.LOADING_OFFERS]: {
type: 'final',
},
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment