ohif-viewer/platform/core/src/utils/createStudyBrowserTabs.ts

78 lines
2.3 KiB
TypeScript
Raw Normal View History

/**
*
* @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
* @param {number} recentTimeframe - The number of milliseconds to consider a study recent
* @returns tabs - The prop object expected by the StudyBrowser component
*/
export function createStudyBrowserTabs(primaryStudyInstanceUIDs, studyDisplayList, displaySets, recentTimeframeMS = 31536000000) {
const primaryStudies = [];
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);
}
allStudies.push(tabStudy);
});
const primaryStudiesTimestamps = primaryStudies
.filter(study => study.date)
.map(study => new Date(study.date).getTime());
const recentStudies =
primaryStudiesTimestamps.length > 0
? allStudies.filter(study => {
const oldestPrimaryTimeStamp = Math.min(...primaryStudiesTimestamps);
if (!study.date) {
return false;
}
const studyTimeStamp = new Date(study.date).getTime();
console.log(oldestPrimaryTimeStamp, studyTimeStamp, recentTimeframeMS)
return oldestPrimaryTimeStamp - studyTimeStamp < recentTimeframeMS;
})
: [];
// 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;
}