Created
November 9, 2021 22:00
-
-
Save joaom182/74e58d5e3e9beb94c22cef422b89f900 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
This file contains 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 fetchMachine = Machine({ | |
id: 'services-and-provision', | |
initial: 'init', | |
states: { | |
init: { | |
always: [ | |
{ | |
target: 'select-entities', | |
cond: 'lastEventIsNext' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignLastEntity'], | |
cond: 'lastEntityNeedsAnswerQuestions' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignLastEntity'], | |
cond: 'lastEntityNeedsProvideDocuments' | |
}, | |
{ | |
target: 'select-services', | |
actions: ['assignLastEntity'], | |
cond: 'lastEntityIsApplyingForServices' | |
} | |
] | |
}, | |
'select-entities': { | |
on: { | |
NEXT: [ | |
{ | |
target: 'select-services', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityIsApplyingForServices' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityNeedsProvideDocuments' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityNeedsAnswerQuestions' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignNextEntityThatNeedsProvideDocuments'], | |
cond: 'hasSomeNextEntityToProvideDocument' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignNextEntityThatNeedsAnswerQuestions'], | |
cond: 'hasSomeNextEntityToAnswerQuestions' | |
}, | |
{ | |
target: 'success' | |
} | |
] | |
} | |
}, | |
'select-services': { | |
entry: ['assignCurrentEntityFromQueryString', 'clearCurrentEntityCards'], | |
on: { | |
NEXT: [ | |
{ | |
target: 'provide-documents', | |
cond: 'currentEntityNeedsProvideDocuments' | |
}, | |
{ | |
target: 'answer-questions', | |
cond: 'currentEntityNeedsAnswerQuestions' | |
}, | |
{ | |
target: 'select-services', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityIsApplyingForServices' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityNeedsProvideDocuments' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityNeedsAnswerQuestions' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignNextEntityThatNeedsProvideDocuments'], | |
cond: 'hasSomeNextEntityToProvideDocument' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignNextEntityThatNeedsAnswerQuestions'], | |
cond: 'hasSomeNextEntityToAnswerQuestions' | |
}, | |
{ | |
target: 'success' | |
} | |
], | |
BACK: [ | |
{ | |
target: 'answer-questions', | |
actions: ['assignPreviousEntity'], | |
cond: 'previousEntityNeedsAnswerQuestions' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignPreviousEntity'], | |
cond: 'previousEntityNeedsProvideDocuments' | |
}, | |
{ | |
target: 'select-services', | |
actions: ['assignPreviousEntity'], | |
cond: 'previousEntityIsApplyingForServices' | |
}, | |
{ | |
target: 'select-entities', | |
actions: ['clearCurrentEntity'] | |
} | |
] | |
} | |
}, | |
'provide-documents': { | |
entry: ['assignCurrentEntityFromQueryString', 'clearCurrentEntityCards'], | |
on: { | |
NEXT: [ | |
{ | |
target: 'answer-questions', | |
cond: 'currentEntityNeedsAnswerQuestions' | |
}, | |
{ | |
target: 'select-services', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityIsApplyingForServices' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityNeedsProvideDocuments' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityNeedsAnswerQuestions' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignNextEntityThatNeedsProvideDocuments'], | |
cond: 'hasSomeNextEntityToProvideDocument' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignNextEntityThatNeedsAnswerQuestions'], | |
cond: 'hasSomeNextEntityToAnswerQuestions' | |
}, | |
{ | |
target: 'success' | |
} | |
], | |
BACK: [ | |
{ | |
target: 'select-services', | |
cond: 'currentEntityIsApplyingForServices' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignPreviousEntity'], | |
cond: 'previousEntityNeedsAnswerQuestions' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignPreviousEntity'], | |
cond: 'previousEntityNeedsProvideDocuments' | |
}, | |
{ | |
target: 'select-services', | |
actions: ['assignPreviousEntity'], | |
cond: 'previousEntityIsApplyingForServices' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignPreviousEntityThatNeedsAnswerQuestions'], | |
cond: 'hasSomePreviousEntityToAnswerQuestions' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignPreviousEntityThatNeedsProvideDocuments'], | |
cond: 'hasSomePreviousEntityToProvideDocument' | |
}, | |
{ | |
target: 'select-entities', | |
actions: ['clearCurrentEntity'] | |
} | |
] | |
} | |
}, | |
'answer-questions': { | |
entry: ['assignCurrentEntityFromQueryString', 'clearCurrentEntityCards'], | |
on: { | |
NEXT: [ | |
{ | |
target: 'success', | |
cond: 'currentEntityIsTheLastEntity' | |
}, | |
{ | |
target: 'select-services', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityIsApplyingForServices' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityNeedsProvideDocuments' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignNextEntity'], | |
cond: 'nextEntityNeedsAnswerQuestions' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignNextEntityThatNeedsProvideDocuments'], | |
cond: 'hasSomeNextEntityToProvideDocument' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assingNextEntityThatNeedsAnswerQuestions'], | |
cond: 'hasSomeNextEntityToAnswerQuestions' | |
}, | |
{ | |
target: 'success' | |
} | |
], | |
BACK: [ | |
{ | |
target: 'provide-documents', | |
cond: 'currentEntityNeedsProvideDocuments' | |
}, | |
{ | |
target: 'select-services', | |
cond: 'currentEntityIsApplyingForServices' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignPreviousEntity'], | |
cond: 'previousEntityNeedsAnswerQuestions' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignPreviousEntity'], | |
cond: 'previousEntityNeedsProvideDocuments' | |
}, | |
{ | |
target: 'answer-questions', | |
actions: ['assignPreviousEntityThatNeedsAnswerQuestions'], | |
cond: 'hasSomePreviousEntityToAnswerQuestions' | |
}, | |
{ | |
target: 'provide-documents', | |
actions: ['assignPreviousEntityThatNeedsProvideDocuments'], | |
cond: 'hasSomePreviousEntityToProvideDocument' | |
}, | |
{ | |
target: 'select-entities', | |
actions: ['clearCurrentEntity'] | |
} | |
] | |
} | |
}, | |
success: { | |
type: 'final' | |
} | |
} | |
}); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment