2019-09-26 11:08:30 -03:00
|
|
|
import OHIF from '@ohif/core';
|
2019-01-10 13:30:39 +01:00
|
|
|
import { connect } from 'react-redux';
|
2019-08-13 15:36:46 -04:00
|
|
|
import { StudyBrowser } from '@ohif/ui';
|
2019-01-10 13:30:39 +01:00
|
|
|
import cloneDeep from 'lodash.clonedeep';
|
2020-03-17 09:05:56 -04:00
|
|
|
import findDisplaySetByUID from './findDisplaySetByUID';
|
2021-04-16 20:14:04 +02:00
|
|
|
import { servicesManager } from './../App.js';
|
2019-01-10 13:30:39 +01:00
|
|
|
|
2020-08-10 11:20:31 +02:00
|
|
|
const { studyMetadataManager } = OHIF.utils;
|
|
|
|
|
|
2019-09-26 11:08:30 -03:00
|
|
|
const { setActiveViewportSpecificData } = OHIF.redux.actions;
|
|
|
|
|
|
2019-01-10 13:30:39 +01:00
|
|
|
// TODO
|
|
|
|
|
// - Determine in which display set is active from Redux (activeViewportIndex and layout viewportData)
|
|
|
|
|
// - Pass in errors and stack loading progress from Redux
|
|
|
|
|
const mapStateToProps = (state, ownProps) => {
|
2019-05-29 08:39:54 -04:00
|
|
|
// If we know that the stack loading progress details have changed,
|
|
|
|
|
// we can try to update the component state so that the thumbnail
|
|
|
|
|
// progress bar is updated
|
|
|
|
|
const stackLoadingProgressMap = state.loading.progress;
|
|
|
|
|
const studiesWithLoadingData = cloneDeep(ownProps.studies);
|
2019-01-10 13:30:39 +01:00
|
|
|
|
2019-05-29 08:39:54 -04:00
|
|
|
studiesWithLoadingData.forEach(study => {
|
|
|
|
|
study.thumbnails.forEach(data => {
|
2020-03-09 19:03:23 +00:00
|
|
|
const { displaySetInstanceUID } = data;
|
|
|
|
|
const stackId = `StackProgress:${displaySetInstanceUID}`;
|
2019-05-29 08:39:54 -04:00
|
|
|
const stackProgressData = stackLoadingProgressMap[stackId];
|
2019-01-10 13:30:39 +01:00
|
|
|
|
2019-05-29 08:39:54 -04:00
|
|
|
let stackPercentComplete = 0;
|
|
|
|
|
if (stackProgressData) {
|
|
|
|
|
stackPercentComplete = stackProgressData.percentComplete;
|
|
|
|
|
}
|
2019-01-10 13:30:39 +01:00
|
|
|
|
2019-05-29 08:39:54 -04:00
|
|
|
data.stackPercentComplete = stackPercentComplete;
|
2019-01-10 13:30:39 +01:00
|
|
|
});
|
2019-05-29 08:39:54 -04:00
|
|
|
});
|
2019-01-10 13:30:39 +01:00
|
|
|
|
2019-05-29 08:39:54 -04:00
|
|
|
return {
|
|
|
|
|
studies: studiesWithLoadingData,
|
|
|
|
|
};
|
2019-01-10 13:30:39 +01:00
|
|
|
};
|
|
|
|
|
|
2019-10-25 15:22:44 -03:00
|
|
|
const mapDispatchToProps = (dispatch, ownProps) => {
|
2019-09-26 11:08:30 -03:00
|
|
|
return {
|
2020-03-09 19:03:23 +00:00
|
|
|
onThumbnailClick: displaySetInstanceUID => {
|
2020-08-10 11:20:31 +02:00
|
|
|
let displaySet = findDisplaySetByUID(
|
2020-03-17 09:05:56 -04:00
|
|
|
ownProps.studyMetadata,
|
|
|
|
|
displaySetInstanceUID
|
2019-09-26 11:08:30 -03:00
|
|
|
);
|
2019-10-25 15:22:44 -03:00
|
|
|
|
2020-08-10 11:20:31 +02:00
|
|
|
if (displaySet.isDerived) {
|
|
|
|
|
const { Modality } = displaySet;
|
2021-04-16 20:14:04 +02:00
|
|
|
if (Modality === 'SEG' && servicesManager) {
|
|
|
|
|
const {LoggerService, UINotificationService} = servicesManager.services;
|
|
|
|
|
const onDisplaySetLoadFailureHandler = error => {
|
|
|
|
|
LoggerService.error({ error, message: error.message });
|
|
|
|
|
UINotificationService.show({
|
|
|
|
|
title: 'DICOM Segmentation Loader',
|
|
|
|
|
message: error.message,
|
|
|
|
|
type: 'error',
|
|
|
|
|
autoClose: true,
|
|
|
|
|
});
|
|
|
|
|
};
|
2020-08-10 11:20:31 +02:00
|
|
|
|
2021-04-16 20:14:04 +02:00
|
|
|
displaySet = displaySet.getSourceDisplaySet(ownProps.studyMetadata, true, onDisplaySetLoadFailureHandler);
|
|
|
|
|
} else {
|
|
|
|
|
displaySet = displaySet.getSourceDisplaySet(ownProps.studyMetadata);
|
|
|
|
|
}
|
2020-08-10 11:20:31 +02:00
|
|
|
|
|
|
|
|
if (!displaySet) {
|
|
|
|
|
throw new Error(
|
|
|
|
|
`Referenced series for ${Modality} dataset not present.`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!displaySet) {
|
|
|
|
|
throw new Error('Source data not present');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-25 15:22:44 -03:00
|
|
|
dispatch(setActiveViewportSpecificData(displaySet));
|
2019-09-26 11:08:30 -03:00
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2019-01-10 13:30:39 +01:00
|
|
|
const ConnectedStudyBrowser = connect(
|
2019-05-29 08:39:54 -04:00
|
|
|
mapStateToProps,
|
2019-09-26 11:08:30 -03:00
|
|
|
mapDispatchToProps
|
2019-01-10 13:30:39 +01:00
|
|
|
)(StudyBrowser);
|
|
|
|
|
|
|
|
|
|
export default ConnectedStudyBrowser;
|