All files / platform/core/src/utils createStudyBrowserTabs.ts

94.11% Statements 32/34
80% Branches 4/5
90.9% Functions 10/11
94.11% Lines 32/34

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;
}