78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
|
|
/**
|
||
|
|
*
|
||
|
|
* @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;
|
||
|
|
}
|