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 115 116 117 118 119 120 | 34x 34x 125x 125x 125x 125x 177x 177x 177x 19x 158x 33x 125x 34x 34x 34x 34x 34x 34x 34x 1x | import isLowPriorityModality from './isLowPriorityModality'; const compareSeriesDateTime = (a, b) => { const seriesDateA = Date.parse(`${a.seriesDate ?? a.SeriesDate} ${a.seriesTime ?? a.SeriesTime}`); const seriesDateB = Date.parse(`${b.seriesDate ?? b.SeriesDate} ${b.seriesTime ?? b.SeriesTime}`); return seriesDateA - seriesDateB; }; const defaultSeriesSort = (a, b) => { const seriesNumberA = a.SeriesNumber ?? a.seriesNumber; const seriesNumberB = b.SeriesNumber ?? b.seriesNumber; Iif (seriesNumberA === seriesNumberB) { return compareSeriesDateTime(a, b); } return seriesNumberA - seriesNumberB; }; /** * Series sorting criteria: series considered low priority are moved to the end * of the list and series number is used to break ties * @param {Object} firstSeries * @param {Object} secondSeries */ function seriesInfoSortingCriteria(firstSeries, secondSeries) { const aLowPriority = isLowPriorityModality(firstSeries.Modality ?? firstSeries.modality); const bLowPriority = isLowPriorityModality(secondSeries.Modality ?? secondSeries.modality); if (aLowPriority) { // Use the reverse sort order for low priority modalities so that the // most recent one comes up first as usually that is the one of interest. return bLowPriority ? defaultSeriesSort(secondSeries, firstSeries) : 1; } else if (bLowPriority) { return -1; } return defaultSeriesSort(firstSeries, secondSeries); } const seriesSortCriteria = { default: seriesInfoSortingCriteria, seriesInfoSortingCriteria, }; const instancesSortCriteria = { default: (a, b) => parseInt(a.InstanceNumber) - parseInt(b.InstanceNumber), }; const sortingCriteria = { seriesSortCriteria, instancesSortCriteria, }; /** * Sorts given series (given param is modified) * The default criteria is based on series number in ascending order. * * @param {Array} series List of series * @param {function} seriesSortingCriteria method for sorting * @returns {Array} sorted series object */ const sortStudySeries = ( series, seriesSortingCriteria = seriesSortCriteria.default, sortFunction = null ) => { Iif (typeof sortFunction === 'function') { return sortFunction(series); } else { return series.sort(seriesSortingCriteria); } }; /** * Sorts given instancesList (given param is modified) * The default criteria is based on instance number in ascending order. * * @param {Array} instancesList List of series * @param {function} instancesSortingCriteria method for sorting * @returns {Array} sorted instancesList object */ const sortStudyInstances = ( instancesList, instancesSortingCriteria = instancesSortCriteria.default ) => { return instancesList.sort(instancesSortingCriteria); }; /** * Sorts the series and instances (by default) inside a study instance based on sortingCriteria (given param is modified) * The default criteria is based on series and instance numbers in ascending order. * * @param {Object} study The study instance * @param {boolean} [deepSort = true] to sort instance also * @param {function} [seriesSortingCriteria = seriesSortCriteria.default] method for sorting series * @param {function} [instancesSortingCriteria = instancesSortCriteria.default] method for sorting instances * @returns {Object} sorted study object */ export default function sortStudy( study, deepSort = true, seriesSortingCriteria = seriesSortCriteria.default, instancesSortingCriteria = instancesSortCriteria.default ) { Iif (!study || !study.series) { throw new Error('Insufficient study data was provided to sortStudy'); } sortStudySeries(study.series, seriesSortingCriteria); Iif (deepSort) { study.series.forEach(series => { sortStudyInstances(series.instances, instancesSortingCriteria); }); } return study; } export { sortStudy, sortStudySeries, sortStudyInstances, sortingCriteria, seriesSortCriteria }; |