89 lines
2.7 KiB
TypeScript
89 lines
2.7 KiB
TypeScript
import { utils } from '@ohif/core';
|
|
|
|
import createReportAsync from '../Actions/createReportAsync';
|
|
import { createReportDialogPrompt } from '../Panels';
|
|
import getNextSRSeriesNumber from './getNextSRSeriesNumber';
|
|
import PROMPT_RESPONSES from './_shared/PROMPT_RESPONSES';
|
|
|
|
const {
|
|
filterAnd,
|
|
filterMeasurementsByStudyUID,
|
|
filterMeasurementsBySeriesUID,
|
|
filterPlanarMeasurement,
|
|
} = utils.MeasurementFilters;
|
|
|
|
async function promptSaveReport({ servicesManager, commandsManager, extensionManager }, ctx, evt) {
|
|
const { measurementService, displaySetService } = servicesManager.services;
|
|
const viewportId = evt.viewportId === undefined ? evt.data.viewportId : evt.viewportId;
|
|
const isBackupSave = evt.isBackupSave === undefined ? evt.data.isBackupSave : evt.isBackupSave;
|
|
const StudyInstanceUID = evt?.data?.StudyInstanceUID || ctx.trackedStudy;
|
|
const SeriesInstanceUID = evt?.data?.SeriesInstanceUID;
|
|
const { displaySetInstanceUID } = evt.data ?? evt;
|
|
|
|
const {
|
|
trackedSeries,
|
|
measurementFilter = filterAnd(
|
|
filterMeasurementsByStudyUID(StudyInstanceUID),
|
|
filterMeasurementsBySeriesUID(trackedSeries),
|
|
filterPlanarMeasurement
|
|
),
|
|
defaultSaveTitle = 'Research Derived Series',
|
|
} = ctx;
|
|
let displaySetInstanceUIDs;
|
|
|
|
try {
|
|
const promptResult = await createReportDialogPrompt({
|
|
title: defaultSaveTitle,
|
|
extensionManager,
|
|
servicesManager,
|
|
});
|
|
|
|
if (promptResult.action === PROMPT_RESPONSES.CREATE_REPORT) {
|
|
const dataSources = extensionManager.getDataSources();
|
|
const dataSource = dataSources[0];
|
|
const measurementData = measurementService.getMeasurements(measurementFilter);
|
|
|
|
const SeriesDescription = promptResult.value || defaultSaveTitle;
|
|
|
|
const SeriesNumber = getNextSRSeriesNumber(displaySetService);
|
|
|
|
const getReport = async () => {
|
|
return commandsManager.runCommand(
|
|
'storeMeasurements',
|
|
{
|
|
measurementData,
|
|
dataSource,
|
|
additionalFindingTypes: ['ArrowAnnotate'],
|
|
options: {
|
|
SeriesDescription,
|
|
SeriesNumber,
|
|
},
|
|
},
|
|
'CORNERSTONE_STRUCTURED_REPORT'
|
|
);
|
|
};
|
|
displaySetInstanceUIDs = await createReportAsync({
|
|
servicesManager,
|
|
getReport,
|
|
});
|
|
} else if (promptResult.action === RESPONSE.CANCEL) {
|
|
// Do nothing
|
|
}
|
|
|
|
return {
|
|
userResponse: promptResult.action,
|
|
createdDisplaySetInstanceUIDs: displaySetInstanceUIDs,
|
|
StudyInstanceUID,
|
|
SeriesInstanceUID,
|
|
viewportId,
|
|
isBackupSave,
|
|
displaySetInstanceUID,
|
|
};
|
|
} catch (error) {
|
|
console.warn('Unable to save report', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export default promptSaveReport;
|