Files
ohif-viewer/platform/viewer/src/connectedComponents/ConnectedStudyBrowser.js
T

90 lines
2.8 KiB
JavaScript
Raw Normal View History

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';
import { servicesManager } from './../App.js';
2019-01-10 13:30:39 +01:00
const { studyMetadataManager } = OHIF.utils;
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 => {
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
};
const mapDispatchToProps = (dispatch, ownProps) => {
return {
onThumbnailClick: displaySetInstanceUID => {
let displaySet = findDisplaySetByUID(
2020-03-17 09:05:56 -04:00
ownProps.studyMetadata,
displaySetInstanceUID
);
if (displaySet.isDerived) {
const { Modality } = displaySet;
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,
});
};
displaySet = displaySet.getSourceDisplaySet(ownProps.studyMetadata, true, onDisplaySetLoadFailureHandler);
} else {
displaySet = displaySet.getSourceDisplaySet(ownProps.studyMetadata);
}
if (!displaySet) {
throw new Error(
`Referenced series for ${Modality} dataset not present.`
);
}
if (!displaySet) {
throw new Error('Source data not present');
}
}
dispatch(setActiveViewportSpecificData(displaySet));
},
};
};
2019-01-10 13:30:39 +01:00
const ConnectedStudyBrowser = connect(
2019-05-29 08:39:54 -04:00
mapStateToProps,
mapDispatchToProps
2019-01-10 13:30:39 +01:00
)(StudyBrowser);
export default ConnectedStudyBrowser;