121 lines
3.3 KiB
TypeScript
121 lines
3.3 KiB
TypeScript
import i18n from 'i18next';
|
|
|
|
const RESPONSE = {
|
|
NO_NEVER: -1,
|
|
CANCEL: 0,
|
|
CREATE_REPORT: 1,
|
|
ADD_SERIES: 2,
|
|
SET_STUDY_AND_SERIES: 3,
|
|
NO_NOT_FOR_SERIES: 4,
|
|
};
|
|
|
|
function promptTrackNewStudy({ servicesManager, extensionManager }: withAppTypes, ctx, evt) {
|
|
const { uiViewportDialogService } = servicesManager.services;
|
|
// When the state change happens after a promise, the state machine sends the retult in evt.data;
|
|
// In case of direct transition to the state, the state machine sends the data in evt;
|
|
const { viewportId, StudyInstanceUID, SeriesInstanceUID } = evt.data || evt;
|
|
|
|
return new Promise(async function (resolve, reject) {
|
|
let promptResult = await _askTrackMeasurements(uiViewportDialogService, viewportId);
|
|
|
|
if (promptResult === RESPONSE.SET_STUDY_AND_SERIES) {
|
|
promptResult = ctx.isDirty
|
|
? await _askSaveDiscardOrCancel(uiViewportDialogService, viewportId)
|
|
: RESPONSE.SET_STUDY_AND_SERIES;
|
|
}
|
|
|
|
resolve({
|
|
userResponse: promptResult,
|
|
StudyInstanceUID,
|
|
SeriesInstanceUID,
|
|
viewportId,
|
|
isBackupSave: false,
|
|
});
|
|
});
|
|
}
|
|
|
|
function _askTrackMeasurements(
|
|
UIViewportDialogService: AppTypes.UIViewportDialogService,
|
|
viewportId
|
|
) {
|
|
return new Promise(function (resolve, reject) {
|
|
const message = i18n.t('MeasurementTable:Track measurements for this series?');
|
|
const actions = [
|
|
{ type: 'cancel', text: i18n.t('MeasurementTable:No'), value: RESPONSE.CANCEL },
|
|
{
|
|
type: 'secondary',
|
|
text: i18n.t('MeasurementTable:No, do not ask again'),
|
|
value: RESPONSE.NO_NOT_FOR_SERIES,
|
|
},
|
|
{
|
|
type: 'primary',
|
|
text: i18n.t('MeasurementTable:Yes'),
|
|
value: RESPONSE.SET_STUDY_AND_SERIES,
|
|
},
|
|
];
|
|
const onSubmit = result => {
|
|
UIViewportDialogService.hide();
|
|
resolve(result);
|
|
};
|
|
|
|
UIViewportDialogService.show({
|
|
viewportId,
|
|
type: 'info',
|
|
message,
|
|
actions,
|
|
onSubmit,
|
|
onOutsideClick: () => {
|
|
UIViewportDialogService.hide();
|
|
resolve(RESPONSE.CANCEL);
|
|
},
|
|
onKeyPress: event => {
|
|
if (event.key === 'Enter') {
|
|
const action = actions.find(action => action.value === RESPONSE.SET_STUDY_AND_SERIES);
|
|
onSubmit(action.value);
|
|
}
|
|
},
|
|
});
|
|
});
|
|
}
|
|
|
|
function _askSaveDiscardOrCancel(
|
|
UIViewportDialogService: AppTypes.UIViewportDialogService,
|
|
viewportId
|
|
) {
|
|
return new Promise(function (resolve, reject) {
|
|
const message =
|
|
'Measurements cannot span across multiple studies. Do you want to save your tracked measurements?';
|
|
const actions = [
|
|
{ type: 'cancel', text: 'Cancel', value: RESPONSE.CANCEL },
|
|
{
|
|
type: 'secondary',
|
|
text: 'No, discard previously tracked series & measurements',
|
|
value: RESPONSE.SET_STUDY_AND_SERIES,
|
|
},
|
|
{
|
|
type: 'primary',
|
|
text: 'Yes',
|
|
value: RESPONSE.CREATE_REPORT,
|
|
},
|
|
];
|
|
const onSubmit = result => {
|
|
UIViewportDialogService.hide();
|
|
resolve(result);
|
|
};
|
|
|
|
UIViewportDialogService.show({
|
|
viewportId,
|
|
type: 'warning',
|
|
message,
|
|
actions,
|
|
onSubmit,
|
|
onOutsideClick: () => {
|
|
UIViewportDialogService.hide();
|
|
resolve(RESPONSE.CANCEL);
|
|
},
|
|
});
|
|
});
|
|
}
|
|
|
|
export default promptTrackNewStudy;
|