diff --git a/extensions/dicom-tag-browser/src/components/DicomBrowserSelect.js b/extensions/dicom-tag-browser/src/components/DicomBrowserSelect.js
index f8d62f878..35e19bd55 100644
--- a/extensions/dicom-tag-browser/src/components/DicomBrowserSelect.js
+++ b/extensions/dicom-tag-browser/src/components/DicomBrowserSelect.js
@@ -39,6 +39,7 @@ const dicomBrowserSelectStyles = {
}),
option: (base, state) => ({
...base,
+ width: '100%',
cursor: 'pointer',
'&:first-of-type': {
borderTopLeftRadius: 5,
diff --git a/extensions/dicom-tag-browser/src/components/DicomBrowserSelectItem.css b/extensions/dicom-tag-browser/src/components/DicomBrowserSelectItem.css
index bc65eee35..b2977ac54 100644
--- a/extensions/dicom-tag-browser/src/components/DicomBrowserSelectItem.css
+++ b/extensions/dicom-tag-browser/src/components/DicomBrowserSelectItem.css
@@ -2,6 +2,7 @@
display: flex;
justify-content: start;
margin: 0;
+ width: 100%;
}
.dcmseg-segmentation-item .segmentation-meta {
diff --git a/extensions/dicom-tag-browser/src/components/DicomTagBrowser.css b/extensions/dicom-tag-browser/src/components/DicomTagBrowser.css
index 3b336a1dc..ea2341b0a 100644
--- a/extensions/dicom-tag-browser/src/components/DicomTagBrowser.css
+++ b/extensions/dicom-tag-browser/src/components/DicomTagBrowser.css
@@ -3,7 +3,7 @@
margin-left: auto;
}
-.dicom-tag-browser-table td {
+.dicom-tag-browser-table tr {
padding-left: 10px;
padding-right: 10px;
color: var(--table-text-primary-color);
diff --git a/extensions/dicom-tag-browser/src/components/DicomTagBrowser.js b/extensions/dicom-tag-browser/src/components/DicomTagBrowser.js
index dae111451..19455c984 100644
--- a/extensions/dicom-tag-browser/src/components/DicomTagBrowser.js
+++ b/extensions/dicom-tag-browser/src/components/DicomTagBrowser.js
@@ -1,4 +1,4 @@
-import React, { useState } from 'react';
+import React, { useState, useEffect } from 'react';
import { classes } from '@ohif/core';
import dcmjs from 'dcmjs';
import DicomBrowserSelect from './DicomBrowserSelect';
@@ -16,73 +16,96 @@ const DicomTagBrowser = ({ displaySets, displaySetInstanceUID }) => {
setActiveDisplaySetInstanceUID,
] = useState(displaySetInstanceUID);
const [activeInstance, setActiveInstance] = useState(0);
+ const [tags, setTags] = useState([]);
+ const [instanceList, setInstanceList] = useState([]);
+ const [displaySetList, setDisplaySetList] = useState([]);
+ const [isImageStack, setIsImageStack] = useState(false);
- const activeDisplaySet = displaySets.find(
- ds => ds.displaySetInstanceUID === activeDisplaySetInstanceUID
- );
+ useEffect(() => {
+ const activeDisplaySet = displaySets.find(
+ ds => ds.displaySetInstanceUID === activeDisplaySetInstanceUID
+ );
- const displaySetList = displaySets.map(displaySet => {
- const {
- displaySetInstanceUID,
- SeriesDate,
- SeriesTime,
- SeriesNumber,
- SeriesDescription,
- Modality,
- } = displaySet;
+ const newDisplaySetList = displaySets.map(displaySet => {
+ const {
+ displaySetInstanceUID,
+ SeriesDate,
+ SeriesTime,
+ SeriesNumber,
+ SeriesDescription,
+ Modality,
+ } = displaySet;
- /* Map to display representation */
- const dateStr = `${SeriesDate}:${SeriesTime}`.split('.')[0];
- const date = moment(dateStr, 'YYYYMMDD:HHmmss');
- const displayDate = date.format('ddd, MMM Do YYYY');
-
- return {
- value: displaySetInstanceUID,
- title: `${SeriesNumber} (${Modality}): ${SeriesDescription}`,
- description: displayDate,
- onClick: () => {
- setActiveDisplaySetInstanceUID(displaySetInstanceUID);
- setActiveInstance(0);
- },
- };
- });
-
- let metadata;
- const isImageStack = activeDisplaySet instanceof ImageSet;
-
- let selectedInstanceValue;
- let instanceList;
-
- if (isImageStack) {
- const { images } = activeDisplaySet;
- const image = images[activeInstance];
-
- instanceList = images.map((image, index) => {
- const metadata = image.getData().metadata;
-
- const { InstanceNumber } = metadata;
+ /* Map to display representation */
+ const dateStr = `${SeriesDate}:${SeriesTime}`.split('.')[0];
+ const date = moment(dateStr, 'YYYYMMDD:HHmmss');
+ const displayDate = date.format('ddd, MMM Do YYYY');
return {
- value: index,
- title: `Instance Number: ${InstanceNumber}`,
- description: '',
+ value: displaySetInstanceUID,
+ title: `${SeriesNumber} (${Modality}): ${SeriesDescription}`,
+ description: displayDate,
onClick: () => {
- setActiveInstance(index);
+ setActiveDisplaySetInstanceUID(displaySetInstanceUID);
+ setActiveInstance(0);
},
};
});
- selectedInstanceValue = instanceList[activeInstance];
+ let metadata;
+ const isImageStack = activeDisplaySet instanceof ImageSet;
- metadata = image.getData().metadata;
- } else {
- metadata = activeDisplaySet.metadata;
- }
+ let selectedInstanceValue;
+ let instanceList;
+
+ if (isImageStack) {
+ const { images } = activeDisplaySet;
+ const image = images[activeInstance];
+
+ instanceList = images.map((image, index) => {
+ const metadata = image.getData().metadata;
+
+ const { InstanceNumber } = metadata;
+
+ return {
+ value: index,
+ title: `Instance Number: ${InstanceNumber}`,
+ description: '',
+ onClick: () => {
+ setActiveInstance(index);
+ },
+ };
+ });
+
+ metadata = image.getData().metadata;
+ } else {
+ metadata = activeDisplaySet.metadata;
+ }
+
+ setTags(getSortedTags(metadata));
+ setInstanceList(instanceList);
+ setDisplaySetList(newDisplaySetList);
+ setIsImageStack(isImageStack);
+ }, [activeDisplaySetInstanceUID, activeInstance]);
const selectedDisplaySetValue = displaySetList.find(
ds => ds.value === activeDisplaySetInstanceUID
);
+ let instanceSelectList = null;
+
+ if (isImageStack) {
+ const selectedInstanceValue = instanceList[activeInstance];
+
+ instanceSelectList = (
+