2019-10-03 09:51:29 +02:00
|
|
|
import React, { Component } from 'react';
|
|
|
|
|
import { metadata, studies, utils, log } from '@ohif/core';
|
2019-06-15 02:28:41 +02:00
|
|
|
|
2019-10-03 09:51:29 +02:00
|
|
|
import ConnectedViewer from './ConnectedViewer.js';
|
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
import { extensionManager } from './../App.js';
|
2019-01-09 00:13:44 +01:00
|
|
|
|
2019-10-03 09:51:29 +02:00
|
|
|
const { OHIFStudyMetadata, OHIFSeriesMetadata } = metadata;
|
2019-06-15 02:28:41 +02:00
|
|
|
const { retrieveStudiesMetadata } = studies;
|
|
|
|
|
const { studyMetadataManager, updateMetaDataManager } = utils;
|
2018-12-14 15:23:48 +01:00
|
|
|
|
2019-01-17 17:00:21 +01:00
|
|
|
class ViewerRetrieveStudyData extends Component {
|
2019-02-07 15:10:03 +01:00
|
|
|
static propTypes = {
|
|
|
|
|
studyInstanceUids: PropTypes.array.isRequired,
|
|
|
|
|
seriesInstanceUids: PropTypes.array,
|
2019-10-03 09:51:29 +02:00
|
|
|
server: PropTypes.object,
|
2019-02-07 15:10:03 +01:00
|
|
|
};
|
|
|
|
|
|
2019-10-03 09:51:29 +02:00
|
|
|
constructor(props) {
|
|
|
|
|
super(props);
|
|
|
|
|
this.state = {
|
|
|
|
|
studies: null,
|
|
|
|
|
error: null,
|
|
|
|
|
};
|
|
|
|
|
}
|
2019-02-07 15:10:03 +01:00
|
|
|
|
2019-10-03 09:51:29 +02:00
|
|
|
async loadStudies() {
|
2019-06-15 02:28:41 +02:00
|
|
|
try {
|
2019-10-03 09:51:29 +02:00
|
|
|
const { server, studyInstanceUids, seriesInstanceUids } = this.props;
|
2019-06-15 02:28:41 +02:00
|
|
|
const studies = await retrieveStudiesMetadata(
|
|
|
|
|
server,
|
|
|
|
|
studyInstanceUids,
|
|
|
|
|
seriesInstanceUids
|
|
|
|
|
);
|
2019-10-03 09:51:29 +02:00
|
|
|
this.setStudies(studies);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
this.setState({ error: true });
|
|
|
|
|
log.error(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-06-15 02:28:41 +02:00
|
|
|
|
2019-10-03 09:51:29 +02:00
|
|
|
setStudies(givenStudies) {
|
|
|
|
|
if (Array.isArray(givenStudies) && givenStudies.length > 0) {
|
|
|
|
|
const sopClassHandlerModules =
|
|
|
|
|
extensionManager.modules['sopClassHandlerModule'];
|
2019-06-15 02:28:41 +02:00
|
|
|
// Map studies to new format, update metadata manager?
|
2019-10-03 09:51:29 +02:00
|
|
|
const studies = givenStudies.map(study => {
|
2019-06-15 02:28:41 +02:00
|
|
|
const studyMetadata = new OHIFStudyMetadata(
|
|
|
|
|
study,
|
|
|
|
|
study.studyInstanceUid
|
|
|
|
|
);
|
2019-10-03 09:51:29 +02:00
|
|
|
if (!study.displaySets) {
|
|
|
|
|
study.displaySets = studyMetadata.createDisplaySets(
|
|
|
|
|
sopClassHandlerModules
|
|
|
|
|
);
|
|
|
|
|
}
|
2019-06-15 02:28:41 +02:00
|
|
|
studyMetadata.setDisplaySets(study.displaySets);
|
|
|
|
|
// Updates WADO-RS metaDataManager
|
|
|
|
|
updateMetaDataManager(study);
|
|
|
|
|
studyMetadataManager.add(studyMetadata);
|
2019-10-03 09:51:29 +02:00
|
|
|
// Attempt to load remaning series if any
|
|
|
|
|
this._attemptToLoadRemainingSeries(studyMetadata);
|
2019-06-15 02:28:41 +02:00
|
|
|
return study;
|
|
|
|
|
});
|
2019-10-03 09:51:29 +02:00
|
|
|
this.setState({ studies });
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-06-15 02:28:41 +02:00
|
|
|
|
2019-10-03 09:51:29 +02:00
|
|
|
_addSeriesToStudy(studyMetadata, series) {
|
|
|
|
|
const sopClassHandlerModules =
|
|
|
|
|
extensionManager.modules['sopClassHandlerModule'];
|
|
|
|
|
const study = studyMetadata.getData();
|
|
|
|
|
const seriesMetadata = new OHIFSeriesMetadata(series, study);
|
|
|
|
|
studyMetadata.addSeries(seriesMetadata);
|
|
|
|
|
studyMetadata.createAndAddDisplaySetsForSeries(
|
|
|
|
|
sopClassHandlerModules,
|
|
|
|
|
seriesMetadata
|
|
|
|
|
);
|
|
|
|
|
study.displaySets = studyMetadata.getDisplaySets();
|
|
|
|
|
updateMetaDataManager(study, series.seriesInstanceUid);
|
|
|
|
|
this.setState(function(state) {
|
|
|
|
|
return { studies: state.studies.slice() };
|
|
|
|
|
});
|
|
|
|
|
}
|
2019-06-15 02:28:41 +02:00
|
|
|
|
2019-10-03 09:51:29 +02:00
|
|
|
_attemptToLoadRemainingSeries(studyMetadata) {
|
|
|
|
|
const { seriesLoader } = studyMetadata.getData();
|
|
|
|
|
if (!seriesLoader) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
while (seriesLoader.hasNext()) {
|
|
|
|
|
seriesLoader
|
|
|
|
|
.next()
|
|
|
|
|
.then(
|
|
|
|
|
series => void this._addSeriesToStudy(studyMetadata, series),
|
|
|
|
|
error => void log.error(error)
|
|
|
|
|
);
|
2019-06-15 02:28:41 +02:00
|
|
|
}
|
2019-02-07 15:10:03 +01:00
|
|
|
}
|
2018-12-14 15:23:48 +01:00
|
|
|
|
2019-10-03 09:51:29 +02:00
|
|
|
componentDidMount() {
|
|
|
|
|
// TODO: CLEAR THIS SOMEWHERE ELSE
|
|
|
|
|
studyMetadataManager.purge();
|
|
|
|
|
this.loadStudies();
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-07 15:10:03 +01:00
|
|
|
render() {
|
|
|
|
|
if (this.state.error) {
|
|
|
|
|
return <div>Error: {JSON.stringify(this.state.error)}</div>;
|
2018-12-14 15:23:48 +01:00
|
|
|
}
|
2019-02-07 15:10:03 +01:00
|
|
|
|
2019-02-08 05:49:10 +01:00
|
|
|
return (
|
|
|
|
|
<ConnectedViewer
|
|
|
|
|
studies={this.state.studies}
|
|
|
|
|
studyInstanceUids={this.props.studyInstanceUids}
|
|
|
|
|
/>
|
|
|
|
|
);
|
2019-02-07 15:10:03 +01:00
|
|
|
}
|
2018-12-14 15:23:48 +01:00
|
|
|
}
|
|
|
|
|
|
2019-01-17 17:00:21 +01:00
|
|
|
export default ViewerRetrieveStudyData;
|