Skip to content

Commit 3cd48ed

Browse files
feat: Update dicom tag browser to display label and overview images + bulkdata references (#336)
* Render bulkdata references * Lint * Update dicom tag browser to process overview and label images
1 parent 25bc28d commit 3cd48ed

2 files changed

Lines changed: 65 additions & 28 deletions

File tree

src/components/DicomTagBrowser/DicomTagBrowser.tsx

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ interface DisplaySet {
1818
SeriesTime?: string
1919
SeriesNumber: string
2020
SeriesDescription?: string
21+
SeriesInstanceUID?: string
2122
Modality: string
2223
images: any[]
2324
}
@@ -83,35 +84,51 @@ const DicomTagBrowser = ({ clients, studyInstanceUID }: DicomTagBrowserProps): J
8384

8485
if (slides.length > 0) {
8586
displaySets = slides
86-
.map((slide): DisplaySet | null => {
87-
const { volumeImages } = slide
88-
if (volumeImages?.[0] === undefined) return null
89-
90-
const {
91-
SeriesDate,
92-
SeriesTime,
93-
SeriesNumber,
94-
SeriesInstanceUID,
95-
SeriesDescription,
96-
Modality
97-
} = volumeImages[0]
87+
.map((slide): DisplaySet[] => {
88+
const slideDisplaySets: DisplaySet[] = []
89+
90+
// Helper function to process any image type
91+
const processImageType = (
92+
images: any[] | undefined,
93+
imageType: string
94+
): void => {
95+
if (images?.[0] !== undefined) {
96+
console.info(`Found ${images.length} ${imageType} image(s) for slide ${slide.containerIdentifier}`)
97+
98+
const {
99+
SeriesDate,
100+
SeriesTime,
101+
SeriesNumber,
102+
SeriesInstanceUID,
103+
SeriesDescription,
104+
Modality
105+
} = images[0]
106+
107+
processedSeries.push(SeriesInstanceUID)
108+
109+
const ds: DisplaySet = {
110+
displaySetInstanceUID: index,
111+
SeriesDate,
112+
SeriesTime,
113+
SeriesInstanceUID,
114+
SeriesNumber: String(SeriesNumber),
115+
SeriesDescription,
116+
Modality,
117+
images
118+
}
119+
slideDisplaySets.push(ds)
120+
index++
121+
}
122+
}
98123

99-
processedSeries.push(SeriesInstanceUID)
124+
// Process all image types
125+
processImageType(slide.volumeImages, 'volume')
126+
processImageType(slide.overviewImages, 'overview')
127+
processImageType(slide.labelImages, 'label')
100128

101-
const ds: DisplaySet = {
102-
displaySetInstanceUID: index,
103-
SeriesDate,
104-
SeriesTime,
105-
SeriesInstanceUID,
106-
// @ts-expect-error
107-
SeriesNumber,
108-
SeriesDescription,
109-
Modality,
110-
images: volumeImages
111-
}
112-
index++
113-
return ds
129+
return slideDisplaySets
114130
})
131+
.flat()
115132
.filter((set): set is DisplaySet => set !== null && set !== undefined)
116133
}
117134

@@ -122,8 +139,7 @@ const DicomTagBrowser = ({ clients, studyInstanceUID }: DicomTagBrowserProps): J
122139
displaySetInstanceUID: index,
123140
SeriesDate: series.SeriesDate,
124141
SeriesTime: series.SeriesTime,
125-
// @ts-expect-error
126-
SeriesNumber: series.SeriesNumber,
142+
SeriesNumber: String(series.SeriesNumber),
127143
SeriesDescription: series.SeriesDescription,
128144
SeriesInstanceUID: series.SeriesInstanceUID,
129145
Modality: series.Modality,

src/components/DicomTagBrowser/dicomTagUtils.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,5 +118,26 @@ export function getRows (metadata: Record<string, any>, depth = 0): TagInfo[] {
118118
*/
119119
export function getSortedTags (metadata: Record<string, any>): TagInfo[] {
120120
const tagList = getRows(metadata)
121+
122+
// Add bulkdataReferences as a special tag if it exists
123+
if (metadata.bulkdataReferences !== undefined && metadata.bulkdataReferences !== null) {
124+
const bulkdataRefs = metadata.bulkdataReferences
125+
const bulkdataTag: TagInfo = {
126+
tag: 'bulkdataReferences',
127+
vr: 'OB',
128+
keyword: 'bulkdataReferences',
129+
value: `Object with ${Object.keys(bulkdataRefs).length} bulk data reference(s)`,
130+
level: 0,
131+
children: Object.keys(bulkdataRefs).map(key => ({
132+
tag: `bulkdataReferences.${key}`,
133+
vr: 'OB',
134+
keyword: key,
135+
value: JSON.stringify(bulkdataRefs[key]),
136+
level: 1
137+
}))
138+
}
139+
tagList.push(bulkdataTag)
140+
}
141+
121142
return tagList.sort((a, b) => a.tag.localeCompare(b.tag))
122143
}

0 commit comments

Comments
 (0)