fix(studybrowser): Differentiate recent and all in study panel based on a provided time period (#4242)
Co-authored-by: Salim Kanoun <salim.kanoun@gmail.com>
This commit is contained in:
1 parent
e462fd31f7
commit
6f93449149
5 files changed
+91
-158
No files matched your search
@@ -4,7 +4,7 @@ import { StudyBrowser, useImageViewer, useViewportGrid } from '@ohif/ui';
|
||||
import { utils } from '@ohif/core';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
|
||||
const { sortStudyInstances, formatDate } = utils;
|
||||
const { sortStudyInstances, formatDate, createStudyBrowserTabs } = utils;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -206,7 +206,7 @@ function PanelStudyBrowser({
|
||||
};
|
||||
}, [StudyInstanceUIDs, thumbnailImageSrcMap, displaySetService]);
|
||||
|
||||
const tabs = _createStudyBrowserTabs(StudyInstanceUIDs, studyDisplayList, displaySets);
|
||||
const tabs = createStudyBrowserTabs(StudyInstanceUIDs, studyDisplayList, displaySets);
|
||||
|
||||
// TODO: Should not fire this on "close"
|
||||
function _handleStudyClick(StudyInstanceUID) {
|
||||
@@ -324,58 +324,3 @@ function _getComponentType(ds) {
|
||||
|
||||
return 'thumbnail';
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {string[]} primaryStudyInstanceUIDs
|
||||
* @param {object[]} studyDisplayList
|
||||
* @param {string} studyDisplayList.studyInstanceUid
|
||||
* @param {string} studyDisplayList.date
|
||||
* @param {string} studyDisplayList.description
|
||||
* @param {string} studyDisplayList.modalities
|
||||
* @param {number} studyDisplayList.numInstances
|
||||
* @param {object[]} displaySets
|
||||
* @returns tabs - The prop object expected by the StudyBrowser component
|
||||
*/
|
||||
function _createStudyBrowserTabs(primaryStudyInstanceUIDs, studyDisplayList, displaySets) {
|
||||
const primaryStudies = [];
|
||||
const recentStudies = [];
|
||||
const allStudies = [];
|
||||
|
||||
studyDisplayList.forEach(study => {
|
||||
const displaySetsForStudy = displaySets.filter(
|
||||
ds => ds.StudyInstanceUID === study.studyInstanceUid
|
||||
);
|
||||
const tabStudy = Object.assign({}, study, {
|
||||
displaySets: displaySetsForStudy,
|
||||
});
|
||||
|
||||
if (primaryStudyInstanceUIDs.includes(study.studyInstanceUid)) {
|
||||
primaryStudies.push(tabStudy);
|
||||
} else {
|
||||
// TODO: Filter allStudies to dates within one year of current date
|
||||
recentStudies.push(tabStudy);
|
||||
allStudies.push(tabStudy);
|
||||
}
|
||||
});
|
||||
|
||||
const tabs = [
|
||||
{
|
||||
name: 'primary',
|
||||
label: 'Primary',
|
||||
studies: primaryStudies,
|
||||
},
|
||||
{
|
||||
name: 'recent',
|
||||
label: 'Recent',
|
||||
studies: recentStudies,
|
||||
},
|
||||
{
|
||||
name: 'all',
|
||||
label: 'All',
|
||||
studies: allStudies,
|
||||
},
|
||||
];
|
||||
|
||||
return tabs;
|
||||
}
|
||||
+2
-94
@@ -6,7 +6,7 @@ import { utils } from '@ohif/core';
|
||||
import { StudyBrowser, useImageViewer, useViewportGrid, Dialog, ButtonEnums } from '@ohif/ui';
|
||||
import { useTrackedMeasurements } from '../../getContextModule';
|
||||
|
||||
const { formatDate } = utils;
|
||||
const { formatDate, createStudyBrowserTabs } = utils;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -272,11 +272,10 @@ function PanelStudyBrowserTracking({
|
||||
};
|
||||
}, [thumbnailImageSrcMap, trackedSeries, viewports, dataSource, displaySetService]);
|
||||
|
||||
const tabs = _createStudyBrowserTabs(
|
||||
const tabs = createStudyBrowserTabs(
|
||||
StudyInstanceUIDs,
|
||||
studyDisplayList,
|
||||
displaySets,
|
||||
hangingProtocolService
|
||||
);
|
||||
|
||||
// TODO: Should not fire this on "close"
|
||||
@@ -590,97 +589,6 @@ function _getComponentType(ds) {
|
||||
return 'thumbnailTracked';
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {string[]} primaryStudyInstanceUIDs
|
||||
* @param {object[]} studyDisplayList
|
||||
* @param {string} studyDisplayList.studyInstanceUid
|
||||
* @param {string} studyDisplayList.date
|
||||
* @param {string} studyDisplayList.description
|
||||
* @param {string} studyDisplayList.modalities
|
||||
* @param {number} studyDisplayList.numInstances
|
||||
* @param {object[]} displaySets
|
||||
* @returns tabs - The prop object expected by the StudyBrowser component
|
||||
*/
|
||||
function _createStudyBrowserTabs(
|
||||
primaryStudyInstanceUIDs,
|
||||
studyDisplayList,
|
||||
displaySets,
|
||||
hangingProtocolService
|
||||
) {
|
||||
const primaryStudies = [];
|
||||
const recentStudies = [];
|
||||
const allStudies = [];
|
||||
|
||||
// Iterate over each study...
|
||||
studyDisplayList.forEach(study => {
|
||||
// Find it's display sets
|
||||
const displaySetsForStudy = displaySets.filter(
|
||||
ds => ds.StudyInstanceUID === study.studyInstanceUid
|
||||
);
|
||||
|
||||
// Sort them
|
||||
const dsSortFn = hangingProtocolService.getDisplaySetSortFunction();
|
||||
displaySetsForStudy.sort(dsSortFn);
|
||||
|
||||
/* Sort by series number, then by series date
|
||||
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;
|
||||
});
|
||||
*/
|
||||
|
||||
// Map the study to it's tab/view representation
|
||||
const tabStudy = Object.assign({}, study, {
|
||||
displaySets: displaySetsForStudy,
|
||||
});
|
||||
|
||||
// Add the "tab study" to the 'primary', 'recent', and/or 'all' tab group(s)
|
||||
if (primaryStudyInstanceUIDs.includes(study.studyInstanceUid)) {
|
||||
primaryStudies.push(tabStudy);
|
||||
allStudies.push(tabStudy);
|
||||
} else {
|
||||
// TODO: Filter allStudies to dates within one year of current date
|
||||
recentStudies.push(tabStudy);
|
||||
allStudies.push(tabStudy);
|
||||
}
|
||||
});
|
||||
|
||||
// Newest first
|
||||
const _byDate = (a, b) => {
|
||||
const dateA = Date.parse(a);
|
||||
const dateB = Date.parse(b);
|
||||
|
||||
return dateB - dateA;
|
||||
};
|
||||
|
||||
const tabs = [
|
||||
{
|
||||
name: 'primary',
|
||||
label: 'Primary',
|
||||
studies: primaryStudies.sort((studyA, studyB) => _byDate(studyA.date, studyB.date)),
|
||||
},
|
||||
{
|
||||
name: 'recent',
|
||||
label: 'Recent',
|
||||
studies: recentStudies.sort((studyA, studyB) => _byDate(studyA.date, studyB.date)),
|
||||
},
|
||||
{
|
||||
name: 'all',
|
||||
label: 'All',
|
||||
studies: allStudies.sort((studyA, studyB) => _byDate(studyA.date, studyB.date)),
|
||||
},
|
||||
];
|
||||
|
||||
return tabs;
|
||||
}
|
||||
|
||||
function _findTabAndStudyOfDisplaySet(displaySetInstanceUID, tabs) {
|
||||
for (let t = 0; t < tabs.length; t++) {
|
||||
const { studies } = tabs[t];
|
||||
|
||||
Reference in new issue
Block a user