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 | 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x | import retrieveMetadataFiltered from './utils/retrieveMetadataFiltered.js'; import RetrieveMetadata from './wado/retrieveMetadata.js'; const moduleName = 'RetrieveStudyMetadata'; // Cache for promises. Prevents unnecessary subsequent calls to the server const StudyMetaDataPromises = new Map(); /** * Retrieves study metadata. * * @param {Object} dicomWebClient The DICOMWebClient instance to be used for series load * @param {string} StudyInstanceUID The UID of the Study to be retrieved * @param {boolean} enableStudyLazyLoad Whether the study metadata should be loaded asynchronously. * @param {Object} [filters] Object containing filters to be applied on retrieve metadata process * @param {string} [filters.seriesInstanceUID] Series instance uid to filter results against * @param {function} [sortCriteria] Sort criteria function * @param {function} [sortFunction] Sort function * * @returns {Promise} that will be resolved with the metadata or rejected with the error */ export function retrieveStudyMetadata( dicomWebClient, StudyInstanceUID, enableStudyLazyLoad, filters, sortCriteria, sortFunction, dicomWebConfig = {} ) { // @TODO: Whenever a study metadata request has failed, its related promise will be rejected once and for all // and further requests for that metadata will always fail. On failure, we probably need to remove the // corresponding promise from the "StudyMetaDataPromises" map... Iif (!dicomWebClient) { throw new Error(`${moduleName}: Required 'dicomWebClient' parameter not provided.`); } Iif (!StudyInstanceUID) { throw new Error(`${moduleName}: Required 'StudyInstanceUID' parameter not provided.`); } const promiseId = `${dicomWebConfig.name}:${StudyInstanceUID}`; // Already waiting on result? Return cached promise Iif (StudyMetaDataPromises.has(promiseId)) { return StudyMetaDataPromises.get(promiseId); } let promise; Iif (filters && filters.seriesInstanceUID && Array.isArray(filters.seriesInstanceUID)) { promise = retrieveMetadataFiltered( dicomWebClient, StudyInstanceUID, enableStudyLazyLoad, filters, sortCriteria, sortFunction ); } else { // Create a promise to handle the data retrieval promise = new Promise((resolve, reject) => { RetrieveMetadata( dicomWebClient, StudyInstanceUID, enableStudyLazyLoad, filters, sortCriteria, sortFunction ).then(function (data) { resolve(data); }, reject); }); } // Store the promise in cache StudyMetaDataPromises.set(promiseId, promise); return promise; } /** * Delete the cached study metadata retrieval promise to ensure that the browser will * re-retrieve the study metadata when it is next requested. * * @param {String} StudyInstanceUID The UID of the Study to be removed from cache */ export function deleteStudyMetadataPromise(StudyInstanceUID) { Iif (StudyMetaDataPromises.has(StudyInstanceUID)) { StudyMetaDataPromises.delete(StudyInstanceUID); } } |