UNPKG

mirador

Version:

An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.

64 lines (56 loc) 2.16 kB
import PropTypes from 'prop-types'; import { styled } from '@mui/material/styles'; import Accordion from '@mui/material/Accordion'; import AccordionSummary from '@mui/material/AccordionSummary'; import AccordionDetails from '@mui/material/AccordionDetails'; import Stack from '@mui/material/Stack'; import Alert from '@mui/material/Alert'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import { useTranslation } from 'react-i18next'; import { PluginHook } from './PluginHook'; const ErrorStackTrace = styled('pre', { name: 'ErrorContent', slot: 'stacktrace' })({ overflowY: 'scroll', }); const ErrorMetadata = styled('pre', { name: 'ErrorContent', slot: 'metadata' })({ height: '100px', overflowY: 'scroll', }); const InlineAccordion = styled(Accordion, { name: 'ErrorContent', slot: 'accordion' })({ backgroundColor: 'inherit', color: 'inherit', margin: 0, }); /** */ export function ErrorContent({ error, metadata = null, showJsError = true, ...rest }) { const { t } = useTranslation(); if (!showJsError) return null; const pluginProps = { error, metadata, showJsError, t, ...rest, }; return ( <Alert elevation={6} variant="filled" severity="error"> {t('errorDialogTitle')} {showJsError && ( <InlineAccordion elevation={2} square> <AccordionSummary sx={{ marginInlineStart: '-1rem' }} expandIcon={<ExpandMoreIcon sx={{ color: '#fff' }} />}> {t('jsError', { message: error.message, name: error.name })} </AccordionSummary> <AccordionDetails> <Stack> <ErrorStackTrace>{t('jsStack', { stack: error.stack })}</ErrorStackTrace> {metadata && <ErrorMetadata>{JSON.stringify(metadata, null, 2)}</ErrorMetadata>} </Stack> </AccordionDetails> </InlineAccordion> )} <PluginHook targetName="ErrorContent" {...pluginProps} /> </Alert> ); } ErrorContent.propTypes = { error: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types metadata: PropTypes.object, // eslint-disable-line react/forbid-prop-types showJsError: PropTypes.bool, };