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

91.66% Statements 33/36
71.42% Branches 5/7
90.9% Functions 10/11
91.66% Lines 33/36

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                                            752x 752x   752x 752x 752x   752x 888x 3244x         888x 888x 2854x 2854x   2854x           888x       888x 650x   888x     752x 650x 650x     752x   888x   888x     888x 888x         752x 476x 476x   476x     752x                 238x         238x       752x    
import { useSystem } from '../contextProviders/SystemProvider';
 
/**
 *
 * @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 { servicesManager } = useSystem();
  const { displaySetService } = servicesManager.services;
 
  const shouldSortBySeriesUID = process.env.TEST_ENV === 'true';
  const primaryStudies = [];
  const allStudies = [];
 
  studyDisplayList.forEach(study => {
    const displaySetsForStudy = displaySets.filter(
      ds => ds.StudyInstanceUID === study.studyInstanceUid
    );
 
    // sort them by seriesInstanceUID
    let sortedDisplaySets;
    if (shouldSortBySeriesUID) {
      sortedDisplaySets = displaySetsForStudy.sort((a, b) => {
        const displaySetA = displaySetService.getDisplaySetByUID(a.displaySetInstanceUID);
        const displaySetB = displaySetService.getDisplaySetByUID(b.displaySetInstanceUID);
 
        return displaySetA.SeriesInstanceUID.localeCompare(displaySetB.SeriesInstanceUID);
      });
    } else E{
      sortedDisplaySets = displaySetsForStudy;
    }
 
    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: '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;
}