-
Notifications
You must be signed in to change notification settings - Fork 0
/
16.bundle.d9efece9a3d1e24c3ffb.js.map
1 lines (1 loc) · 23.2 KB
/
16.bundle.d9efece9a3d1e24c3ffb.js.map
1
{"version":3,"sources":["webpack:////Users/kaiyuhsu/Documents/projects/medervahealth/ohif-source/extensions/dicom-pdf/src/OHIFComponentPlugin.js","webpack:////Users/kaiyuhsu/Documents/projects/medervahealth/ohif-source/extensions/dicom-pdf/src/TypedArrayProp.js","webpack:////Users/kaiyuhsu/Documents/projects/medervahealth/ohif-source/extensions/dicom-pdf/src/DicomPDFViewport.js","webpack:////Users/kaiyuhsu/Documents/projects/medervahealth/ohif-source/extensions/dicom-pdf/src/OHIFDicomPDFViewport.js","webpack:////Users/kaiyuhsu/Documents/projects/medervahealth/ohif-source/extensions/dicom-pdf/src/ConnectedOHIFDicomPDFViewer.js"],"names":["OHIFComponentPlugin","props","Fragment","children","propTypes","id","PropTypes","string","isRequired","init","func","destroy","node","TypedArrayProp","any","propName","componentName","obj","Float64Array","Float32Array","Int32Array","Int16Array","Int8Array","Uint32Array","Uint16Array","Uint8Array","Uint8ClampedArray","Error","float64","float32","float","int32","int16","int8","int","uint32","uint16","uint8","uint8clamped","uint","pdfjsBuild","GlobalWorkerOptions","workerSrc","pdfjsWorker","SOP_CLASS_UIDS","ENCAPSULATED_PDF","DicomPDFViewport","state","pdf","scale","currentPageIndex","context","canvas","getContext","getPage","page","viewport","getViewport","height","width","renderContext","canvasContext","render","getTextContent","textContent","textLayer","innerHTML","style","PDFJS","renderTextLayer","container","textDivs","dataSet","byteArray","pdfByteArray","fileTag","elements","x00420011","offset","dataOffset","remainder","length","slice","PDF","Blob","type","URL","createObjectURL","event","newPageIndex","action","target","getAttribute","numPages","setState","newZoomValue","dicomParser","parseDicom","untilTag","error","setViewportActive","viewportIndex","activeViewportIndex","fileURL","a","document","createElement","href","download","substr","lastIndexOf","body","appendChild","click","removeChild","createRef","this","parseByteArray","getPDFFileUrl","useNative","getDocument","promise","updatePDFCanvas","prevProps","prevState","newValidScale","newValidPageNumber","className","onClick","setViewportActiveHandler","onScroll","aria-label","data","data-pager","onPageChange","onZoomChange","downloadPDFCanvas","ref","JSON","stringify","Component","bool","viewportData","object","number","DicomLoaderService","OHIF","utils","OHIFDicomPDFViewport","console","log","displaySet","studies","findDicomDataPromise","then","pluginProps","redux","actions","ConnectedOHIFDicomPDFViewer","connect","ownProps","viewports","dispatch"],"mappings":"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","file":"16.bundle.d9efece9a3d1e24c3ffb.js","sourcesContent":["import React from 'react';\nimport PropTypes from \"prop-types\";\n\nfunction OHIFComponentPlugin(props) {\n return (<React.Fragment>{props.children}</React.Fragment>);\n}\n\nOHIFComponentPlugin.propTypes = {\n id: PropTypes.string.isRequired,\n init: PropTypes.func.isRequired,\n destroy: PropTypes.func.isRequired,\n children: PropTypes.node\n};\n\nexport default OHIFComponentPlugin;\n","// https://github.com/facebook/prop-types/issues/69\n\nexport const TypedArrayProp = {\n any: (props, propName, componentName) => {\n let obj = props[propName];\n if (!(obj instanceof Float64Array ||\n obj instanceof Float32Array ||\n obj instanceof Int32Array ||\n obj instanceof Int16Array ||\n obj instanceof Int8Array ||\n obj instanceof Uint32Array ||\n obj instanceof Uint16Array ||\n obj instanceof Uint8Array ||\n obj instanceof Uint8ClampedArray)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected a typed array.'\n );\n }\n },\n\n float64: (props, propName, componentName) => {\n if (!(props[propName] instanceof Float64Array)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected a Float64Array.'\n );\n }\n },\n\n float32: (props, propName, componentName) => {\n if (!(props[propName] instanceof Float32Array)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected a Float32Array.'\n );\n }\n },\n\n float: (props, propName, componentName) => {\n if (!(props[propName] instanceof Float64Array ||\n props[propName] instanceof Float32Array)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected a Float32Array or Float64Array.'\n );\n }\n },\n\n int32: (props, propName, componentName) => {\n if (!(props[propName] instanceof Int32Array)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected an Int32Array.'\n );\n }\n },\n\n int16: (props, propName, componentName) => {\n if (!(props[propName] instanceof Int16Array)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected an In16Array.'\n );\n }\n },\n\n int8: (props, propName, componentName) => {\n if (!(props[propName] instanceof Int8Array)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected an Int8Array.'\n );\n }\n },\n\n int: (props, propName, componentName) => {\n if (!(props[propName] instanceof Int32Array ||\n props[propName] instanceof Int16Array ||\n props[propName] instanceof Int8Array)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected an Int32Array, In16Array, or Int8Array.'\n );\n }\n },\n\n uint32: (props, propName, componentName) => {\n if (!(props[propName] instanceof Uint32Array)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected a Uint32Array.'\n );\n }\n },\n\n uint16: (props, propName, componentName) => {\n if (!(props[propName] instanceof Uint16Array)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected a Uint16Array.'\n );\n }\n },\n\n uint8: (props, propName, componentName) => {\n if (!(props[propName] instanceof Uint8Array)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected a Uint8Array.'\n );\n }\n },\n\n uint8clamped: (props, propName, componentName) => {\n if (!(props[propName] instanceof Uint8ClampedArray)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected a Uint8ClampedArray.'\n );\n }\n },\n\n uint: (props, propName, componentName) => {\n if (!(props[propName] instanceof Uint32Array ||\n props[propName] instanceof Uint16Array ||\n props[propName] instanceof Uint8Array ||\n props[propName] instanceof Uint8ClampedArray)) {\n return new Error(\n 'Invalid prop `' + propName + '` supplied to' +\n ' `' + componentName + '`. Expected a Uint32Array, Uint16Array, Uint8Array, or Uint8ClampedArray.'\n );\n }\n },\n};\n\nexport { TypedArrayProp as default };\n","import React, { Component, createRef } from 'react';\nimport dicomParser from 'dicom-parser';\nimport PDFJS from 'pdfjs-dist';\nimport PropTypes from 'prop-types';\n\nimport TypedArrayProp from './TypedArrayProp';\nimport './DicomPDFViewport.css';\n\nimport pdfjsBuild from 'pdfjs-dist/build/pdf';\nimport pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry';\npdfjsBuild.GlobalWorkerOptions.workerSrc = pdfjsWorker;\n\n// TODO: Should probably use dcmjs for this\nconst SOP_CLASS_UIDS = {\n ENCAPSULATED_PDF: '1.2.840.10008.5.1.4.1.1.104.1',\n};\n\nclass DicomPDFViewport extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n fileURL: null,\n error: null,\n currentPageIndex: 1,\n pdf: null,\n scale: 1,\n };\n\n this.canvas = createRef();\n this.textLayer = createRef();\n }\n\n static propTypes = {\n byteArray: TypedArrayProp.uint8,\n useNative: PropTypes.bool,\n viewportData: PropTypes.object,\n activeViewportIndex: PropTypes.number,\n setViewportActive: PropTypes.func,\n viewportIndex: PropTypes.number,\n };\n\n static defaultProps = {\n useNative: false,\n };\n\n async componentDidMount() {\n const dataSet = this.parseByteArray(this.props.byteArray);\n const fileURL = this.getPDFFileUrl(dataSet, this.props.byteArray);\n\n this.setState(state => ({ ...state, fileURL }));\n\n if (!this.props.useNative) {\n const pdf = await PDFJS.getDocument(fileURL).promise;\n this.setState(state => ({ ...state, pdf }), () => this.updatePDFCanvas());\n }\n }\n\n updatePDFCanvas = async () => {\n const { pdf, scale, currentPageIndex } = this.state;\n const context = this.canvas.getContext('2d');\n\n const page = await pdf.getPage(currentPageIndex);\n let viewport = page.getViewport({ scale });\n\n this.canvas.height = viewport.height;\n this.canvas.width = viewport.width;\n\n const renderContext = {\n canvasContext: context,\n viewport: viewport,\n };\n\n await page.render(renderContext);\n const textContent = await page.getTextContent();\n\n this.textLayer.innerHTML = '';\n this.textLayer.style.height = viewport.height + 'px';\n this.textLayer.style.width = viewport.width + 'px';\n\n PDFJS.renderTextLayer({\n textContent,\n container: this.textLayer,\n viewport,\n textDivs: [],\n });\n };\n\n componentDidUpdate(prevProps, prevState) {\n const { currentPageIndex, scale } = this.state;\n const newValidScale = prevState.scale !== scale && scale > 0;\n const newValidPageNumber =\n prevState.currentPageIndex !== currentPageIndex && currentPageIndex > 0;\n\n if (newValidScale || newValidPageNumber) {\n this.updatePDFCanvas();\n }\n }\n\n getPDFFileUrl = (dataSet, byteArray) => {\n let pdfByteArray = byteArray;\n\n if (dataSet) {\n const SOPClassUID = dataSet.string('x00080016');\n\n if (SOPClassUID !== SOP_CLASS_UIDS.ENCAPSULATED_PDF) {\n throw new Error('This is not a DICOM-encapsulated PDF');\n }\n\n const fileTag = dataSet.elements.x00420011;\n const offset = fileTag.dataOffset;\n const remainder = offset + fileTag.length;\n pdfByteArray = dataSet.byteArray.slice(offset, remainder);\n }\n\n const PDF = new Blob([pdfByteArray], { type: 'application/pdf' });\n const fileURL = URL.createObjectURL(PDF);\n\n return fileURL;\n };\n\n onPageChange = async event => {\n const { currentPageIndex, pdf } = this.state;\n let newPageIndex = currentPageIndex;\n\n const action = event.target.getAttribute('data-pager');\n if (action === 'prev') {\n if (currentPageIndex === 1) {\n return;\n }\n newPageIndex -= 1;\n if (currentPageIndex < 0) {\n newPageIndex = 0;\n }\n }\n\n if (action === 'next') {\n if (currentPageIndex === pdf.numPages - 1) {\n return;\n }\n newPageIndex += 1;\n if (currentPageIndex > pdf.numPages - 1) {\n newPageIndex = pdf.numPages - 1;\n }\n }\n\n this.setState(state => ({ ...state, currentPageIndex: newPageIndex }));\n };\n\n onZoomChange = () => {\n let newZoomValue = this.state.scale;\n\n const action = event.target.getAttribute('data-pager');\n\n if (action === '+') {\n newZoomValue += 0.25;\n }\n\n if (action === '-') {\n newZoomValue -= 0.25;\n }\n\n this.setState(state => ({ ...state, scale: newZoomValue }));\n };\n\n parseByteArray = byteArray => {\n const options = { untilTag: '' };\n\n let dataSet;\n try {\n dataSet = dicomParser.parseDicom(byteArray, options);\n } catch (error) {\n this.setState(state => ({ ...state, error }));\n }\n\n return dataSet;\n };\n\n setViewportActiveHandler = () => {\n const {\n setViewportActive,\n viewportIndex,\n activeViewportIndex,\n } = this.props;\n\n if (viewportIndex !== activeViewportIndex) {\n setViewportActive(viewportIndex);\n }\n };\n\n downloadPDFCanvas = () => {\n const { fileURL } = this.state;\n const a = document.createElement('a');\n a.href = fileURL;\n a.download = fileURL.substr(fileURL.lastIndexOf('/') + 1);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n };\n\n render() {\n const { fileURL, pdf, error } = this.state;\n\n return (\n <div\n className={'DicomPDFViewport'}\n onClick={this.setViewportActiveHandler}\n onScroll={this.setViewportActiveHandler}\n style={{ width: '100%', height: '100%' }}\n >\n {!this.props.useNative ? (\n <>\n <div id=\"toolbar\">\n <div id=\"pager\">\n {pdf && pdf.numPages > 1 && (\n <>\n <button data-pager=\"prev\" onClick={this.onPageChange}>\n {`<`}\n </button>\n <button data-pager=\"next\" onClick={this.onPageChange}>\n {`>`}\n </button>\n </>\n )}\n <button data-pager=\"-\" onClick={this.onZoomChange}>\n {`-`}\n </button>\n <button data-pager=\"+\" onClick={this.onZoomChange}>\n {`+`}\n </button>\n <button onClick={this.downloadPDFCanvas}>Download</button>\n </div>\n </div>\n <div id=\"canvas\">\n <div id=\"pdf-canvas-container\">\n <canvas\n id=\"pdf-canvas\"\n ref={canvas => (this.canvas = canvas)}\n />\n <div\n id=\"text-layer\"\n ref={textLayer => (this.textLayer = textLayer)}\n ></div>\n </div>\n </div>\n </>\n ) : (\n <object\n aria-label=\"PDF Viewer\"\n data={fileURL}\n type=\"application/pdf\"\n width=\"100%\"\n height=\"100%\"\n />\n )}\n {error && <h2>{JSON.stringify(error)}</h2>}\n </div>\n );\n }\n}\n\nexport default DicomPDFViewport;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport OHIF from '@ohif/core';\nimport OHIFComponentPlugin from './OHIFComponentPlugin.js';\nimport DicomPDFViewport from './DicomPDFViewport';\n\nconst { DicomLoaderService } = OHIF.utils;\n\nclass OHIFDicomPDFViewport extends Component {\n static propTypes = {\n studies: PropTypes.object,\n displaySet: PropTypes.object,\n viewportIndex: PropTypes.number,\n viewportData: PropTypes.object,\n activeViewportIndex: PropTypes.number,\n setViewportActive: PropTypes.func,\n };\n\n state = {\n byteArray: null,\n error: null,\n };\n\n static id = 'DicomPDFViewportPDF';\n\n static init() {\n console.log('DicomPDFViewport init()');\n }\n\n static destroy() {\n console.log('DicomPDFViewport destroy()');\n }\n\n componentDidMount() {\n const { displaySet, studies } = this.props.viewportData;\n\n DicomLoaderService.findDicomDataPromise(displaySet, studies).then(\n data => this.setState({ byteArray: new Uint8Array(data) }),\n error => {\n this.setState({ error });\n throw new Error(error);\n }\n );\n }\n\n render() {\n const {\n setViewportActive,\n viewportIndex,\n activeViewportIndex,\n } = this.props;\n const { byteArray, error } = this.state;\n const { id, init, destroy } = OHIFDicomPDFViewport;\n const pluginProps = { id, init, destroy };\n\n return (\n <OHIFComponentPlugin {...pluginProps}>\n {byteArray && (\n <DicomPDFViewport\n byteArray={byteArray}\n setViewportActive={setViewportActive}\n viewportIndex={viewportIndex}\n activeViewportIndex={activeViewportIndex}\n />\n )}\n {error && <h2>{JSON.stringify(error)}</h2>}\n </OHIFComponentPlugin>\n );\n }\n}\n\nexport default OHIFDicomPDFViewport;\n","import OHIF from '@ohif/core';\nimport { connect } from 'react-redux';\nimport OHIFDicomPDFViewport from './OHIFDicomPDFViewport';\n\nconst { setViewportActive } = OHIF.redux.actions;\n\nconst mapStateToProps = (state, ownProps) => {\n const { activeViewportIndex } = state.viewports;\n return { activeViewportIndex };\n};\n\nconst mapDispatchToProps = (dispatch, ownProps) => {\n const { viewportIndex } = ownProps;\n\n return {\n setViewportActive: () => {\n dispatch(setViewportActive(viewportIndex));\n },\n };\n};\n\nconst ConnectedOHIFDicomPDFViewer = connect(\n mapStateToProps,\n mapDispatchToProps\n)(OHIFDicomPDFViewport);\n\nexport default ConnectedOHIFDicomPDFViewer;\n"],"sourceRoot":""}