* feat: 🎸 Filter by url query param for seriesInstnaceUID * fix: Set SR viewport as active by interaction (#1118) * fix: Set SR viewport as active by interaction * quick fix * (eslint) add "before" as global variables * add data-cy * add data-cy * create E2E test * (E2E) create custom command to set layout size * remove .only e2e * remove throttle for onScroll * feat: 🎸 Code review in progress Code review. Move retrieveMEtadata load to separate folders. Some minor code clean up * feat: 🎸 Code review. Missing changes from previous commit * feat: 🎸 Code review missing changes from previous commit When sorting, Criteria for instance must use instanceNumber and not instancesNumber * feat: 🎸 Code review. Add more jsdoc info * feat: 🎸 Code review. Prettify changed code * feat: 🎸 Code review Changed case for seriesInstanceUID. Use qido to filter (async). Fallback to no params and same api method(async)
60 lines
2.2 KiB
JavaScript
60 lines
2.2 KiB
JavaScript
import RetrieveMetadata from './services/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} server Object with server configuration parameters
|
|
* @param {string} studyInstanceUid The UID of the Study to be retrieved
|
|
* @param {Object} [filters] - Object containing filters to be applied on retrieve metadata process
|
|
* @param {string} [filter.seriesInstanceUID] - series instance uid to filter results against
|
|
* @returns {Promise} that will be resolved with the metadata or rejected with the error
|
|
*/
|
|
export function retrieveStudyMetadata(server, studyInstanceUid, filters) {
|
|
// @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...
|
|
|
|
if (!server) {
|
|
throw new Error(`${moduleName}: Required 'server' parameter not provided.`);
|
|
}
|
|
if (!studyInstanceUid) {
|
|
throw new Error(
|
|
`${moduleName}: Required 'studyInstanceUid' parameter not provided.`
|
|
);
|
|
}
|
|
|
|
// Already waiting on result? Return cached promise
|
|
if (StudyMetaDataPromises.has(studyInstanceUid)) {
|
|
return StudyMetaDataPromises.get(studyInstanceUid);
|
|
}
|
|
|
|
// Create a promise to handle the data retrieval
|
|
const promise = new Promise((resolve, reject) => {
|
|
RetrieveMetadata(server, studyInstanceUid, filters).then(function(data) {
|
|
resolve(data);
|
|
}, reject);
|
|
});
|
|
|
|
// Store the promise in cache
|
|
StudyMetaDataPromises.set(studyInstanceUid, 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) {
|
|
if (StudyMetaDataPromises.has(studyInstanceUid)) {
|
|
StudyMetaDataPromises.delete(studyInstanceUid);
|
|
}
|
|
}
|