/** * * @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; }