feat: 🎸 Filter by url query param for seriesInstnaceUID (#1117)

* feat: 🎸 Filter by url query param for seriesInstnaceUID

* fix: Set SR viewport as active by interaction (#1118)

* fix: Set SR viewport as active by interaction

* quick fix

* (eslint) add "before" as global variables

* add data-cy

* add data-cy

* create E2E test

* (E2E) create custom command to set layout size

* remove .only e2e

* remove throttle for onScroll

* feat: 🎸 Code review in progress

Code review. Move retrieveMEtadata load to separate folders. Some minor
code clean up

* feat: 🎸 Code review. Missing changes from previous commit

* feat: 🎸 Code review missing changes from previous commit

When sorting, Criteria for instance must use instanceNumber and not
instancesNumber

* feat: 🎸 Code review. Add more jsdoc info

* feat: 🎸 Code review. Prettify changed code

* feat: 🎸 Code review

Changed case for seriesInstanceUID. Use qido to filter (async). Fallback
to no params and same api method(async)
This commit is contained in:
ladeirarodolfo authored and Danny Brown committed 2019-11-05 16:48:44 -05:00
1 parent 9c1a3c3183
commit e208f2e6a9
11 files changed
+881 -626

No files matched your search

@@ -4,6 +4,7 @@ import { metadata, studies, utils, log } from '@ohif/core';
import ConnectedViewer from './ConnectedViewer.js';
import PropTypes from 'prop-types';
import { extensionManager } from './../App.js';
import { withSnackbar } from '@ohif/ui';
const { OHIFStudyMetadata, OHIFSeriesMetadata } = metadata;
const { retrieveStudiesMetadata, deleteStudyMetadataPromise } = studies;
@@ -29,11 +30,21 @@ class ViewerRetrieveStudyData extends Component {
async loadStudies() {
try {
const { server, studyInstanceUids, seriesInstanceUids } = this.props;
const filters = {};
// Use the first, discard others
const seriesInstanceUID = seriesInstanceUids && seriesInstanceUids[0];
if (seriesInstanceUID) {
filters.seriesInstanceUID = seriesInstanceUID;
}
const studies = await retrieveStudiesMetadata(
server,
studyInstanceUids,
seriesInstanceUids
filters
);
this.validateFilters(studies, filters);
this.setStudies(studies);
} catch (e) {
this.setState({ error: true });
@@ -41,6 +52,32 @@ class ViewerRetrieveStudyData extends Component {
}
}
/**
* Validate filters and promp user a message in case filter is unsuccessfully applied.
* In case of success, studies array contains, as the first element, the queried content (from filter)
* @param {Array} studies array of studies to be evaluated
* @param {Object} filters filters to test against
*/
validateFilters(studies = [], filters = {}) {
const { seriesInstanceUID } = filters;
const { snackbarContext } = this.props;
// skip in case no filter or no toast manager
if (!seriesInstanceUID || !snackbarContext) {
return;
}
const firstStudy = studies[0] || {};
const { seriesList = [] } = firstStudy;
const firstSeries = seriesList[0];
if (!firstSeries || firstSeries.seriesInstanceUid !== seriesInstanceUID) {
snackbarContext.show({
message: 'No series for given filter: ' + seriesInstanceUID,
});
}
}
setStudies(givenStudies) {
if (Array.isArray(givenStudies) && givenStudies.length > 0) {
const sopClassHandlerModules =
@@ -151,4 +188,4 @@ class ViewerRetrieveStudyData extends Component {
}
}
export default ViewerRetrieveStudyData;
export default withSnackbar(ViewerRetrieveStudyData);
+10 -10
View File
@@ -7,15 +7,15 @@ const { urlUtil: UrlUtil } = OHIF.utils;
/**
* Get array of seriesUIDs from param or from queryString
* @param {*} seriesInstanceUIDs
* @param {*} seriesInstanceUids
* @param {*} location
*/
const getSeriesInstanceUIDs = (seriesInstanceUIDs, routeLocation) => {
const getSeriesInstanceUIDs = (seriesInstanceUids, routeLocation) => {
const queryFilters = UrlUtil.queryString.getQueryFilters(routeLocation);
const querySeriesUIDs = queryFilters && queryFilters['SeriesInstanceUID'];
const _seriesInstanceUIDs = seriesInstanceUIDs || querySeriesUIDs;
const querySeriesUIDs = queryFilters && queryFilters['seriesInstanceUID'];
const _seriesInstanceUids = seriesInstanceUids || querySeriesUIDs;
return UrlUtil.paramString.parseParam(_seriesInstanceUIDs);
return UrlUtil.paramString.parseParam(_seriesInstanceUids);
};
function ViewerRouting({ match: routeMatch, location: routeLocation }) {
@@ -29,14 +29,14 @@ function ViewerRouting({ match: routeMatch, location: routeLocation }) {
} = routeMatch.params;
const server = useServer({ project, location, dataset, dicomStore });
const studyUIDs = UrlUtil.paramString.parseParam(studyInstanceUids);
const seriesUIDs = getSeriesInstanceUIDs(seriesInstanceUids, routeLocation);
const studyUids = UrlUtil.paramString.parseParam(studyInstanceUids);
const seriesUids = getSeriesInstanceUIDs(seriesInstanceUids, routeLocation);
if (server && studyUIDs) {
if (server && studyUids) {
return (
<ConnectedViewerRetrieveStudyData
studyInstanceUids={studyUIDs}
seriesInstanceUids={seriesUIDs}
studyInstanceUids={studyUids}
seriesInstanceUids={seriesUids}
/>
);
}