fix: local ModalitiesInStudy check (#5285)

Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
Co-authored-by: Alireza <ar.sedghi@gmail.com>
This commit is contained in:
rodrigobasilio2022 2025-08-25 11:22:40 -03:00 committed by GitHub
parent 722efe9587
commit d2694048a4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 9 deletions

View File

@ -11,6 +11,7 @@ import { isDisplaySetFromUrl, sopInstanceLocation } from './custom-attribute/isD
import numberOfDisplaySetsWithImages from './custom-attribute/numberOfDisplaySetsWithImages';
import seriesDescriptionsFromDisplaySets from './custom-attribute/seriesDescriptionsFromDisplaySets';
import uuidv4 from '../../utils/uuidv4';
import { getUniqueAttributeFromList } from './lib/getUniqueAttributeFromList';
type Protocol = HangingProtocol.Protocol | HangingProtocol.ProtocolGenerator;
@ -77,15 +78,15 @@ export default class HangingProtocolService extends PubSubService {
},
ModalitiesInStudy: {
name: 'Gets the array of the modalities for the series',
callback: metadata =>
metadata.ModalitiesInStudy ??
(metadata.series || []).reduce((prev, curr) => {
const { Modality } = curr;
if (Modality && prev.indexOf(Modality) == -1) {
prev.push(Modality);
}
return prev;
}, []),
callback: metadata => {
if (metadata.ModalitiesInStudy?.length > 0) {
return metadata.ModalitiesInStudy;
}
if (Array.isArray(metadata.series)) {
return getUniqueAttributeFromList(metadata.series, 'Modality');
}
return [];
},
},
isReconstructable: {
name: 'Checks if the display set is reconstructable',

View File

@ -0,0 +1,19 @@
/**
* Returns an array of unique values for the given attribute from a series array.
* If the attribute is not present on the series, attempts to get it from the first instance.
* @param {Array} series - The series array to extract attributes from.
* @param {string} attribute - The attribute name to extract.
* @returns {Array} Array of unique attribute values.
*/
export function getUniqueAttributeFromList(series, attribute) {
return series.reduce((prev, curr) => {
let value = curr[attribute];
if (!value && curr.instances && curr.instances[0]) {
value = curr.instances[0][attribute];
}
if (value && prev.indexOf(value) === -1) {
prev.push(value);
}
return prev;
}, []);
}