diff --git a/src/components/AnnotationManifestsAccordion.js b/src/components/AnnotationManifestsAccordion.js index 08f709010dcbfd870042f3314bdb2fbc669a1aa0..1e2a1853cb7d3d05e6b6126e86f9bf0058e5837f 100644 --- a/src/components/AnnotationManifestsAccordion.js +++ b/src/components/AnnotationManifestsAccordion.js @@ -4,23 +4,51 @@ import AccordionSummary from '@material-ui/core/AccordionSummary'; import ExpandMoreIcon from '@material-ui/icons/ExpandMoreSharp'; import Typography from '@material-ui/core/Typography'; import AccordionDetails from '@material-ui/core/AccordionDetails'; -import { MiradorMenuButton } from './MiradorMenuButton'; import PlaylistAddIcon from '@material-ui/icons/PlaylistAdd'; +import PropTypes from 'prop-types'; +import { MiradorMenuButton } from './MiradorMenuButton'; - +/** + * AnnotationManifestsAccordion ~ + */ export class AnnotationManifestsAccordion extends Component { - + /** + * constructor - + */ constructor(props) { super(props); + this.handleOpenManifestSideToSide = this.handleOpenManifestSideToSide.bind(this); } - render() { + /** */ + handleOpenManifestSideToSide(e, manifestId) { + const { addResource, addWindow } = this.props; + addResource(manifestId); + addWindow({ manifestId }); + } + + /** */ + render() { const { - classes, - annotation + classes, annotation, t } = this.props; + /** */ + function searchManifest(text) { + return text.match( + /((http|https)\:\/\/[a-z0-9\/:%_+.,#?!@&=-]+)#manifest/g, + ); + } + + console.log(annotation); + annotation.idIsManifest = !!searchManifest(annotation.id); + annotation.manifestsInContent = searchManifest(annotation.content); + + if (annotation.manifestsInContent === null) { + return null; + } + return ( (annotation.idIsManifest || annotation.manifestsInContent) && ( <div> @@ -60,7 +88,7 @@ export class AnnotationManifestsAccordion extends Component { }} className={classes.manifestOpeningButton} > - <PlaylistAddIcon/> + <PlaylistAddIcon /> </MiradorMenuButton> </div> ))} @@ -68,9 +96,27 @@ export class AnnotationManifestsAccordion extends Component { </AccordionDetails> </Accordion> </div> - ) - ) + ); } - } + +AnnotationManifestsAccordion.propsTypes = { + addResource: PropTypes.func.isRequired, + addWindow: PropTypes.func.isRequired, + annotation: + PropTypes.shape({ + id: PropTypes.string.isRequired, + idIsManifest: PropTypes.bool, + manifestsInContent: PropTypes.arrayOf(PropTypes.string), + }), + classes: PropTypes.objectOf(PropTypes.string), + t: PropTypes.func.isRequired, +}; + +AnnotationManifestsAccordion.defaultProps = { + annotation: {}, + classes: {}, + htmlSanitizationRuleSet: 'iiif', + listContainerComponent: 'li', +}; diff --git a/src/components/CanvasAnnotations.js b/src/components/CanvasAnnotations.js index 827fe8f4d4a37713aff90697d25f889aa666c5eb..0769f9eadd8880c25340695e2c7179f8e1394cc0 100644 --- a/src/components/CanvasAnnotations.js +++ b/src/components/CanvasAnnotations.js @@ -6,15 +6,9 @@ import MenuList from '@material-ui/core/MenuList'; import MenuItem from '@material-ui/core/MenuItem'; import ListItemText from '@material-ui/core/ListItemText'; import Typography from '@material-ui/core/Typography'; -import DashboardIcon from '@material-ui/icons/Dashboard'; -import PlaylistAddIcon from '@material-ui/icons/PlaylistAdd'; -import Accordion from '@material-ui/core/Accordion'; -import AccordionSummary from '@material-ui/core/AccordionSummary'; -import ExpandMoreIcon from '@material-ui/icons/ExpandMoreSharp'; -import AccordionDetails from '@material-ui/core/AccordionDetails'; -import { MiradorMenuButton } from './MiradorMenuButton'; import { ScrollTo } from './ScrollTo'; import SanitizedHtml from '../containers/SanitizedHtml'; +import { AnnotationManifestsAccordion } from './AnnotationManifestsAccordion'; /** * CanvasAnnotations ~ @@ -29,7 +23,6 @@ export class CanvasAnnotations extends Component { this.handleClick = this.handleClick.bind(this); this.handleAnnotationHover = this.handleAnnotationHover.bind(this); this.handleAnnotationBlur = this.handleAnnotationBlur.bind(this); - this.handleOpenManifestSideToSide = this.handleOpenManifestSideToSide.bind(this); } /** @@ -60,13 +53,6 @@ export class CanvasAnnotations extends Component { hoverAnnotation(windowId, []); } - /** */ - handleOpenManifestSideToSide(e, manifestId) { - const { addResource, addWindow } = this.props; - addResource(manifestId); - addWindow({ manifestId }); - } - /** * Returns the rendered component */ @@ -77,21 +63,6 @@ export class CanvasAnnotations extends Component { containerRef, } = this.props; if (annotations.length === 0) return null; - - /** */ - function searchManifest(text) { - return text.match( - /((http|https)\:\/\/[a-z0-9\/:%_+.,#?!@&=-]+)#manifest/g, - ); - } - - annotations.forEach((annotation, i) => { - // eslint-disable-next-line react/prop-types - annotations[i].idIsManifest = !!searchManifest(annotation.id); - // eslint-disable-next-line react/prop-types - annotations[i].manifestsInContent = searchManifest(annotation.content); - }); - console.log(annotations); return ( <> @@ -139,52 +110,10 @@ export class CanvasAnnotations extends Component { </div> </ListItemText> </MenuItem> - { - (annotation.idIsManifest || annotation.manifestsInContent) && ( - <div> - <Accordion> - <AccordionSummary - expandIcon={<ExpandMoreIcon />} - > - <Typography className={classes.heading}>Manifests found :</Typography> - </AccordionSummary> - <AccordionDetails> - <Typography> - {annotation.idIsManifest && ( - <div className={classes.manifestOpeningWrapper}> - <div>{annotation.id}</div> - <MiradorMenuButton - aria-haspopup="true" - aria-label={t('openManifestInOtherWindow', { manifest: annotation.id })} - titleAccess={t('openManifestInOtherWindow', { manifest: annotation.id })} - onClick={(e) => { this.handleOpenManifestSideToSide(e, annotation.id); }} - className={classes.manifestOpeningButton} - > - <PlaylistAddIcon /> - </MiradorMenuButton> - </div> - )} - {annotation.manifestsInContent && annotation.manifestsInContent.map(manifestId => ( - <div className={classes.manifestOpeningWrapper}> - <div>{manifestId}</div> - <MiradorMenuButton - aria-haspopup="true" - aria-label={t('openManifestInOtherWindow')} - titleAccess={t('openManifestInOtherWindow')} - onClick={(e) => { this.handleOpenManifestSideToSide(e, manifestId); }} - className={classes.manifestOpeningButton} - > - <PlaylistAddIcon /> - </MiradorMenuButton> - </div> - ))} - </Typography> - </AccordionDetails> - </Accordion> - </div> - - ) - } + <AnnotationManifestsAccordion + annotation={annotation} + t={t} + /> </ScrollTo> )) } @@ -195,8 +124,6 @@ export class CanvasAnnotations extends Component { } CanvasAnnotations.propTypes = { - addResource: PropTypes.func.isRequired, - addWindow: PropTypes.func.isRequired, annotations: PropTypes.arrayOf( PropTypes.shape({ content: PropTypes.string.isRequired, diff --git a/src/containers/AnnotationManifestsAccordion.js b/src/containers/AnnotationManifestsAccordion.js new file mode 100644 index 0000000000000000000000000000000000000000..18aa4ec1b39fe3e2b627bdc00abd1ce8f858473d --- /dev/null +++ b/src/containers/AnnotationManifestsAccordion.js @@ -0,0 +1,43 @@ +import { compose } from 'redux'; +import { connect } from 'react-redux'; +import { withTranslation } from 'react-i18next'; +import { withStyles } from '@material-ui/core/styles'; +import { withPlugins } from '../extend/withPlugins'; +import { AnnotationManifestsAccordion } from '../components/AnnotationManifestsAccordion'; +import * as actions from '../state/actions'; + +/** For connect */ +const mapStateToProps = (state, { canvasId, windowId }) => ({ +}); + +/** + * mapDispatchToProps - to hook up connect + * @memberof WindowSideBarAnnotationsPanel + * @private + */ +const mapDispatchToProps = { + addResource: actions.addResource, + addWindow: actions.addWindow, +}; + +/** For withStlyes */ +const styles = theme => ({ + manifestOpeningIcon: { + width: '30%', + }, + manifestOpeningLink: { + width: '70%', + }, + manifestOpeningWrapper: { + display: 'flex', + }, +}); + +const enhance = compose( + withTranslation(), + withStyles(styles), + connect(mapStateToProps, mapDispatchToProps), + withPlugins('AnnotationManifestsAccordion'), +); + +export default enhance(AnnotationManifestsAccordion); diff --git a/src/containers/CanvasAnnotations.js b/src/containers/CanvasAnnotations.js index e9efca9c544eda1f65312b095ead9a39df3feea6..3470113912f230f0c5839e546f796cccfa8f9703 100644 --- a/src/containers/CanvasAnnotations.js +++ b/src/containers/CanvasAnnotations.js @@ -46,8 +46,6 @@ const mapStateToProps = (state, { canvasId, windowId }) => ({ * @private */ const mapDispatchToProps = { - addResource: actions.addResource, - addWindow: actions.addWindow, deselectAnnotation: actions.deselectAnnotation, hoverAnnotation: actions.hoverAnnotation, selectAnnotation: actions.selectAnnotation,