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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | 34x 34x 68x 68x 68x 68x 68x 34x 34x 34x 133x 133x 133x 133x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 133x 34x 34x 34x 34x 34x 34x | import getStudies from './studiesList'; import { DicomMetadataStore, log, utils, Enums } from '@ohif/core'; import isSeriesFilterUsed from '../../utils/isSeriesFilterUsed'; const { getSplitParam } = utils; /** * Initialize the route. * * @param props.servicesManager to read services from * @param props.studyInstanceUIDs for a list of studies to read * @param props.dataSource to read the data from * @param props.filters filters from query params to read the data from * @returns array of subscriptions to cancel */ export async function defaultRouteInit( { servicesManager, studyInstanceUIDs, dataSource, filters, appConfig }: withAppTypes, hangingProtocolId, stageIndex ) { const { displaySetService, hangingProtocolService, uiNotificationService, customizationService } = servicesManager.services; /** * Function to apply the hanging protocol when the minimum number of display sets were * received or all display sets retrieval were completed * @returns */ function applyHangingProtocol() { const displaySets = displaySetService.getActiveDisplaySets(); Iif (!displaySets || !displaySets.length) { return; } // Gets the studies list to use const studies = getStudies(studyInstanceUIDs, displaySets); // study being displayed, and is thus the "active" study. const activeStudy = studies[0]; // run the hanging protocol matching on the displaySets with the predefined // hanging protocol in the mode configuration hangingProtocolService.run({ studies, activeStudy, displaySets }, hangingProtocolId, { stageIndex, }); } const unsubscriptions = []; const issuedWarningSeries = []; const { unsubscribe: instanceAddedUnsubscribe } = DicomMetadataStore.subscribe( DicomMetadataStore.EVENTS.INSTANCES_ADDED, function ({ StudyInstanceUID, SeriesInstanceUID, madeInClient = false }) { const seriesMetadata = DicomMetadataStore.getSeries(StudyInstanceUID, SeriesInstanceUID); // checks if the series filter was used, if it exists const seriesInstanceUIDs = filters?.seriesInstanceUID; Iif ( seriesInstanceUIDs?.length && !isSeriesFilterUsed(seriesMetadata.instances, filters) && !issuedWarningSeries.includes(seriesInstanceUIDs[0]) ) { // stores the series instance filter so it shows only once the warning issuedWarningSeries.push(seriesInstanceUIDs[0]); uiNotificationService.show({ title: 'Series filter', message: `Each of the series in filter: ${seriesInstanceUIDs} are not part of the current study. The entire study is being displayed`, type: 'error', duration: 7000, }); } displaySetService.makeDisplaySets(seriesMetadata.instances, { madeInClient }); } ); unsubscriptions.push(instanceAddedUnsubscribe); log.time(Enums.TimingEnum.STUDY_TO_DISPLAY_SETS); log.time(Enums.TimingEnum.STUDY_TO_FIRST_IMAGE); const allRetrieves = studyInstanceUIDs.map(StudyInstanceUID => dataSource.retrieve.series.metadata({ StudyInstanceUID, filters, returnPromises: true, sortCriteria: customizationService.getCustomization('sortingCriteria'), }) ); // log the error if this fails, otherwise it's so difficult to tell what went wrong... allRetrieves.forEach(retrieve => { retrieve.catch(error => { console.error(error); }); }); // is displaysets from URL and has initialSOPInstanceUID or initialSeriesInstanceUID // then we need to wait for all display sets to be retrieved before applying the hanging protocol const params = new URLSearchParams(window.location.search); const initialSeriesInstanceUID = getSplitParam('initialseriesinstanceuid', params); const initialSOPInstanceUID = getSplitParam('initialsopinstanceuid', params); let displaySetFromUrl = false; Iif (initialSeriesInstanceUID || initialSOPInstanceUID) { displaySetFromUrl = true; } await Promise.allSettled(allRetrieves).then(async promises => { log.timeEnd(Enums.TimingEnum.STUDY_TO_DISPLAY_SETS); log.time(Enums.TimingEnum.DISPLAY_SETS_TO_FIRST_IMAGE); log.time(Enums.TimingEnum.DISPLAY_SETS_TO_ALL_IMAGES); const allPromises = []; const remainingPromises = []; function startRemainingPromises(remainingPromises) { remainingPromises.forEach(p => p.forEach(p => p.start())); } promises.forEach(promise => { const retrieveSeriesMetadataPromise = promise.value; Iif (!Array.isArray(retrieveSeriesMetadataPromise)) { return; } Iif (displaySetFromUrl) { const requiredSeriesPromises = retrieveSeriesMetadataPromise.map(promise => promise.start() ); allPromises.push(Promise.allSettled(requiredSeriesPromises)); } else { const { requiredSeries, remaining } = hangingProtocolService.filterSeriesRequiredForRun( hangingProtocolId, retrieveSeriesMetadataPromise ); const requiredSeriesPromises = requiredSeries.map(promise => promise.start()); allPromises.push(Promise.allSettled(requiredSeriesPromises)); remainingPromises.push(remaining); } }); await Promise.allSettled(allPromises).then(applyHangingProtocol); startRemainingPromises(remainingPromises); applyHangingProtocol(); }); return unsubscriptions; } |