OHIF-149: Apply default sort of Study Date descending (most recent -> oldest) when < 101 studies (#1850)

* Add dynamic default sorting

* Use different approach to sort

* Switch strategy to one that works even when filters are applied, but sort is not (there is no dicomweb sort/orderby)

Co-authored-by: dannyrb <danny.ri.brown@gmail.com>
This commit is contained in:
Igor Octaviano 2020-07-02 23:23:42 -03:00 committed by GitHub
parent 491afaa43d
commit 920c3e9455
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 41 deletions

View File

@ -101,17 +101,18 @@ export function processSeriesResults(qidoSeries) {
* @param {string} [queryParamaters] * @param {string} [queryParamaters]
* @returns {Promise<results>} - Promise that resolves results * @returns {Promise<results>} - Promise that resolves results
*/ */
function search( async function search(
dicomWebClient, dicomWebClient,
studyInstanceUid, studyInstanceUid,
seriesInstanceUid, seriesInstanceUid,
queryParameters queryParameters
) { ) {
// Studies let searchResult = await dicomWebClient.searchForStudies({
return dicomWebClient.searchForStudies({
studyInstanceUid: undefined, studyInstanceUid: undefined,
queryParams: queryParameters, queryParams: queryParameters,
}); });
return searchResult;
} }
/** /**

View File

@ -100,9 +100,7 @@ function _getQueryFilterValues(query) {
patientId: query.get('mrn'), patientId: query.get('mrn'),
patientName: query.get('patientName'), patientName: query.get('patientName'),
studyDescription: query.get('description'), studyDescription: query.get('description'),
modalitiesInStudy: query.get('modalities') modalitiesInStudy: query.get('modalities') && query.get('modalities').split(','),
? query.get('modalities').split(',')
: [],
accessionNumber: query.get('accession'), accessionNumber: query.get('accession'),
// //
startDate: query.get('startDate'), startDate: query.get('startDate'),

View File

@ -48,7 +48,12 @@ function WorkList({ history, data: studies, isLoadingData, dataSource }) {
.sort((s1, s2) => { .sort((s1, s2) => {
const noSortApplied = sortBy === '' || !sortBy; const noSortApplied = sortBy === '' || !sortBy;
const sortModifier = sortDirection === 'descending' ? 1 : -1; const sortModifier = sortDirection === 'descending' ? 1 : -1;
if (noSortApplied) {
if (noSortApplied && studies.length < 101) {
const ascendingSortModifier = -1;
return _sortStringDates(s1, s2, ascendingSortModifier);
} else if (noSortApplied) {
return 0; return 0;
} }
@ -64,20 +69,7 @@ function WorkList({ history, data: studies, isLoadingData, dataSource }) {
} else if (!s2Prop && s1Prop) { } else if (!s2Prop && s1Prop) {
return 1 * sortModifier; return 1 * sortModifier;
} else if (sortBy === 'studyDate') { } else if (sortBy === 'studyDate') {
// TODO: Delimiters are non-standard. Should we support them? return _sortStringDates(s1, s2, sortModifier);
const s1Date = moment(s1.date, ['YYYYMMDD', 'YYYY.MM.DD'], true);
const s2Date = moment(s2.date, ['YYYYMMDD', 'YYYY.MM.DD'], true);
if (s1Date.isValid() && s2Date.isValid()) {
return (
(s1Date.toISOString() > s2Date.toISOString() ? 1 : -1) *
sortModifier
);
} else if (s1Date.isValid()) {
return sortModifier;
} else if (s2Date.isValid()) {
return -1 * sortModifier;
}
} }
return 0; return 0;
@ -176,13 +168,12 @@ function WorkList({ history, data: studies, isLoadingData, dataSource }) {
// Note: expanded rows index begins at 1 // Note: expanded rows index begins at 1
for (let z = 0; z < expandedRows.length; z++) { for (let z = 0; z < expandedRows.length; z++) {
const expandedRowIndex = expandedRows[z] - 1; const expandedRowIndex = expandedRows[z] - 1;
console.log(sortedStudies[expandedRowIndex]);
const studyInstanceUid = sortedStudies[expandedRowIndex].studyInstanceUid; const studyInstanceUid = sortedStudies[expandedRowIndex].studyInstanceUid;
if (studiesWithSeriesData.includes(studyInstanceUid)) { if (studiesWithSeriesData.includes(studyInstanceUid)) {
continue; continue;
} }
console.log(`fetching for ${expandedRowIndex}`);
fetchSeries(studyInstanceUid); fetchSeries(studyInstanceUid);
} }
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
@ -470,4 +461,20 @@ function _getQueryFilterValues(query) {
} }
} }
function _sortStringDates(s1, s2, sortModifier) {
// TODO: Delimiters are non-standard. Should we support them?
const s1Date = moment(s1.date, ['YYYYMMDD', 'YYYY.MM.DD'], true);
const s2Date = moment(s2.date, ['YYYYMMDD', 'YYYY.MM.DD'], true);
if (s1Date.isValid() && s2Date.isValid()) {
return (
(s1Date.toISOString() > s2Date.toISOString() ? 1 : -1) * sortModifier
);
} else if (s1Date.isValid()) {
return sortModifier;
} else if (s2Date.isValid()) {
return -1 * sortModifier;
}
}
export default WorkList; export default WorkList;

View File

@ -26,31 +26,22 @@ const createRoutes = ({
dataSources, dataSources,
extensionManager, extensionManager,
servicesManager, servicesManager,
hotkeysManager hotkeysManager,
}) => { }) => {
const routes = buildModeRoutes({ const routes =
modes, buildModeRoutes({
dataSources, modes,
extensionManager, dataSources,
servicesManager, extensionManager,
hotkeysManager servicesManager,
}) || []; hotkeysManager,
}) || [];
const allRoutes = [...routes, ...bakedInRoutes]; const allRoutes = [...routes, ...bakedInRoutes];
console.log(
'Creating Routes:',
modes,
dataSources,
routes,
bakedInRoutes,
allRoutes
);
return ( return (
<Switch> <Switch>
{allRoutes.map((route, i) => { {allRoutes.map((route, i) => {
console.log(route);
return ( return (
<Route <Route
key={i} key={i}