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:
parent
491afaa43d
commit
920c3e9455
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -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'),
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user