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.

91 lines (82 loc) 2.68 kB
import PropTypes from 'prop-types'; import { styled } from '@mui/material/styles'; import Typography from '@mui/material/Typography'; import Link from '@mui/material/Link'; import Skeleton from '@mui/material/Skeleton'; import { useTranslation } from 'react-i18next'; import { Img } from 'react-image'; import CompanionWindow from '../containers/CompanionWindow'; import { CompanionWindowSection } from './CompanionWindowSection'; import LabelValueMetadata from '../containers/LabelValueMetadata'; import ns from '../config/css-ns'; import { PluginHook } from './PluginHook'; const StyledLogo = styled(Img)(() => ({ maxWidth: '100%', })); const StyledPlaceholder = styled(Skeleton)(({ theme }) => ({ backgroundColor: theme.palette.grey[300], })); /** * WindowSideBarInfoPanel */ export function AttributionPanel({ manifestLogo = null, requiredStatement = null, rights = null, windowId, id, }) { const { t } = useTranslation(); const pluginProps = arguments[0]; // eslint-disable-line prefer-rest-params return ( <CompanionWindow title={t('attributionTitle')} paperClassName={ns('attribution-panel')} windowId={windowId} id={id} > <CompanionWindowSection> { requiredStatement && ( <LabelValueMetadata labelValuePairs={requiredStatement} defaultLabel={t('attribution')} /> )} { rights && rights.length > 0 && ( <dl className={ns('label-value-metadata')}> <Typography variant="subtitle2" component="dt">{t('rights')}</Typography> { rights.map(v => ( <Typography variant="body1" component="dd" key={v.toString()}> <Link target="_blank" rel="noopener noreferrer" href={v}> {v} </Link> </Typography> )) } </dl> ) } </CompanionWindowSection> { manifestLogo && ( <CompanionWindowSection> <StyledLogo src={[manifestLogo]} alt="" role="presentation" unloader={ <StyledPlaceholder variant="rectangular" height={60} width={60} /> } /> </CompanionWindowSection> )} <PluginHook targetName="AttributionPanel" {...pluginProps} /> </CompanionWindow> ); } AttributionPanel.propTypes = { id: PropTypes.string.isRequired, manifestLogo: PropTypes.string, requiredStatement: PropTypes.arrayOf(PropTypes.shape({ label: PropTypes.string, value: PropTypes.string, })), rights: PropTypes.arrayOf(PropTypes.string), windowId: PropTypes.string.isRequired, };