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, ], };