feat: Support for local DICOM drag and drop (#2445)

* Added drag and drop from local and local data source

* fix: dicom SR drag and drop from local
This commit is contained in:
Alireza authored and GitHub committed 2021-06-15 10:19:45 -04:00
1 parent 99b8dc4759
commit fdb6ca41d6
23 files changed
+656 -89

No files matched your search

@@ -17,7 +17,7 @@ function create({
retrieve,
store,
reject,
parseRouteParams,
initialize,
retrieveSeriesMetadata,
deleteStudyMetadataPromise,
getImageIdsForDisplaySet,
@@ -38,7 +38,7 @@ function create({
* @param {number} params.resultsPerPage
*/
mapParams: params => params,
requestResults: () => {},
requestResults: () => { },
processResults: results => results,
},
series: {},
@@ -63,7 +63,7 @@ function create({
retrieve: retrieve || defaultRetrieve,
reject: reject || defaultReject,
store: store || defaultStore,
parseRouteParams,
initialize,
retrieveSeriesMetadata,
deleteStudyMetadataPromise,
getImageIdsForDisplaySet,
+31 -31
View File
@@ -71,47 +71,47 @@ class MetadataProvider {
this.imageIdToUIDs.set(imageId, uids);
}
_getAndCacheStudy(StudyInstanceUID) {
const studies = this.studies;
// _getAndCacheStudy(StudyInstanceUID) {
// const studies = this.studies;
let study = studies.get(StudyInstanceUID);
// let study = studies.get(StudyInstanceUID);
if (!study) {
study = { series: new Map() };
studies.set(StudyInstanceUID, study);
}
// if (!study) {
// study = { series: new Map() };
// studies.set(StudyInstanceUID, study);
// }
return study;
}
_getAndCacheSeriesFromStudy(study, SeriesInstanceUID) {
let series = study.series.get(SeriesInstanceUID);
// return study;
// }
// _getAndCacheSeriesFromStudy(study, SeriesInstanceUID) {
// let series = study.series.get(SeriesInstanceUID);
if (!series) {
series = { instances: new Map() };
study.series.set(SeriesInstanceUID, series);
}
// if (!series) {
// series = { instances: new Map() };
// study.series.set(SeriesInstanceUID, series);
// }
return series;
}
// return series;
// }
_getAndCacheInstanceFromStudy(series, SOPInstanceUID) {
let instance = series.instances.get(SOPInstanceUID);
// _getAndCacheInstanceFromStudy(series, SOPInstanceUID) {
// let instance = series.instances.get(SOPInstanceUID);
if (!instance) {
instance = {};
series.instances.set(SOPInstanceUID, instance);
}
// if (!instance) {
// instance = {};
// series.instances.set(SOPInstanceUID, instance);
// }
return instance;
}
// return instance;
// }
async _checkBulkDataAndInlineBinaries(instance, server) {
await fetchOverlayData(instance, server);
// async _checkBulkDataAndInlineBinaries(instance, server) {
// await fetchOverlayData(instance, server);
if (instance.PhotometricInterpretation === 'PALETTE COLOR') {
await fetchPaletteColorLookupTableData(instance, server);
}
}
// if (instance.PhotometricInterpretation === 'PALETTE COLOR') {
// await fetchPaletteColorLookupTableData(instance, server);
// }
// }
_getInstance(imageId) {
const uids = this._getUIDsFromImageID(imageId);
@@ -1,3 +1,5 @@
import dcmjs from 'dcmjs'
import pubSubServiceInterface from '../_shared/pubSubServiceInterface';
import createStudyMetadata from './createStudyMetadata';
import EVENTS from './EVENTS';
@@ -24,6 +26,10 @@ const _model = {
// }]
};
function _getStudyInstanceUIDs() {
return _model.studies.map(aStudy => aStudy.StudyInstanceUID)
}
function _getStudy(StudyInstanceUID) {
return _model.studies.find(
aStudy => aStudy.StudyInstanceUID === StudyInstanceUID
@@ -69,6 +75,41 @@ function _getInstanceFromImageId(imageId) {
const BaseImplementation = {
EVENTS,
listeners: {},
addInstance(dicomJSONDatasetOrP10ArrayBuffer) {
let dicomJSONDataset;
// If Arraybuffer, parse to DICOMJSON before naturalizing.
if (dicomJSONDatasetOrP10ArrayBuffer instanceof ArrayBuffer) {
const dicomData = dcmjs.data.DicomMessage.readFile(dicomJSONDatasetOrP10ArrayBuffer);
dicomJSONDataset = dicomData.dict;
} else {
dicomJSONDataset = dicomJSONDatasetOrP10ArrayBuffer;
}
let naturalizedDataset;
if (dicomJSONDataset['SeriesInstanceUID'] === undefined) {
naturalizedDataset = dcmjs.data.DicomMetaDictionary.naturalizeDataset(
dicomJSONDataset
);
} else {
naturalizedDataset = dicomJSONDataset;
}
const { StudyInstanceUID } = naturalizedDataset;
let study = _model.studies.find(
study => study.StudyInstanceUID === StudyInstanceUID
);
if (!study) {
_model.studies.push(createStudyMetadata(StudyInstanceUID));
study = _model.studies[_model.studies.length - 1];
}
study.addInstanceToSeries(naturalizedDataset);
},
addInstances(instances, madeInClient = false) {
const { StudyInstanceUID, SeriesInstanceUID } = instances[0];
@@ -134,6 +175,7 @@ const BaseImplementation = {
_model.studies.push(newStudy);
}
},
getStudyInstanceUIDs: _getStudyInstanceUIDs,
getStudy: _getStudy,
getSeries: _getSeries,
getInstance: _getInstance,
@@ -146,8 +188,6 @@ const DicomMetadataStore = Object.assign(
pubSubServiceInterface
);
// TODO => Add instances
//_addInstance(input) // arraybuffer, or other stuff
export { DicomMetadataStore };
export default DicomMetadataStore;
@@ -5,13 +5,31 @@ function createStudyMetadata(StudyInstanceUID) {
StudyInstanceUID,
isLoaded: false,
series: [],
/**
*
* @param {object} instance
* @returns {bool} true if series were added; false if series already exist
*/
addInstanceToSeries: function (instance) {
const { SeriesInstanceUID } = instance;
const existingSeries = this.series.find(
s => s.SeriesInstanceUID === SeriesInstanceUID
);
if (existingSeries) {
existingSeries.instances.push(instance);
} else {
const series = createSeriesMetadata([instance]);
this.series.push(series);
}
},
/**
*
* @param {object[]} instances
* @param {string} instances[].SeriesInstanceUID
* @returns {bool} true if series were added; false if series already exist
*/
addInstancesToSeries: function(instances) {
addInstancesToSeries: function (instances) {
const { SeriesInstanceUID } = instances[0];
const existingSeries = this.series.find(
s => s.SeriesInstanceUID === SeriesInstanceUID
@@ -25,7 +43,7 @@ function createStudyMetadata(StudyInstanceUID) {
}
},
setSeriesMetadata: function(SeriesInstanceUID, seriesMetadata) {
setSeriesMetadata: function (SeriesInstanceUID, seriesMetadata) {
let existingSeries = this.series.find(
s => s.SeriesInstanceUID === SeriesInstanceUID
);