Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | 3500x 3500x 3500x 3500x 3500x 3496x 27304x 3496x 3496x 72596x 72596x 72596x 3496x 3496x 2907x 3496x 3500x 2907x 2881x 3500x 3470x 3470x 3470x 3470x 3500x 1178x 1178x 1178x 3500x 589x 589x 3500x | import { useSystem } from '../contextProviders/SystemProvider';
import i18n from 'i18next';
/**
* Tab properties that drive which tab group is used for thumbnail display.
*/
export type TabProp = {
name: string;
label: string;
studies: any[];
};
/**
* Collection of tab properties with studies presorted depending on tab mod.
* This is used in deciding what thumbnails to show.
*/
export type TabsProps = TabProp[];
/**
*
* @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 {TabsProps} tabs - The prop object expected by the StudyBrowser component
*/
export function createStudyBrowserTabs(
primaryStudyInstanceUIDs,
studyDisplayList,
displaySets,
recentTimeframeMS = 31536000000
): TabsProps {
const { servicesManager } = useSystem();
const { displaySetService, customizationService } = servicesManager.services;
const primaryStudies = [];
const allStudies = [];
studyDisplayList.forEach(study => {
const displaySetsForStudy = displaySets.filter(
ds => ds.StudyInstanceUID === study.studyInstanceUid
);
const sortCriteria = customizationService.getCustomization('sortingCriteria');
const sortedDisplaySets = displaySetsForStudy.sort((a, b) => {
const displaySetA = displaySetService.getDisplaySetByUID(a.displaySetInstanceUID);
const displaySetB = displaySetService.getDisplaySetByUID(b.displaySetInstanceUID);
return sortCriteria(displaySetA, displaySetB);
});
// return displaySetA.SeriesInstanceUID.localeCompare(displaySetB.SeriesInstanceUID);
const tabStudy = Object.assign({}, study, {
displaySets: sortedDisplaySets,
});
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);
Iif (!study.date) {
return false;
}
const studyTimeStamp = new Date(study.date).getTime();
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: i18n.t('StudyBrowser:Primary'),
studies: primaryStudies.sort((studyA, studyB) => _byDate(studyA.date, studyB.date)),
},
{
name: 'recent',
label: i18n.t('StudyBrowser:Recent'),
studies: recentStudies.sort((studyA, studyB) => _byDate(studyA.date, studyB.date)),
},
{
name: 'all',
label: i18n.t('StudyBrowser:All'),
studies: allStudies.sort((studyA, studyB) => _byDate(studyA.date, studyB.date)),
},
];
return tabs;
}
|