All files / extensions/default/src/DicomWebDataSource/utils retrieveMetadataFiltered.js

0% Statements 0/14
0% Branches 0/2
0% Functions 0/6
0% Lines 0/14

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                                                                                                                           
import RetrieveMetadata from '../wado/retrieveMetadata';
 
/**
 * Retrieve metadata filtered.
 *
 * @param {*} dicomWebClient The DICOMWebClient instance to be used for series load
 * @param {*} StudyInstanceUID The UID of the Study to be retrieved
 * @param {*} 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
 */
function retrieveMetadataFiltered(
  dicomWebClient,
  StudyInstanceUID,
  enableStudyLazyLoad,
  filters,
  sortCriteria,
  sortFunction
) {
  const { seriesInstanceUID } = filters;
 
  return new Promise((resolve, reject) => {
    const promises = seriesInstanceUID.map(uid => {
      const seriesSpecificFilters = Object.assign({}, filters, {
        seriesInstanceUID: uid,
      });
 
      return RetrieveMetadata(
        dicomWebClient,
        StudyInstanceUID,
        enableStudyLazyLoad,
        seriesSpecificFilters,
        sortCriteria,
        sortFunction
      );
    });
 
    if (enableStudyLazyLoad === true) {
      Promise.all(promises).then(results => {
        const aggregatedResult = { preLoadData: [], promises: [] };
 
        results.forEach(({ preLoadData, promises }) => {
          aggregatedResult.preLoadData = aggregatedResult.preLoadData.concat(preLoadData);
          aggregatedResult.promises = aggregatedResult.promises.concat(promises);
        });
 
        resolve(aggregatedResult);
      }, reject);
    } else {
      Promise.all(promises).then(results => {
        resolve(results.flat());
      }, reject);
    }
  });
}
 
export default retrieveMetadataFiltered;