97 lines
2.4 KiB
TypeScript
97 lines
2.4 KiB
TypeScript
import { Types, DisplaySetService, utils } from '@ohif/core';
|
|
|
|
import { id } from '../id';
|
|
|
|
type InstanceMetadata = Types.InstanceMetadata;
|
|
|
|
const SOPClassHandlerName = 'chart';
|
|
|
|
const CHART_MODALITY = 'CHT';
|
|
|
|
// Private SOPClassUid for chart data
|
|
const ChartDataSOPClassUid = '1.9.451.13215.7.3.2.7.6.1';
|
|
|
|
const sopClassUids = [ChartDataSOPClassUid];
|
|
|
|
const makeChartDataDisplaySet = (instance, sopClassUids) => {
|
|
const {
|
|
StudyInstanceUID,
|
|
SeriesInstanceUID,
|
|
SOPInstanceUID,
|
|
SeriesDescription,
|
|
SeriesNumber,
|
|
SeriesDate,
|
|
SOPClassUID,
|
|
} = instance;
|
|
|
|
return {
|
|
Modality: CHART_MODALITY,
|
|
loading: false,
|
|
isReconstructable: false,
|
|
displaySetInstanceUID: utils.guid(),
|
|
SeriesDescription,
|
|
SeriesNumber,
|
|
SeriesDate,
|
|
SOPInstanceUID,
|
|
SeriesInstanceUID,
|
|
StudyInstanceUID,
|
|
SOPClassHandlerId: `${id}.sopClassHandlerModule.${SOPClassHandlerName}`,
|
|
SOPClassUID,
|
|
isDerivedDisplaySet: true,
|
|
isLoaded: true,
|
|
sopClassUids,
|
|
instance,
|
|
instances: [instance],
|
|
|
|
/**
|
|
* Adds instances to the chart displaySet, rather than creating a new one
|
|
* when user moves to a different workflow step and gets back to a step that
|
|
* recreates the chart
|
|
*/
|
|
addInstances: function (instances: InstanceMetadata[], _displaySetService: DisplaySetService) {
|
|
this.instances.push(...instances);
|
|
this.instance = this.instances[this.instances.length - 1];
|
|
|
|
return this;
|
|
},
|
|
};
|
|
};
|
|
|
|
function getSopClassUids(instances) {
|
|
const uniqueSopClassUidsInSeries = new Set();
|
|
instances.forEach(instance => {
|
|
uniqueSopClassUidsInSeries.add(instance.SOPClassUID);
|
|
});
|
|
const sopClassUids = Array.from(uniqueSopClassUidsInSeries);
|
|
|
|
return sopClassUids;
|
|
}
|
|
|
|
function _getDisplaySetsFromSeries(instances) {
|
|
// If the series has no instances, stop here
|
|
if (!instances || !instances.length) {
|
|
throw new Error('No instances were provided');
|
|
}
|
|
|
|
const sopClassUids = getSopClassUids(instances);
|
|
const displaySets = instances.map(instance => {
|
|
if (instance.Modality === CHART_MODALITY) {
|
|
return makeChartDataDisplaySet(instance, sopClassUids);
|
|
}
|
|
|
|
throw new Error('Unsupported modality');
|
|
});
|
|
|
|
return displaySets;
|
|
}
|
|
|
|
const chartHandler = {
|
|
name: SOPClassHandlerName,
|
|
sopClassUids,
|
|
getDisplaySetsFromSeries: instances => {
|
|
return _getDisplaySetsFromSeries(instances);
|
|
},
|
|
};
|
|
|
|
export { chartHandler };
|