import React from 'react'; import { detect } from 'detect-browser'; import './DebugReportModal.css'; import { ToolbarButton } from '@ohif/ui'; const DubugReportModal = ({ viewports, studies, servers, extensionManager, mailTo, debugModalMessage, }) => { const copyDebugDataToClipboard = () => { const body = getEmailBody(); const textArea = document.createElement('textarea'); textArea.value = body; document.body.appendChild(textArea); textArea.select(); document.execCommand('copy'); document.body.removeChild(textArea); }; const getEmailBody = () => { 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`; }); return body; }; const mailToFunction = () => { const StudyInstanceUID = Object.keys(studies.studyData)[0]; const subject = encodeURI(`Issue with Study: ${StudyInstanceUID}`); let body = getEmailBody(); // TODO Text dump of rest of stuff. body = encodeURI(body); window.location.href = `mailto:${mailTo}?subject=${subject}&body=${body}`; }; return (
{debugModalMessage ?

{debugModalMessage}

: null}
{mailTo ? (
) : null}
{getAppVersion()} {getExtensionVersions(extensionManager)} {getBrowserInfo()} {getCurrentStudyUrl()} {getLayout(viewports)}
); }; const getAppVersion = () => { return ( App Version {window.version} ); }; const getCurrentStudyUrl = () => { return ( URL URL {window.location.href} ); }; const getExtensionVersions = extensionManager => { const { registeredExtensionVesions } = extensionManager; const lineItems = Object.keys(registeredExtensionVesions).map(extensionId => { const version = registeredExtensionVesions[extensionId]; return ( {extensionId} {version} ); }); return ( Extensions {lineItems} ); }; const getLayout = viewports => { const { numRows, numColumns } = viewports; return ( Viewports Layout Rows {numRows} Columns {numColumns} SeriesInstanceUIDs {getSeriesInstanceUIDsPerRow(viewports)} ); }; const getBrowserInfo = () => { const browser = detect(); const { name, os, type, version } = browser; return ( Platform name {name} os {os} type {type} version {version} ); }; const getSeriesInstanceUIDsPerRow = viewports => { const { viewportSpecificData, numColumns } = viewports; // NOTE viewportSpecificData is actually an object with numerical keys. return Object.keys(viewportSpecificData).map(viewportIndex => { const vsd = viewportSpecificData[viewportIndex]; const [row, column] = _viewportIndexToViewportPosition( viewportIndex, numColumns ); return ( {`[${row},${column}]`} {vsd.SeriesInstanceUID} ); }); }; const _viewportIndexToViewportPosition = (viewportIndex, numColumns) => { const row = Math.floor(viewportIndex / numColumns); const column = viewportIndex % numColumns; return [row, column]; }; export default DubugReportModal;