diff --git a/extensions/debugging/src/DebugReportModal.css b/extensions/debugging/src/DebugReportModal.css
index c5b75a8fc..ffc3b8557 100644
--- a/extensions/debugging/src/DebugReportModal.css
+++ b/extensions/debugging/src/DebugReportModal.css
@@ -2,3 +2,8 @@
padding: 10px 0 10px;
color: var(--active-color);
}
+
+.debug-report-modal-container {
+ display: flex;
+ flex-direction: column;
+}
diff --git a/extensions/debugging/src/DebugReportModal.js b/extensions/debugging/src/DebugReportModal.js
index b95503670..b00988b4f 100644
--- a/extensions/debugging/src/DebugReportModal.js
+++ b/extensions/debugging/src/DebugReportModal.js
@@ -1,22 +1,108 @@
import React from 'react';
import { detect } from 'detect-browser';
import './DebugReportModal.css';
+import { ToolbarButton } from '@ohif/ui';
const DubugReportModal = ({
viewports,
studies,
servers,
extensionManager,
+ mailTo,
}) => {
+ const mailToFunction = () => {
+ const StudyInstanceUID = Object.keys(studies.studyData)[0];
+
+ const subject = encodeURI(`Issue with Study: ${StudyInstanceUID}`);
+
+ let body = `Enter the description of your problem here: \n\n\n`;
+
+ body += `============= SESSION INFO =============\n\n`;
+
+ // App version
+
+ body += '== App ==\n';
+ body += `version\t${window.version}\n\n`;
+
+ // Extensions Versions
+
+ body += '== Extensions Versions ==\n';
+
+ const { registeredExtensionVesions } = extensionManager;
+
+ Object.keys(registeredExtensionVesions).forEach(extensionId => {
+ const version = registeredExtensionVesions[extensionId];
+
+ body += `${extensionId}\t${version}\n`;
+ });
+
+ body += '\n';
+
+ // Browser Info
+
+ const browser = detect();
+
+ const { name, os, type, version } = browser;
+
+ body += '== Browser Info ==\n';
+ body += `name\t ${name}\n`;
+ body += `os\t ${os}\n`;
+ body += `type\t ${type}\n`;
+ body += `version\t ${version}\n\n`;
+
+ // Study URL
+ body += '== URL ==\n';
+ body += `URL\t ${window.location.href}\n\n`;
+
+ // Layout
+
+ const { numRows, numColumns, viewportSpecificData } = viewports;
+
+ body += '== Viewport Layout ==\n';
+ body += `Rows\t${numRows}\n`;
+ body += `Columns\t${numColumns}\n\n`;
+
+ body += '== Viewports ==\n';
+
+ Object.keys(viewportSpecificData).forEach(viewportIndex => {
+ const vsd = viewportSpecificData[viewportIndex];
+
+ const [row, column] = _viewportIndexToViewportPosition(
+ viewportIndex,
+ numColumns
+ );
+
+ body += `[${row},${column}]\t${vsd.SeriesInstanceUID}\n`;
+ });
+
+ // TODO Text dump of rest of stuff.
+
+ body = encodeURI(body);
+
+ window.location.href = `mailto:${mailTo}?subject=${subject}&body=${body}`;
+ };
+
return (
-
-
- {getAppVersion()}
- {getExtensionVersions(extensionManager)}
- {getBrowserInfo()}
- {getCurrentStudyUrl()}
- {getLayout(viewports)}
-
+
+ {mailTo ? (
+
+
+
+ ) : null}
+
+
+ {getAppVersion()}
+ {getExtensionVersions(extensionManager)}
+ {getBrowserInfo()}
+ {getCurrentStudyUrl()}
+ {getLayout(viewports)}
+
+
);
};
@@ -39,7 +125,7 @@ const getCurrentStudyUrl = () => {
return (
- | App |
+ URL |
| URL |
diff --git a/extensions/debugging/src/commandsModule.js b/extensions/debugging/src/commandsModule.js
index a4b05a939..3b77af792 100644
--- a/extensions/debugging/src/commandsModule.js
+++ b/extensions/debugging/src/commandsModule.js
@@ -11,6 +11,8 @@ import _downloadAndZip, { downloadInstances } from './downloadAndZip';
import DebugReportModal from './DebugReportModal';
import React from 'react';
+import state from './state';
+
const {
utils: { Queue },
} = OHIF;
@@ -99,6 +101,7 @@ export function getCommands(context, servicesManager, extensionManager) {
studies={studies}
servers={servers}
extensionManager={extensionManager}
+ mailTo={state.mailTo}
/>
);
};
diff --git a/extensions/debugging/src/index.js b/extensions/debugging/src/index.js
index 88d509643..568fc7c54 100644
--- a/extensions/debugging/src/index.js
+++ b/extensions/debugging/src/index.js
@@ -2,6 +2,7 @@ import { getDicomWebClientFromConfig } from './utils';
import { getCommands } from './commandsModule';
import { version } from '../package.json';
import toolbarModule from './toolbarModule';
+import state from './state';
/**
* Constants
@@ -29,11 +30,15 @@ export default {
* LIFECYCLE HOOKS
*/
- preRegistration({ appConfig }) {
+ preRegistration({ appConfig, configuration }) {
const dicomWebClient = getDicomWebClientFromConfig(appConfig);
if (dicomWebClient) {
sharedContext.dicomWebClient = dicomWebClient;
}
+
+ if (configuration && configuration.mailTo) {
+ state.mailTo = configuration.mailTo;
+ }
},
/**
diff --git a/extensions/debugging/src/state.js b/extensions/debugging/src/state.js
new file mode 100644
index 000000000..51ab13642
--- /dev/null
+++ b/extensions/debugging/src/state.js
@@ -0,0 +1,3 @@
+const state = { mailTo: undefined };
+
+export default state;
diff --git a/platform/ui/src/elements/Icon/getIcon.js b/platform/ui/src/elements/Icon/getIcon.js
index cbd6a1516..bea2f5cac 100644
--- a/platform/ui/src/elements/Icon/getIcon.js
+++ b/platform/ui/src/elements/Icon/getIcon.js
@@ -87,6 +87,7 @@ import user from './icons/user.svg';
import youtube from './icons/youtube.svg';
import eye from './icons/eye.svg';
import eyeClosed from './icons/eye-closed.svg';
+import envelopeSquare from './icons/envelope-square.svg';
const ICONS = {
eye,
@@ -176,6 +177,7 @@ const ICONS = {
lung,
liver,
save: saveRegular,
+ 'envelope-square': envelopeSquare,
};
/**
diff --git a/platform/ui/src/elements/Icon/icons/envelope-square.svg b/platform/ui/src/elements/Icon/icons/envelope-square.svg
new file mode 100644
index 000000000..5e61ee3c2
--- /dev/null
+++ b/platform/ui/src/elements/Icon/icons/envelope-square.svg
@@ -0,0 +1,10 @@
+
diff --git a/platform/viewer/src/index.js b/platform/viewer/src/index.js
index cfd49ecab..bc38c4d07 100644
--- a/platform/viewer/src/index.js
+++ b/platform/viewer/src/index.js
@@ -54,8 +54,8 @@ const appProps = {
OHIFDicomPDFExtension,
OHIFDicomSegmentationExtension,
OHIFDicomRtExtension,
- OHIFDicomTagBrowserExtension,
- //OHIFDebuggingExtension,
+ //[OHIFDebuggingExtension, { mailTo: 'support@canceridc.dev' }],
+ //OHIFDicomTagBrowserExtension,
],
};