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:
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,
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
Reference in new issue
Block a user