OHIF-301: Add sorting to worklist series (#1960)

* ohif-301: add sorting to work list series

* ohif-301: clearadd series date to qido

* ohif-301: add series date to qido

* Update qido.js

Co-authored-by: Erik Ziegler <erik.sweed@gmail.com>
This commit is contained in:
Igor Octaviano 2020-08-11 22:01:48 -03:00 committed by GitHub
parent 3267706b33
commit e04f74499f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 27 additions and 20 deletions

View File

@ -83,6 +83,7 @@ export function processSeriesResults(qidoSeries) {
seriesInstanceUid: getString(qidoSeries['0020000E']), seriesInstanceUid: getString(qidoSeries['0020000E']),
modality: getString(qidoSeries['00080060']), modality: getString(qidoSeries['00080060']),
seriesNumber: getString(qidoSeries['00200011']), seriesNumber: getString(qidoSeries['00200011']),
seriesDate: utils.formatDate(getString(qidoSeries['00080021'])),
numSeriesInstances: Number(getString(qidoSeries['00201209'])), numSeriesInstances: Number(getString(qidoSeries['00201209'])),
description: getString(qidoSeries['0008103E']), description: getString(qidoSeries['0008103E']),
}) })
@ -123,9 +124,9 @@ async function search(
export function seriesInStudy(dicomWebClient, studyInstanceUID) { export function seriesInStudy(dicomWebClient, studyInstanceUID) {
// Series Description // Series Description
// Already included? // Already included?
const commaSeparatedFields = ['0008103E'].join(','); const commaSeparatedFields = ['0008103E', '00080021'].join(',');
const queryParams = { const queryParams = {
// includefield: commaSeparatedFields, includefield: commaSeparatedFields,
}; };
return dicomWebClient.searchForSeries({ studyInstanceUID, queryParams }); return dicomWebClient.searchForSeries({ studyInstanceUID, queryParams });

View File

@ -443,21 +443,9 @@ function _createStudyBrowserTabs(
const allStudies = []; const allStudies = [];
studyDisplayList.forEach(study => { studyDisplayList.forEach(study => {
const displaySetsForStudy = displaySets.filter( const displaySetsForStudy = utils.sortBySeriesDate(displaySets.filter(
ds => ds.StudyInstanceUID === study.studyInstanceUid ds => ds.StudyInstanceUID === study.studyInstanceUid
); ));
displaySetsForStudy.sort((a, b) => {
if (a.seriesNumber !== b.seriesNumber) {
return a.seriesNumber - b.seriesNumber;
}
const seriesDateA = Date.parse(a.seriesDate);
const seriesDateB = Date.parse(b.seriesDate);
return seriesDateA - seriesDateB;
});
const tabStudy = Object.assign({}, study, { const tabStudy = Object.assign({}, study, {
displaySets: displaySetsForStudy, displaySets: displaySetsForStudy,
}); });

View File

@ -4,6 +4,7 @@ import absoluteUrl from './absoluteUrl';
import addServers from './addServers'; import addServers from './addServers';
import guid from './guid'; import guid from './guid';
import sortBy from './sortBy.js'; import sortBy from './sortBy.js';
import sortBySeriesDate from './sortBySeriesDate.js';
import studyMetadataManager from './studyMetadataManager'; import studyMetadataManager from './studyMetadataManager';
import writeScript from './writeScript.js'; import writeScript from './writeScript.js';
import DicomLoaderService from './dicomLoaderService.js'; import DicomLoaderService from './dicomLoaderService.js';
@ -28,6 +29,7 @@ const utils = {
absoluteUrl, absoluteUrl,
addServers, addServers,
sortBy, sortBy,
sortBySeriesDate,
writeScript, writeScript,
formatDate, formatDate,
formatPN, formatPN,

View File

@ -0,0 +1,16 @@
/*
* Sorting function
* Sorts an array by seriesDate and seriesNumber if equal
*/
const sortBySeriesDate = array => array.sort((a, b) => {
if (a.seriesNumber !== b.seriesNumber) {
return a.seriesNumber - b.seriesNumber;
}
const seriesDateA = Date.parse(a.seriesDate);
const seriesDateB = Date.parse(b.seriesDate);
return seriesDateA - seriesDateB;
});
export default sortBySeriesDate;

View File

@ -5,10 +5,11 @@ import { Link } from 'react-router-dom';
import moment from 'moment'; import moment from 'moment';
import qs from 'query-string'; import qs from 'query-string';
import isEqual from 'lodash.isequal'; import isEqual from 'lodash.isequal';
//
import filtersMeta from './filtersMeta.js'; import filtersMeta from './filtersMeta.js';
import { useAppConfig } from '@state'; import { useAppConfig } from '@state';
import { useDebounce, useQuery } from '@hooks'; import { useDebounce, useQuery } from '@hooks';
import { utils } from '@ohif/core';
import PreferencesDropdown from '../../components/PreferencesDropdown'; import PreferencesDropdown from '../../components/PreferencesDropdown';
@ -166,9 +167,8 @@ function WorkList({ history, data: studies, isLoadingData, dataSource }) {
useEffect(() => { useEffect(() => {
const fetchSeries = async studyInstanceUid => { const fetchSeries = async studyInstanceUid => {
try { try {
const result = await dataSource.query.series.search(studyInstanceUid); const series = await dataSource.query.series.search(studyInstanceUid);
seriesInStudiesMap.set(studyInstanceUid, utils.sortBySeriesDate(series));
seriesInStudiesMap.set(studyInstanceUid, result);
setStudiesWithSeriesData([...studiesWithSeriesData, studyInstanceUid]); setStudiesWithSeriesData([...studiesWithSeriesData, studyInstanceUid]);
} catch (ex) { } catch (ex) {
// TODO: UI Notification Service // TODO: UI Notification Service