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:
parent
3267706b33
commit
e04f74499f
@ -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 });
|
||||||
|
|||||||
@ -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,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
16
platform/core/src/utils/sortBySeriesDate.js
Normal file
16
platform/core/src/utils/sortBySeriesDate.js
Normal 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;
|
||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user