Skip to content

Instantly share code, notes, and snippets.

@abinavseelan
Last active January 28, 2020 04:35
Show Gist options
  • Save abinavseelan/42d1f41743945c18232fcc6d0124ef0e to your computer and use it in GitHub Desktop.
Save abinavseelan/42d1f41743945c18232fcc6d0124ef0e to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
const hasAARequest = (context) => {
return context.AARequest;
}
const dropAARequest = assign({
AARequest: () => null,
});
const REQUEST_SUBMISSION = {
id: 'RequestSubmission',
initial: 'SUBMIT_BA_REQUEST_FOR_APPROVAL',
states: {
SUBMIT_BA_REQUEST_FOR_APPROVAL: {
on: {
'SUCCESS': [
{
target: 'SUBMIT_AA_REQUEST_FOR_APPROVAL',
cond: hasAARequest
},
{
target: '#Onboarding.REQUEST_DETAILS_PAGE',
}
],
}
},
SUBMIT_AA_REQUEST_FOR_APPROVAL: {
on: {
SUCCESS: '#Onboarding.REQUEST_DETAILS_PAGE'
}
}
}
}
const CHECKING_FOR_EXISTING_REQUESTS = {
id: 'ExistingRequests',
initial: 'FETCH_ALL_ACTIVE_BA_REQUESTS',
states: {
FETCH_ALL_ACTIVE_BA_REQUESTS: {
on: {
NOT_PRESENT: '#BAOnboarding.FILLS_BUSINESS_ACCOUNT_REQUEST_FORM',
PRESENT: {
target: 'FETCH_ALL_ACTIVE_AA_REQUEST',
actions: [
assign({
BARequest: () => ({id: '123'})
})
],
}
}
},
FETCH_ALL_ACTIVE_AA_REQUEST: {
on: {
LINKED_BA_REQUEST_MATCHES_ACTIVE_BA_REQUEST: {
target: '#BAOnboarding.FILLS_BUSINESS_ACCOUNT_REQUEST_FORM',
actions: [
assign({
AARequest: () => ({id: '123'})
})
],
},
LINKED_BA_REQUEST_DOES_NOT_MATCH_ACTIVE_BA_REQUEST: '#BAOnboarding.FILLS_BUSINESS_ACCOUNT_REQUEST_FORM'
}
}
},
}
const BUSINESS_ACCOUNT_ONBOARDING = {
id: 'BAOnboarding',
initial: 'FILLS_BUSINESS_ACCOUNT_REQUEST_FORM',
states: {
FILLS_BUSINESS_ACCOUNT_REQUEST_FORM: {
on: {
COMPLETES_BUSINESS_ACCOUNT_FORM: [{
target: '#Onboarding.SHOW_EXISTING_AD_ACCOUNT_REQUEST',
cond: hasAARequest,
actions: [
assign({
BARequest: () => ({ id: 123 })
})
]
},{
target: '#Onboarding.PROMPTED_FOR_AD_ACCOUNT_CREATION',
actions: [
assign({
BARequest: () => ({ id: 123 })
})
]
}],
SAVES_REQUEST_AS_DRAFT: 'DRAFT_SAVED',
}
},
DRAFT_SAVED: {
on: {
CONTINUES_FILLING_FORM: 'FILLS_BUSINESS_ACCOUNT_REQUEST_FORM',
EXITS_FLOW: '#Onboarding.END'
}
}
},
}
const AD_ACCOUNT_ONBOARDING = {
id: 'AAOnboarding',
initial: 'FILLS_AD_ACCOUNT_REQUEST_FORM',
states: {
FILLS_AD_ACCOUNT_REQUEST_FORM: {
on: {
COMPLETES_AD_ACCOUNT_FORM: {
target: '#Onboarding.REQUEST_SUBMISSION',
actions: [
assign({
AARequest: () => ({ id: 123 })
})
]
},
SAVES_REQUEST_AS_DRAFT: 'AA_DRAFT_SAVED_AND_LINKED_TO_BA_REQUEST',
}
},
AA_DRAFT_SAVED_AND_LINKED_TO_BA_REQUEST: {
on: {
CONTINUES_FILLING_FORM: 'FILLS_AD_ACCOUNT_REQUEST_FORM',
EXITS_FLOW: '#Onboarding.END'
}
}
},
}
ROOT = {
id: 'Onboarding',
initial: 'USER_LOGS_IN',
context: {
BARequest: null,
AARequest: null,
},
states: {
USER_LOGS_IN: {
on: {
ACCOUNTS_EXIST_FOR_USER: 'DASHBOARD',
NO_ACCOUNTS_FOR_USER: 'CHECKING_FOR_EXISTING_REQUESTS',
}
},
DASHBOARD: {
type: 'final'
},
CHECKING_FOR_EXISTING_REQUESTS: {
...CHECKING_FOR_EXISTING_REQUESTS
},
BUSINESS_ACCOUNT_ONBOARDING: {
...BUSINESS_ACCOUNT_ONBOARDING
},
PROMPTED_FOR_AD_ACCOUNT_CREATION: {
on: {
USER_ACCEPTS: 'AD_ACCOUNT_ONBOARDING',
USER_SKIPS: 'REQUEST_SUBMISSION',
}
},
SHOW_EXISTING_AD_ACCOUNT_REQUEST: {
on: {
USER_DISCARDS: {
target: 'REQUEST_SUBMISSION',
actions: [
assign({
AARequest: () => null
})
]
},
USER_CONTINUES: 'AD_ACCOUNT_ONBOARDING',
}
},
AD_ACCOUNT_ONBOARDING: {
...AD_ACCOUNT_ONBOARDING,
},
REQUEST_SUBMISSION: {
...REQUEST_SUBMISSION,
},
REQUEST_DETAILS_PAGE: {
type: 'final',
},
END: {
type: 'final',
},
},
guards: {
hasAARequest,
}
}
const onboardingMachine = Machine(ROOT);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment