diff --git a/extensions/debugging/src/DebugReportModal.css b/extensions/debugging/src/DebugReportModal.css
index f61e83327d1..679d62539a2 100644
--- a/extensions/debugging/src/DebugReportModal.css
+++ b/extensions/debugging/src/DebugReportModal.css
@@ -24,3 +24,21 @@
overflow: scroll;
max-height: 300px;
}
+
+.debug-overflowText {
+ margin: 0 auto;
+ max-width: 300px;
+ overflow-wrap: break-word;
+ word-wrap: break-word;
+ hyphens: auto;
+}
+
+.debug-overflowText-border {
+ margin: 0 auto;
+ max-width: 300px;
+ border: solid 2px #ccc;
+ padding: 12px;
+ overflow-wrap: break-word;
+ word-wrap: break-word;
+ hyphens: auto;
+}
diff --git a/extensions/debugging/src/DebugReportModal.js b/extensions/debugging/src/DebugReportModal.js
index 5926bb2913f..c8acec293f2 100644
--- a/extensions/debugging/src/DebugReportModal.js
+++ b/extensions/debugging/src/DebugReportModal.js
@@ -2,6 +2,8 @@ import React from 'react';
import { detect } from 'detect-browser';
import './DebugReportModal.css';
import { ToolbarButton } from '@ohif/ui';
+import { utils } from '@ohif/core';
+const { studyMetadataManager } = utils;
const DubugReportModal = ({
viewports,
@@ -70,7 +72,7 @@ const DubugReportModal = ({
body += '== Viewport Layout ==\n';
body += `Rows\t${numRows}\n`;
body += `Columns\t${numColumns}\n\n`;
- body += '== Viewports ==\n';
+ body += '== SeriesInstanceUIDs ==\n';
Object.keys(viewportSpecificData).forEach(viewportIndex => {
const vsd = viewportSpecificData[viewportIndex];
@@ -83,6 +85,40 @@ const DubugReportModal = ({
body += `[${row},${column}]\t${vsd.SeriesInstanceUID}\n`;
});
+ body += '== ReferencedSEGSeriesInstanceUIDs ==\n';
+
+ Object.keys(viewportSpecificData).forEach(viewportIndex => {
+ const displaySet = viewportSpecificData[viewportIndex];
+ const [
+ referencedDisplaySetsRef,
+ referencedDisplaySetsCount,
+ ] = _getReferencedSeriesInstanceUIDsString(displaySet, 'SEG');
+
+ const [row, column] = _viewportIndexToViewportPosition(
+ viewportIndex,
+ numColumns
+ );
+
+ body += `[${row},${column}]\t${referencedDisplaySetsRef}\n`;
+ });
+
+ body += '== ReferencedRTSTRUCTSeriesInstanceUIDs ==\n';
+
+ Object.keys(viewportSpecificData).forEach(viewportIndex => {
+ const displaySet = viewportSpecificData[viewportIndex];
+ const [
+ referencedDisplaySetsRef,
+ referencedDisplaySetsCount,
+ ] = _getReferencedSeriesInstanceUIDsString(displaySet, 'RTSTRUCT');
+
+ const [row, column] = _viewportIndexToViewportPosition(
+ viewportIndex,
+ numColumns
+ );
+
+ body += `[${row},${column}]\t${referencedDisplaySetsRef}\n`;
+ });
+
return body;
};
@@ -171,7 +207,7 @@ const getCurrentStudyUrl = () => {
URL |
- {window.location.href} |
+ {window.location.href} |
);
@@ -222,6 +258,14 @@ const getLayout = viewports => {
SeriesInstanceUIDs |
{getSeriesInstanceUIDsPerRow(viewports)}
+
+ ReferencedSEGSeriesInstanceUIDs |
+
+ {getReferencedSEGSeriesInstanceUIDsPerRow(viewports)}
+
+ ReferencedRTSTRUCTSeriesInstanceUIDs |
+
+ {getReferencedRTSTRUCTSeriesInstanceUIDsPerRow(viewports)}
);
};
@@ -256,6 +300,129 @@ const getBrowserInfo = () => {
);
};
+/**
+ * Returns DisplaySets that reference the target series, sorted by dateTime
+ *
+ * @param {string} StudyInstanceUID
+ * @param {string} SeriesInstanceUID
+ * @returns Array
+ */
+const _getReferencedDisplaysets = (
+ StudyInstanceUID,
+ SeriesInstanceUID,
+ Modality
+) => {
+ /* Referenced DisplaySets */
+ const studyMetadata = studyMetadataManager.get(StudyInstanceUID);
+ const referencedDisplaysets = studyMetadata.getDerivedDatasets({
+ referencedSeriesInstanceUID: SeriesInstanceUID,
+ Modality,
+ });
+
+ /* Sort */
+ referencedDisplaysets.sort((a, b) => {
+ const aNumber = Number(`${a.SeriesDate}${a.SeriesTime}`);
+ const bNumber = Number(`${b.SeriesDate}${b.SeriesTime}`);
+ return bNumber - aNumber;
+ });
+
+ return referencedDisplaysets;
+};
+
+const _getReferencedSeriesInstanceUIDsString = (displaySet, Modality) => {
+ const referencedDisplaySets = _getReferencedDisplaysets(
+ displaySet.StudyInstanceUID,
+ displaySet.SeriesInstanceUID,
+ Modality
+ );
+
+ let referencedDisplaySetsRef = 'None';
+ const referencedDisplaySetsCount = referencedDisplaySets.length;
+ if (referencedDisplaySetsCount !== 0) {
+ referencedDisplaySetsRef = '';
+ for (let i = 0; i < referencedDisplaySetsCount - 1; i++) {
+ referencedDisplaySetsRef +=
+ referencedDisplaySets[i].SeriesInstanceUID + ', ';
+ }
+ referencedDisplaySetsRef +=
+ referencedDisplaySets[referencedDisplaySetsCount - 1].SeriesInstanceUID;
+ }
+
+ return [referencedDisplaySetsRef, referencedDisplaySetsCount];
+};
+
+const getReferencedSEGSeriesInstanceUIDsPerRow = viewports => {
+ const { viewportSpecificData, numColumns } = viewports;
+
+ // NOTE viewportSpecificData is actually an object with numerical keys.
+ return Object.keys(viewportSpecificData).map(viewportIndex => {
+ const displaySet = viewportSpecificData[viewportIndex];
+ const [
+ referencedDisplaySetsRef,
+ referencedDisplaySetsCount,
+ ] = _getReferencedSeriesInstanceUIDsString(displaySet, 'SEG');
+
+ const [row, column] = _viewportIndexToViewportPosition(
+ viewportIndex,
+ numColumns
+ );
+
+ if (referencedDisplaySetsCount > 1) {
+ return (
+
+ {`[${row},${column}]`} |
+
+ {referencedDisplaySetsRef}
+ |
+
+ );
+ } else {
+ return (
+
+ {`[${row},${column}]`} |
+ {referencedDisplaySetsRef} |
+
+ );
+ }
+ });
+};
+
+const getReferencedRTSTRUCTSeriesInstanceUIDsPerRow = viewports => {
+ const { viewportSpecificData, numColumns } = viewports;
+
+ // NOTE viewportSpecificData is actually an object with numerical keys.
+ return Object.keys(viewportSpecificData).map(viewportIndex => {
+ const displaySet = viewportSpecificData[viewportIndex];
+ const [
+ referencedDisplaySetsRef,
+ referencedDisplaySetsCount,
+ ] = _getReferencedSeriesInstanceUIDsString(displaySet, 'RTSTRUCT');
+
+ const [row, column] = _viewportIndexToViewportPosition(
+ viewportIndex,
+ numColumns
+ );
+
+ if (referencedDisplaySetsCount > 1) {
+ return (
+
+ {`[${row},${column}]`} |
+
+ {referencedDisplaySetsRef}
+ |
+
+ );
+ } else {
+ return (
+
+ {`[${row},${column}]`} |
+ {referencedDisplaySetsRef} |
+
+ );
+ }
+ });
+};
+
const getSeriesInstanceUIDsPerRow = viewports => {
const { viewportSpecificData, numColumns } = viewports;