Created
August 27, 2019 19:17
-
-
Save derek-duncan/4aff383017be9b08877a86b8289006ca 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 instinctMachine = Machine( | |
{ | |
id: 'instinct', | |
context: { | |
offline: false, | |
user: null, | |
practice: null, | |
visit: null, | |
}, | |
type: 'parallel', | |
states: { | |
view: { | |
initial: 'unauthenticated', | |
states: { | |
unauthenticated: { | |
onDone: 'authenticated', | |
initial: 'unknown', | |
states: { | |
unknown: { | |
on: { | |
'': [ | |
{cond: 'practiceLoggedOut', target: 'practice'}, | |
{cond: 'userLoggedOut', target: 'user'}, | |
{target: 'completed'}, | |
], | |
}, | |
}, | |
practice: { | |
entry: 'showPracticeForm', | |
invoke: { | |
id: 'practiceLogin', | |
src: 'practiceLogin', | |
onDone: {target: 'user', actions: 'assignPracticeInfo'}, | |
}, | |
}, | |
user: { | |
entry: 'showUserForm', | |
invoke: { | |
id: 'userLogin', | |
src: 'userLogin', | |
onDone: {target: 'completed', actions: 'assignUserInfo'}, | |
}, | |
}, | |
completed: { | |
type: 'done', | |
}, | |
}, | |
}, | |
authenticated: { | |
type: 'parallel', | |
states: { | |
screen: { | |
on: { | |
GOTO_VISIT: {target: '.visitScreen', actions: 'assignVisit'}, | |
GOTO_BACK: '.previousScreen', | |
}, | |
initial: 'unknownScreen', | |
states: { | |
unknownScreen: { | |
on: { | |
'': [ | |
{cond: 'hasRecentVisit', target: 'visitScreen'}, | |
{target: 'statusBoardScreen'}, | |
], | |
}, | |
}, | |
previousScreen: { | |
type: 'history', | |
history: 'deep', | |
}, | |
statusBoardScreen: {}, | |
visitScreen: { | |
type: 'parallel', | |
states: { | |
screen: { | |
on: { | |
GOTO_BACK: '.previousScreen', | |
GOTO_SHEET: '.sheetScreen', | |
GOTO_VITALS: '.vitalsScreen', | |
GOTO_INVOICE: '.invoiceScreen', | |
GOTO_TREATMENTS: '.treatmentsScreen', | |
}, | |
initial: 'sheetScreen', | |
states: { | |
previousScreen: { | |
type: 'history', | |
}, | |
sheetScreen: { | |
initial: 'loading', | |
states: { | |
loading: { | |
invoke: { | |
src: 'loadSheet', | |
onDone: { | |
target: 'loaded', | |
actions: 'spawnSheetOrders', | |
}, | |
}, | |
}, | |
loaded: { | |
on: { | |
EXPORT_SHEET_PDF: { | |
actions: 'sendExportSheetPdf', | |
}, | |
COPY_SHEET: {actions: 'copySheet'}, | |
NAVIGATE_SHEET: { | |
target: 'loading', | |
actions: 'setSheetTime', | |
}, | |
}, | |
}, | |
}, | |
}, | |
vitalsScreen: { | |
type: 'parallel', | |
states: { | |
current: { | |
initial: 'loading', | |
states: { | |
loading: { | |
invoke: { | |
src: 'loadVitals', | |
onDone: { | |
target: 'loaded', | |
actions: 'spawnVitalRows', | |
}, | |
}, | |
}, | |
loaded: { | |
on: { | |
COPY_VITALS: {actions: 'copyVitals'}, | |
}, | |
initial: 'fullList', | |
states: { | |
fullList: { | |
on: { | |
TOGGLE_ACTIVE: 'activeList', | |
}, | |
}, | |
activeList: { | |
on: { | |
TOGGLE_ACTIVE: 'fullList', | |
}, | |
}, | |
}, | |
}, | |
}, | |
}, | |
historical: {}, | |
}, | |
}, | |
invoiceScreen: {}, | |
treatmentsScreen: {}, | |
}, | |
}, | |
infoBar: {}, | |
updateVisit: { | |
initial: 'idle', | |
states: { | |
idle: { | |
on: { | |
SET_ASSIGN: 'saving', | |
SET_COMPLAINT: 'saving', | |
SET_CRITICAL: 'saving', | |
SET_NAME: 'saving', | |
SET_NOTES: 'saving', | |
SET_STATUS: 'saving', | |
SET_WEIGHT: 'saving', | |
}, | |
}, | |
saving: { | |
invoke: { | |
id: 'updateVisitSaving', | |
src: 'saveVisit', | |
onDone: 'idle', | |
}, | |
}, | |
}, | |
}, | |
}, | |
}, | |
patientAdminScreen: {}, | |
clientAdminScreen: {}, | |
productAdminScreen: {}, | |
groupAdminScreen: {}, | |
categoryAdminScreen: {}, | |
workflowAdminScreen: {}, | |
staffAdminScreen: {}, | |
alertAdminScreen: {}, | |
serviceAdminScreen: {}, | |
wardAdminScreen: {}, | |
codeStatusAdminScreen: {}, | |
}, | |
}, | |
patientSearch: { | |
invoke: { | |
src: 'patientSearchForm', | |
}, | |
}, | |
checkInVisit: {}, | |
pdfDownload: {}, | |
mainNav: {}, | |
logout: { | |
onDone: '#instinct.view.unauthenticated', | |
initial: 'idle', | |
states: { | |
idle: { | |
on: { | |
HARD_USER_LOGOUT: { | |
target: 'completed', | |
actions: 'clearUserAuth', | |
}, | |
USER_LOGOUT: 'userLogoutPending', | |
PRACTICE_LOGOUT: 'practiceLogoutPending', | |
}, | |
}, | |
userLogoutPending: { | |
exit: 'clearUserAuth', | |
invoke: { | |
src: 'saveUserContext', | |
onDone: 'completed', | |
}, | |
}, | |
practiceLogoutPending: { | |
exit: ['clearUserAuth', 'clearPracticeAuth'], | |
invoke: { | |
src: 'saveUserContext', | |
onDone: 'completed', | |
}, | |
}, | |
completed: { | |
type: 'done', | |
}, | |
}, | |
}, | |
refreshUserToken: { | |
onDone: { | |
target: '#instinct.view.unauthenticated', | |
actions: 'clearUserAuth', | |
}, | |
initial: 'delay', | |
states: { | |
delay: { | |
after: { | |
5000: 'refreshPending', | |
}, | |
}, | |
refreshPending: { | |
invoke: { | |
src: 'fetchRefreshedTokens', | |
onDone: 'delay', | |
onError: 'failed', | |
}, | |
}, | |
failed: { | |
type: 'done', | |
}, | |
}, | |
}, | |
}, | |
}, | |
}, | |
}, | |
offlineStatus: { | |
initial: 'unknown', | |
states: { | |
unknown: { | |
on: { | |
'': [{cond: 'isOffline', target: 'offline'}, {target: 'idle'}], | |
}, | |
}, | |
idle: { | |
on: { | |
OFFLINE: 'offline', | |
}, | |
}, | |
offline: { | |
after: { | |
5000: 'unknown', | |
}, | |
}, | |
}, | |
}, | |
appUpdater: {}, | |
notifications: {}, | |
}, | |
}, | |
{ | |
guards: { | |
hasRecentVisit: () => false, | |
practiceLoggedOut: () => false, | |
userLoggedOut: () => false, | |
isOffline: () => false, | |
}, | |
actions: { | |
assignPracticeInfo: () => {}, | |
assignUserInfo: () => {}, | |
assignVisit: () => {}, | |
clearPracticeAuth: () => {}, | |
clearUserAuth: () => {}, | |
copySheet: () => {}, | |
saveUserContext: () => {}, | |
sendExportSheetPdf: () => {}, | |
spawnSheetOrders: () => {}, // spawn sheet order machine | |
setSheetTime: () => {}, | |
spawnVitalRows: () => {}, | |
}, | |
services: { | |
saveUserContext: () => Promise.resolve(), | |
fetchRefreshedTokens: () => Promise.resolve(), | |
patientSearchForm: () => Machine({}), | |
practiceLogin: () => Machine({}), | |
userLogin: () => Machine({}), | |
saveVisit: () => Promise.resolve(), | |
loadSheet: () => Promise.resolve(), | |
loadVitals: () => Promise.resolve(), | |
}, | |
} | |
) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment