diff --git a/src/components/AnnotationManifestsAccordion.js b/src/components/AnnotationManifestsAccordion.js index cf76c6a91374ebda7013ee9800218308d2dc6499..749330b99e8777f0c74b35af0653534569c4f834 100644 --- a/src/components/AnnotationManifestsAccordion.js +++ b/src/components/AnnotationManifestsAccordion.js @@ -22,6 +22,26 @@ export class AnnotationManifestsAccordion extends Component { super(props); this.handleOpenManifestSideToSide = this.handleOpenManifestSideToSide.bind(this); this.handleOpenAccordion = this.handleOpenAccordion.bind(this); + + /** Search if the annotation is a manifest. URL must be resolvable for the annotation. So the manifest url is added at the end of the id */ + function searchManifestInID(id) { + const match = id.match( + /((http|https)\:\/\/[a-z0-9\/:%_+.,#?!@&=-]+)#((http|https)\:\/\/[a-z0-9\/:%_+.,#?!@&=-]+)/gi, + ); + + return match ? match[0].split('#').slice(-1) : null; + } + + const { annotation } = this.props; + + annotation.manifests = searchManifestInID(annotation.id); + if (annotation.manifests) { + annotation.manifests = annotation.manifests.map(id => ({ id })); + } else { + annotation.manifests = []; + } + + this.state = { annotation }; } @@ -37,7 +57,7 @@ export class AnnotationManifestsAccordion extends Component { handleOpenAccordion(e) { const { annotation } = this.state; /** */ - /* async function load(manifests) { + async function load(manifests) { return Promise.all(manifests.map((manifest) => fetch(manifest.id) .then((response) => response.json()) .then((data) => { @@ -55,27 +75,20 @@ export class AnnotationManifestsAccordion extends Component { this.setState({ annotation }); } }); - e.stopPropagation(); */ - - // We work onlu on the first manifest - - /* const { - fetchManifest - } = this.props; - fetchManifest(annotation.manifests[0]); */ - + e.stopPropagation(); } /** */ render() { const { - classes, t, i18n, manifests + classes, t, i18n, } = this.props; const language = i18n.language; + const { annotation } = this.state; - if (manifests === null || manifests.length === 0) { + if (annotation.manifests === null || annotation.manifests.length === 0) { return null; } @@ -89,8 +102,8 @@ export class AnnotationManifestsAccordion extends Component { <Typography className={classes.heading}>{t('manifestFound')}</Typography> </AccordionSummary> <AccordionDetails className={classes.manifestContainer}> - {manifests.map(manifest => ( - <Typography> + {annotation.manifests.map(manifest => ( + <Typography > <Card className={classes.root}> <CardActionArea> <CardContent> @@ -129,20 +142,15 @@ AnnotationManifestsAccordion.propsTypes = { { content: PropTypes.string, id: PropTypes.string, - + manifests: PropTypes.arrayOf(PropTypes.string), }, ), classes: PropTypes.objectOf(PropTypes.string), - fetchManifest: PropTypes.func.isRequired, - manifests: PropTypes.arrayOf(PropTypes.string), t: PropTypes.func.isRequired, - thumbnail: PropTypes.string, - title: PropTypes.string, }; AnnotationManifestsAccordion.defaultProps = { classes: {}, htmlSanitizationRuleSet: 'iiif', listContainerComponent: 'li', - manifests: [], }; diff --git a/src/containers/AnnotationManifestsAccordion.js b/src/containers/AnnotationManifestsAccordion.js index fa5da4364c1dbe375118abbf4bddacaf9ab980f0..257810aa2f135d70a8d90550bc757d21e095d57e 100644 --- a/src/containers/AnnotationManifestsAccordion.js +++ b/src/containers/AnnotationManifestsAccordion.js @@ -5,33 +5,12 @@ import { withStyles } from '@material-ui/core/styles'; import { withPlugins } from '../extend/withPlugins'; import { AnnotationManifestsAccordion } from '../components/AnnotationManifestsAccordion'; import * as actions from '../state/actions'; -import { - getConfig, getManifest, - getManifestTitle, getManifestThumbnail, getCanvases, - getManifestLogo, getManifestProvider, getWindowManifests, - getManifestoInstance, getSequenceBehaviors, getManifestDescription, -} from '../state/selectors'; - -/** Search if the annotation is a manifest. URL must be resolvable for the annotation. So the manifest url is added at the end of the id */ -function searchManifestInID(id) { - const match = id.match( - /((http|https)\:\/\/[a-z0-9\/:%_+.,#?!@&=-]+)#((http|https)\:\/\/[a-z0-9\/:%_+.,#?!@&=-]+)/gi, - ); - - return match ? match[0].split('#').slice(-1) : null; -} +import { getConfig } from '../state/selectors'; /** For connect */ -const mapStateToProps = (state, { annotation }) => { - const manifestId = searchManifestInID(annotation.id); - - return { - htmlSanitizationRuleSet: getConfig(state).annotations.htmlSanitizationRuleSet, - manifests: new Array(manifestId), - thumbnail: getManifestThumbnail(state, { manifestId }), - title: getManifestTitle(state, { manifestId }), - }; -}; +const mapStateToProps = (state, { canvasId, windowId }) => ({ + htmlSanitizationRuleSet: getConfig(state).annotations.htmlSanitizationRuleSet, +}); /** * mapDispatchToProps - to hook up connect @@ -41,7 +20,6 @@ const mapStateToProps = (state, { annotation }) => { const mapDispatchToProps = { addResource: actions.addResource, addWindow: actions.addWindow, - }; /** For withStyles */