Last active
March 1, 2022 17:56
-
-
Save andieromero/dfa1b8104b9a46f20600524f97767bcf to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Available variables: | |
| // - Machine | |
| // - interpret | |
| // - assign | |
| // - send | |
| // - sendParent | |
| // - spawn | |
| // - raise | |
| // - actions | |
| // - XState (all XState exports) | |
| const investorOnboardingMachine = Machine( | |
| { | |
| id: 'onboarding', | |
| // schema: { | |
| // context: {} as InvestorOnboardingState, | |
| // events: {} as InvestorOnboardingEvents, | |
| // actions: {} as InvestorOnboardingActions, | |
| // services: {} as any, | |
| // }, | |
| // Initialize context | |
| // context: { | |
| // events: [], | |
| // steps: { | |
| // [Flow.ACCREDITATION]: ACCREDITATION_STEPS, | |
| // [Flow.INVESTMENT]: ACCREDITATION_STEPS, | |
| // }, | |
| // flow: Flow.ACCREDITATION, | |
| // }, | |
| initial: 'idle', | |
| states: { | |
| idle: { | |
| on: { | |
| BROWSE: { | |
| target: 'browsing', | |
| }, | |
| CAPTURE_INTEREST: { | |
| target: 'intro_accreditation', | |
| actions: ['onCaptureInterest'], | |
| // invoke: 'getCurrentStep', | |
| }, | |
| }, | |
| exit: ['saveToSessionStorage'], | |
| }, | |
| browsing: { | |
| on: { | |
| CAPTURE_INTEREST: { | |
| target: 'intro_accreditation', | |
| actions: ['saveToSessionStorage'], | |
| }, | |
| }, | |
| }, | |
| intro_accreditation: { | |
| on: { | |
| SUBMIT_INTRO_ACCREDITATION: { | |
| target: 'identification', | |
| actions: ['saveToSessionStorage'], | |
| }, | |
| }, | |
| }, | |
| identification: { | |
| on: { | |
| SUBMIT_IDENTIFICATION: [ | |
| { | |
| target: 'accreditation', | |
| // cond: () => { | |
| // // check condition | |
| // return true; | |
| // }, | |
| }, | |
| { | |
| target: 'passport_submitted', | |
| // cond: () => { | |
| // // check condition | |
| // }, | |
| }, | |
| ], | |
| }, | |
| }, | |
| accreditation: { | |
| on: { | |
| SET_ACCREDITATION_INDIVIDUAL: { | |
| target: 'accreditation_individual', | |
| // cond: () => { | |
| // }, | |
| }, | |
| SET_ACCREDITATION_FIRM_OR_FUND: { | |
| target: 'accreditation_firm_or_fund', | |
| // cond: () => { | |
| // }, | |
| }, | |
| SET_ACCREDITATION_TRUST: { | |
| target: 'accreditation_trust', | |
| // cond: () => { | |
| // }, | |
| }, | |
| }, | |
| }, | |
| accreditation_individual: { | |
| on: { | |
| SUBMIT_ACCREDITATION_INDIVIDUAL: { | |
| target: 'verification_individual', | |
| }, | |
| PASSPORT_SUBMITTED: { | |
| target: 'passport_submitted', | |
| }, | |
| }, | |
| }, | |
| accreditation_firm_or_fund: { | |
| on: { | |
| SUBMIT_ACCREDITATION_FIRM_OR_FUND: { | |
| target: 'verification_firm_or_fund', | |
| }, | |
| PASSPORT_SUBMITTED: { | |
| target: 'passport_submitted', | |
| }, | |
| }, | |
| }, | |
| accreditation_trust: { | |
| on: { | |
| SUBMIT_ACCREDITATION_TRUST: { | |
| target: 'verification_trust', | |
| }, | |
| PASSPORT_SUBMITTED: { | |
| target: 'passport_submitted', | |
| }, | |
| }, | |
| }, | |
| verification_individual: { | |
| on: { | |
| SUBMIT_VERIFICATION_INDIVIDUAL: { | |
| target: 'passport_submitted', | |
| }, | |
| }, | |
| }, | |
| verification_firm_or_fund: { | |
| on: { | |
| SUBMIT_VERIFICATION_FIRM_OR_FUND: { | |
| target: 'beneficial_ownership', | |
| // cond: () => {} | |
| }, | |
| }, | |
| }, | |
| verification_trust: { | |
| on: { | |
| SUBMIT_VERIFICATION_TRUST: { | |
| target: 'passport_submitted', | |
| }, | |
| }, | |
| }, | |
| beneficial_ownership: { | |
| on: { | |
| SUBMIT_BENEFICIAL_OWNERSHIP: { | |
| target: 'authorized_signatories', | |
| }, | |
| }, | |
| }, | |
| authorized_signatories: { | |
| on: { | |
| SUBMIT_AUTHORIZED_SIGNATORIES: { | |
| target: 'passport_submitted', | |
| }, | |
| }, | |
| }, | |
| passport_submitted: { | |
| on: { | |
| SUBMIT_PASSPORT_SUBMITTED: [ | |
| { | |
| target: 'tearsheet', | |
| // cond: () => {}, | |
| }, | |
| // { | |
| // target: 'SUBSCRIBE_FLOW', | |
| // // cond: () => {}, | |
| // }, | |
| // { | |
| // target: 'CREATE_PROVENANCE_WALLET', | |
| // type: 'final', | |
| // // cond: () => {} | |
| // }, | |
| ], | |
| }, | |
| }, | |
| tearsheet: { | |
| on: { | |
| TEARSHEET_INVEST: { | |
| target: 'commitment_amount', | |
| }, | |
| }, | |
| }, | |
| // INVESTMENT FLOW | |
| commitment_amount: { | |
| on: { | |
| SUBMIT_COMMITMENT: { | |
| target: 'eligibility_questions', | |
| // cond: () => { | |
| // // this is dynamic? | |
| // } | |
| }, | |
| }, | |
| }, | |
| eligibility_questions: { | |
| on: { | |
| SUBMIT_ELIGIBILITY_QUESTIONS: { | |
| target: 'closing_docs', | |
| // cond: () => { | |
| // // this is dynamic? | |
| // } | |
| }, | |
| }, | |
| }, | |
| closing_docs: { | |
| on: { | |
| SUBMIT_CLOSING_DOCS: { | |
| target: 'tax_forms', | |
| // cond: () => { | |
| // // this is dynamic? | |
| // } | |
| }, | |
| }, | |
| }, | |
| tax_forms: { | |
| on: { | |
| SUBMIT_TAX_FORMS: { | |
| target: 'security_questions_and_2fa', | |
| // cond: () => { | |
| // // this is dynamic? | |
| // } | |
| }, | |
| }, | |
| }, | |
| security_questions_and_2fa: { | |
| on: { | |
| SECURITY_QUESTIONS_AND_2FA_SUBMIT: { | |
| target: 'funding', | |
| // cond: () => { | |
| // // this is dynamic? | |
| // } | |
| }, | |
| }, | |
| }, | |
| funding: { | |
| on: { | |
| ADDED_FUNDS: { | |
| target: 'funds_added', | |
| }, | |
| }, | |
| }, | |
| funds_added: { | |
| type: 'final', | |
| }, | |
| }, | |
| }, | |
| { | |
| actions: { | |
| onCaptureInterest: assign({ | |
| flow: (context) => Flow.ACCREDITATION, | |
| }), | |
| // TODO fix event | |
| saveToSessionStorage: assign({ | |
| steps: (context, event) => { | |
| console.log('sending event', event); | |
| // Typing in the assign function doesn't work. | |
| const { completesSteps } = Events[event.type]; | |
| console.log(completesSteps); | |
| if (completesSteps) { | |
| completesSteps.forEach((step) => { | |
| console.log('completing for ', step, event); | |
| }); | |
| // useSessionStorage(INVESTOR_ONBOARDING_SESSION_STORAGE_KEY, JSON.stringify(context)); | |
| // const storeStep = { | |
| // isCompleted: true, | |
| // isCurrentStep: true, | |
| // // stepType: (Events[Object.keys(event)[0]] as InvestorOnboardingEvent).stepType, | |
| // } as Step; | |
| return { ...context.steps }; | |
| } | |
| return { ...context.steps }; | |
| }, | |
| }), | |
| }, | |
| // services: { | |
| // getCurrentStep: (context, event) => { | |
| // console.log('get current step service... ', context, event); | |
| // }, | |
| // }, | |
| } | |
| ); | |
| // const fetchMachine = Machine({ | |
| // id: 'fetch', | |
| // initial: 'idle', | |
| // context: { | |
| // retries: 0 | |
| // }, | |
| // actions: { | |
| // }, | |
| // states: { | |
| // idle: { | |
| // on: { | |
| // BROWSE: { | |
| // target: 'browsing', | |
| // }, | |
| // CAPTURE_INTEREST: { | |
| // target: 'intro_accreditation', | |
| // actions: assign({ | |
| // steps: (context) => { | |
| // console.log(context) | |
| // return context; | |
| // }, | |
| // }), | |
| // }, | |
| // }, | |
| // }, | |
| // browsing: { | |
| // on: { | |
| // CAPTURE_INTEREST: { | |
| // target: 'intro_accreditation', | |
| // }, | |
| // }, | |
| // }, | |
| // intro_accreditation: { | |
| // on: { | |
| // SUBMIT_INTRO_ACCREDITATION: 'identification', | |
| // }, | |
| // }, | |
| // identification: { | |
| // on: { | |
| // SUBMIT_IDENTIFICATION: [ | |
| // { | |
| // target: 'accreditation', | |
| // // cond: () => { | |
| // // // check condition | |
| // // return true; | |
| // // }, | |
| // }, | |
| // { | |
| // target: 'passport_submitted', | |
| // // cond: () => { | |
| // // // check condition | |
| // // }, | |
| // }, | |
| // ], | |
| // }, | |
| // }, | |
| // accreditation: { | |
| // on: { | |
| // SET_ACCREDITATION_INDIVIDUAL: { | |
| // target: 'accreditation_individual', | |
| // // cond: () => { | |
| // // }, | |
| // }, | |
| // SET_ACCREDITATION_FIRM_OR_FUND: { | |
| // target: 'accreditation_firm_or_fund', | |
| // // cond: () => { | |
| // // }, | |
| // }, | |
| // SET_ACCREDITATION_TRUST: { | |
| // target: 'accreditation_trust', | |
| // // cond: () => { | |
| // // }, | |
| // }, | |
| // }, | |
| // }, | |
| // accreditation_individual: { | |
| // on: { | |
| // SUBMIT_ACCREDITATION_INDIVIDUAL: { | |
| // target: 'verification_individual', | |
| // }, | |
| // PASSPORT_SUBMITTED: { | |
| // target: 'passport_submitted', | |
| // }, | |
| // }, | |
| // }, | |
| // accreditation_firm_or_fund: { | |
| // on: { | |
| // SUBMIT_ACCREDITATION_FIRM_OR_FUND: { | |
| // target: 'verification_firm_or_fund', | |
| // }, | |
| // PASSPORT_SUBMITTED: { | |
| // target: 'passport_submitted', | |
| // }, | |
| // }, | |
| // }, | |
| // accreditation_trust: { | |
| // on: { | |
| // SUBMIT_ACCREDITATION_TRUST: { | |
| // target: 'verification_trust', | |
| // }, | |
| // PASSPORT_SUBMITTED: { | |
| // target: 'passport_submitted', | |
| // }, | |
| // }, | |
| // }, | |
| // verification_individual: { | |
| // on: { | |
| // SUBMIT_VERIFICATION_INDIVIDUAL: { | |
| // target: 'passport_submitted', | |
| // }, | |
| // }, | |
| // }, | |
| // verification_firm_or_fund: { | |
| // on: { | |
| // SUBMIT_VERIFICATION_FIRM_OR_FUND: { | |
| // target: 'beneficial_ownership', | |
| // // cond: () => {} | |
| // }, | |
| // }, | |
| // }, | |
| // verification_trust: { | |
| // on: { | |
| // SUBMIT_VERIFICATION_TRUST: { | |
| // target: 'passport_submitted', | |
| // }, | |
| // }, | |
| // }, | |
| // beneficial_ownership: { | |
| // on: { | |
| // SUBMIT_BENEFICIAL_OWNERSHIP: { | |
| // target: 'authorized_signatories', | |
| // }, | |
| // }, | |
| // }, | |
| // authorized_signatories: { | |
| // on: { | |
| // SUBMIT_AUTHORIZED_SIGNATORIES: { | |
| // target: 'passport_submitted', | |
| // }, | |
| // }, | |
| // }, | |
| // passport_submitted: { | |
| // on: { | |
| // SUBMIT_PASSPORT_SUBMITTED: [ | |
| // { | |
| // target: 'tearsheet', | |
| // // cond: () => {}, | |
| // }, | |
| // // { | |
| // // target: 'SUBSCRIBE_FLOW', | |
| // // // cond: () => {}, | |
| // // }, | |
| // // { | |
| // // target: 'CREATE_PROVENANCE_WALLET', | |
| // // type: 'final', | |
| // // // cond: () => {} | |
| // // }, | |
| // ], | |
| // }, | |
| // }, | |
| // tearsheet: { | |
| // on: { | |
| // TEARSHEET_INVEST: { | |
| // target: 'commitment_amount', | |
| // }, | |
| // }, | |
| // }, | |
| // // INVESTMENT FLOW | |
| // commitment_amount: { | |
| // on: { | |
| // SUBMIT_COMMITMENT: { | |
| // target: 'eligibility_questions', | |
| // // cond: () => { | |
| // // // this is dynamic? | |
| // // } | |
| // }, | |
| // }, | |
| // }, | |
| // eligibility_questions: { | |
| // on: { | |
| // SUBMIT_ELIGIBILITY_QUESTIONS: { | |
| // target: 'closing_docs', | |
| // // cond: () => { | |
| // // // this is dynamic? | |
| // // } | |
| // }, | |
| // }, | |
| // }, | |
| // closing_docs: { | |
| // on: { | |
| // SUBMIT_CLOSING_DOCS: { | |
| // target: 'tax_forms', | |
| // // cond: () => { | |
| // // // this is dynamic? | |
| // // } | |
| // }, | |
| // }, | |
| // }, | |
| // tax_forms: { | |
| // on: { | |
| // SUBMIT_TAX_FORMS: { | |
| // target: 'security_questions_and_2fa', | |
| // // cond: () => { | |
| // // // this is dynamic? | |
| // // } | |
| // }, | |
| // }, | |
| // }, | |
| // security_questions_and_2fa: { | |
| // on: { | |
| // SECURITY_QUESTIONS_AND_2FA_SUBMIT: { | |
| // target: 'funding', | |
| // // cond: () => { | |
| // // // this is dynamic? | |
| // // } | |
| // }, | |
| // }, | |
| // }, | |
| // funding: { | |
| // on: { | |
| // ADDED_FUNDS: { | |
| // target: 'funds_added', | |
| // }, | |
| // }, | |
| // }, | |
| // funds_added: { | |
| // type: 'final', | |
| // }, | |
| // }, | |
| // }); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment