Skip to content

Instantly share code, notes, and snippets.

@coded-aesthetics
Last active July 10, 2021 06:51
Show Gist options
  • Select an option

  • Save coded-aesthetics/0cf968a73e36ec221ba1fd7365215d56 to your computer and use it in GitHub Desktop.

Select an option

Save coded-aesthetics/0cf968a73e36ec221ba1fd7365215d56 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
const getPatientDataFromGenericSurveyWithNextFreeIpid = (context) => {
return PatientServiceSingleton.instance
.getNextFreeIpid('ext')
.map((ipid) => (Object.assign(Object.assign({}, convertGenericSurveyPatientDataToPatientData(context.genericSurvey.entity.config.patientData)), { ipid: 'ext' + ipid })))
.promise();
};
const performMergeWithExistingPatient = (context) => ClientLibResourcesSingleton.resources.genericSurveyToolbox
.moveToSurveyDbExistingPatient(context.genericSurvey.id, context.selectedPatient.id, context.mergedPatient)
.promise();
const performMergeWithNewPatient = (context) => ClientLibResourcesSingleton.resources.genericSurveyToolbox
.moveToSurveyDbNewPatient(context.genericSurvey.id, context.editedPatientData)
.promise();
var MergeAssistantStateNames;
(function (MergeAssistantStateNames) {
MergeAssistantStateNames["NEEDS_INITIAL_CONTEXT"] = "needsInitialContext";
MergeAssistantStateNames["LOADING_PATIENT_DATA_FROM_GENERIC_SURVEY_WITH_NEXT_FREE_IPID"] = "loadingPatientDataFromGenericSurveyWithNextFreeIpid";
MergeAssistantStateNames["SELECTING_SUGGESTION"] = "selectingSuggestion";
MergeAssistantStateNames["MERGE_WITH_EXISTING_PATIENT"] = "mergeWithExistingPatient";
MergeAssistantStateNames["MANUAL_MERGE"] = "manualMerge";
MergeAssistantStateNames["MERGE_WITH_NEW_PATIENT"] = "mergeWithNewPatient";
MergeAssistantStateNames["ENTER_PATIENT_DATA"] = "enterPatientData";
MergeAssistantStateNames["PERFORMING_MERGE_WITH_NEW_PATIENT"] = "performingMergeWithNewPatient";
MergeAssistantStateNames["PERFORMING_MERGE_WITH_EXISTING_PATIENT"] = "performingMergeWithExistingPatient";
MergeAssistantStateNames["PATIENT_DATA_INVALID"] = "patientDataInvalid";
MergeAssistantStateNames["PATIENT_DATA_VALID"] = "patientDataValid";
MergeAssistantStateNames["SUCCESS"] = "success";
MergeAssistantStateNames["FAILURE"] = "failure";
})(MergeAssistantStateNames || (MergeAssistantStateNames = {}));
Machine({
id: 'genericSurveyMergeAssistant',
initial: MergeAssistantStateNames.NEEDS_INITIAL_CONTEXT,
context: {
genericSurvey: null,
suggestions: [],
selectedPatient: null,
patientDataFromGenericSurveyWithIpid: null,
mergedPatient: null,
editedPatientData: null,
mergeError: null,
},
states: {
[MergeAssistantStateNames.NEEDS_INITIAL_CONTEXT]: {
on: {
SET_INITIAL_CONTEXT: {
target: MergeAssistantStateNames.LOADING_PATIENT_DATA_FROM_GENERIC_SURVEY_WITH_NEXT_FREE_IPID,
actions: ['assignInitialContext'],
},
},
},
[MergeAssistantStateNames.LOADING_PATIENT_DATA_FROM_GENERIC_SURVEY_WITH_NEXT_FREE_IPID]: {
invoke: {
src: getPatientDataFromGenericSurveyWithNextFreeIpid,
onDone: {
target: MergeAssistantStateNames.SELECTING_SUGGESTION,
actions: assign({ patientDataFromGenericSurveyWithIpid: (_, event) => event.data }),
},
onError: {
target: '#' + MergeAssistantStateNames.FAILURE,
actions: assign({ mergeError: (_, event) => event.data }),
},
},
},
[MergeAssistantStateNames.SELECTING_SUGGESTION]: {
on: {
CONFIRM_SUGGESTION_MERGE: {
target: MergeAssistantStateNames.MERGE_WITH_EXISTING_PATIENT,
actions: ['assignSuggestedPatientToContext'],
},
CONFIRM_SUGGESTION_NEW_PATIENT: {
target: MergeAssistantStateNames.MERGE_WITH_NEW_PATIENT,
},
},
},
[MergeAssistantStateNames.MERGE_WITH_EXISTING_PATIENT]: {
initial: MergeAssistantStateNames.MANUAL_MERGE,
states: {
[MergeAssistantStateNames.MANUAL_MERGE]: {
on: {
CONFIRM_MERGE: {
target: '#' + MergeAssistantStateNames.PERFORMING_MERGE_WITH_EXISTING_PATIENT,
actions: ['assignMergedPatientToContext'],
},
BACK: {
target: '#genericSurveyMergeAssistant.' + MergeAssistantStateNames.SELECTING_SUGGESTION,
},
},
},
[MergeAssistantStateNames.PERFORMING_MERGE_WITH_EXISTING_PATIENT]: {
id: MergeAssistantStateNames.PERFORMING_MERGE_WITH_EXISTING_PATIENT,
invoke: {
src: performMergeWithExistingPatient,
onDone: {
target: '#' + MergeAssistantStateNames.SUCCESS,
},
onError: {
target: '#' + MergeAssistantStateNames.FAILURE,
actions: assign({ mergeError: (_, event) => event.data }),
},
},
},
},
},
[MergeAssistantStateNames.MERGE_WITH_NEW_PATIENT]: {
initial: MergeAssistantStateNames.ENTER_PATIENT_DATA,
states: {
[MergeAssistantStateNames.ENTER_PATIENT_DATA]: {
initial: MergeAssistantStateNames.PATIENT_DATA_INVALID,
states: {
[MergeAssistantStateNames.PATIENT_DATA_INVALID]: {
on: {
PATIENT_DATA_VALID: {
target: MergeAssistantStateNames.PATIENT_DATA_VALID,
},
BACK: {
target: '#genericSurveyMergeAssistant.' + MergeAssistantStateNames.SELECTING_SUGGESTION,
},
},
},
[MergeAssistantStateNames.PATIENT_DATA_VALID]: {
on: {
PATIENT_DATA_INVALID: {
target: MergeAssistantStateNames.PATIENT_DATA_INVALID,
},
CONFIRM_CREATE: {
target: '#' + MergeAssistantStateNames.PERFORMING_MERGE_WITH_NEW_PATIENT,
actions: ['assignEditedPatientDataToContext'],
},
BACK: {
target: '#genericSurveyMergeAssistant.' + MergeAssistantStateNames.SELECTING_SUGGESTION,
},
},
},
},
},
[MergeAssistantStateNames.PERFORMING_MERGE_WITH_NEW_PATIENT]: {
id: MergeAssistantStateNames.PERFORMING_MERGE_WITH_NEW_PATIENT,
invoke: {
src: performMergeWithNewPatient,
onDone: {
target: '#' + MergeAssistantStateNames.SUCCESS,
},
onError: {
target: '#' + MergeAssistantStateNames.FAILURE,
actions: assign({ mergeError: (_, event) => event.data }),
},
},
},
},
},
[MergeAssistantStateNames.SUCCESS]: { id: MergeAssistantStateNames.SUCCESS, type: 'final' },
[MergeAssistantStateNames.FAILURE]: { id: MergeAssistantStateNames.FAILURE, type: 'final' },
},
}, {
services: { submitPayment: () => () => { } },
actions: {
assignInitialContext: assign((context, event) => {
if (event.type !== 'SET_INITIAL_CONTEXT')
return {};
return {
genericSurvey: event.genericSurvey,
suggestions: event.suggestions,
};
}),
assignSuggestedPatientToContext: assign((_, event) => {
if (event.type !== 'CONFIRM_SUGGESTION_MERGE')
return {};
return {
selectedPatient: event.selectedPatient,
};
}),
assignEditedPatientDataToContext: assign((_, event) => {
if (event.type !== 'CONFIRM_CREATE')
return {};
return {
editedPatientData: event.editedPatientData,
};
}),
assignMergedPatientToContext: assign((_, event) => {
if (event.type !== 'CONFIRM_MERGE')
return {};
return {
mergedPatient: event.mergedPatient,
};
}),
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment