| import { createPortal } from 'react-dom' | |
| import { useState, useEffect } from 'react' | |
| import { useSelector } from 'react-redux' | |
| import PropTypes from 'prop-types' | |
| import { Dialog, DialogContent, DialogTitle } from '@mui/material' | |
| import ReactJson from 'react-json-view' | |
| const SourceDocDialog = ({ show, dialogProps, onCancel }) => { | |
| const portalElement = document.getElementById('portal') | |
| const customization = useSelector((state) => state.customization) | |
| const [data, setData] = useState({}) | |
| useEffect(() => { | |
| if (dialogProps.data) setData(dialogProps.data) | |
| return () => { | |
| setData({}) | |
| } | |
| }, [dialogProps]) | |
| const component = show ? ( | |
| <Dialog | |
| onClose={onCancel} | |
| open={show} | |
| fullWidth | |
| maxWidth='sm' | |
| aria-labelledby='alert-dialog-title' | |
| aria-describedby='alert-dialog-description' | |
| > | |
| <DialogTitle sx={{ fontSize: '1rem' }} id='alert-dialog-title'> | |
| Source Document | |
| </DialogTitle> | |
| <DialogContent> | |
| <ReactJson | |
| theme={customization.isDarkMode ? 'ocean' : 'rjv-default'} | |
| style={{ padding: 10, borderRadius: 10 }} | |
| src={data} | |
| name={null} | |
| quotesOnKeys={false} | |
| enableClipboard={false} | |
| displayDataTypes={false} | |
| /> | |
| </DialogContent> | |
| </Dialog> | |
| ) : null | |
| return createPortal(component, portalElement) | |
| } | |
| SourceDocDialog.propTypes = { | |
| show: PropTypes.bool, | |
| dialogProps: PropTypes.object, | |
| onCancel: PropTypes.func | |
| } | |
| export default SourceDocDialog | |