diff --git a/src/components/AnnotationManifestsAccordion.js b/src/components/AnnotationManifestsAccordion.js index 749330b99e8777f0c74b35af0653534569c4f834..cf76c6a91374ebda7013ee9800218308d2dc6499 100644 --- a/src/components/AnnotationManifestsAccordion.js +++ b/src/components/AnnotationManifestsAccordion.js @@ -22,26 +22,6 @@ 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 }; } @@ -57,7 +37,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) => { @@ -75,20 +55,27 @@ export class AnnotationManifestsAccordion extends Component { this.setState({ annotation }); } }); - e.stopPropagation(); + e.stopPropagation(); */ + + // We work onlu on the first manifest + + /* const { + fetchManifest + } = this.props; + fetchManifest(annotation.manifests[0]); */ + } /** */ render() { const { - classes, t, i18n, + classes, t, i18n, manifests } = this.props; const language = i18n.language; - const { annotation } = this.state; - if (annotation.manifests === null || annotation.manifests.length === 0) { + if (manifests === null || manifests.length === 0) { return null; } @@ -102,8 +89,8 @@ export class AnnotationManifestsAccordion extends Component { <Typography className={classes.heading}>{t('manifestFound')}</Typography> </AccordionSummary> <AccordionDetails className={classes.manifestContainer}> - {annotation.manifests.map(manifest => ( - <Typography > + {manifests.map(manifest => ( + <Typography> <Card className={classes.root}> <CardActionArea> <CardContent> @@ -142,15 +129,20 @@ 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 257810aa2f135d70a8d90550bc757d21e095d57e..fa5da4364c1dbe375118abbf4bddacaf9ab980f0 100644 --- a/src/containers/AnnotationManifestsAccordion.js +++ b/src/containers/AnnotationManifestsAccordion.js @@ -5,12 +5,33 @@ 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 } from '../state/selectors'; +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; +} /** For connect */ -const mapStateToProps = (state, { canvasId, windowId }) => ({ - htmlSanitizationRuleSet: getConfig(state).annotations.htmlSanitizationRuleSet, -}); +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 }), + }; +}; /** * mapDispatchToProps - to hook up connect @@ -20,6 +41,7 @@ const mapStateToProps = (state, { canvasId, windowId }) => ({ const mapDispatchToProps = { addResource: actions.addResource, addWindow: actions.addWindow, + }; /** For withStyles */