init
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
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 };
|
||||
Reference in New Issue
Block a user