import { api } from 'dicomweb-client'; import DICOMWeb from '../../../DICOMWeb/'; import { createStudyFromSOPInstanceList } from './studyInstanceHelpers'; import RetrieveMetadataLoader from './retrieveMetadataLoader'; /** * Class for sync load of study metadata. * It inherits from RetrieveMetadataLoader * * A list of loaders (getLoaders) can be created so, it will be applied a fallback load strategy. * I.e Retrieve metadata using all loaders possibilities. */ export default class RetrieveMetadataLoaderSync extends RetrieveMetadataLoader { getOptions() { const { studyInstanceUID, filters } = this; const options = { studyInstanceUID, }; const { seriesInstanceUID } = filters; if (seriesInstanceUID) { options['seriesInstanceUID'] = seriesInstanceUID; } return options; } /** * @returns {Array} Array of loaders. To be consumed as queue */ *getLoaders() { const loaders = []; const { studyInstanceUID, filters: { seriesInstanceUID } = {}, client, } = this; if (seriesInstanceUID) { loaders.push( client.retrieveSeriesMetadata.bind(client, { studyInstanceUID, seriesInstanceUID, }) ); } loaders.push( client.retrieveStudyMetadata.bind(client, { studyInstanceUID }) ); yield* loaders; } async load(preLoadData) { const loaders = this.getLoaders(); const result = this.runLoaders(loaders); return result; } async posLoad(loadData) { const { server } = this; return createStudyFromSOPInstanceList(server, loadData); } }