diff --git a/src/containers/miradorAnnotationPlugin.js b/src/containers/miradorAnnotationPlugin.js new file mode 100644 index 0000000000000000000000000000000000000000..cdd8a6fd7b8cb0eb468d8a167a0a78f9175e75db --- /dev/null +++ b/src/containers/miradorAnnotationPlugin.js @@ -0,0 +1,28 @@ +import { compose } from 'redux'; +import { connect } from 'react-redux'; +import { getWindowViewType } from 'mirador/dist/es/src/state/selectors'; +import { getVisibleCanvases } from 'mirador/dist/es/src/state/selectors/canvases'; +import MiradorAnnotation from '../plugins/miradorAnnotationPlugin'; +import { getCompanionWindowsForContent } from 'mirador/dist/es/src/state/selectors/companionWindows'; + + +function mapStateToProps(state, { targetProps: { windowId } }) { + const annotationCreationCompanionWindows = getCompanionWindowsForContent(state, { content: 'annotationCreation', windowId }); + let annotationEdit = true; + if (Object.keys(annotationCreationCompanionWindows).length !== 0) { + annotationEdit = false; + } + + return { + canvases: getVisibleCanvases(state, { windowId }), + config: state.config, + createAnnotation: annotationEdit, + windowViewType: getWindowViewType(state, { windowId }), + } +}; + +const enhance = compose( + connect(mapStateToProps), +); + +export default enhance(MiradorAnnotation); diff --git a/src/plugins/miradorAnnotationPlugin.js b/src/plugins/miradorAnnotationPlugin.js index 5bfe3ea5eab8452e9821ce004cbadd6f7e6a063d..fd209d11fd2545c6defcc70ac4fafe472bf16332 100644 --- a/src/plugins/miradorAnnotationPlugin.js +++ b/src/plugins/miradorAnnotationPlugin.js @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import AddBoxIcon from '@mui/icons-material/AddBox'; import GetAppIcon from '@mui/icons-material/GetApp'; -import { getWindowViewType } from 'mirador/dist/es/src/state/selectors'; +import {getCompanionWindowsForContent, getWindowViewType} from 'mirador/dist/es/src/state/selectors'; import * as actions from 'mirador/dist/es/src/state/actions'; import { MiradorMenuButton } from 'mirador/dist/es/src/components/MiradorMenuButton'; import { getVisibleCanvases } from 'mirador/dist/es/src/state/selectors/canvases'; @@ -77,6 +77,7 @@ class MiradorAnnotation extends Component { TargetComponent, targetProps, windowViewType, + createAnnotation } = this.props; const { annotationExportDialogOpen, singleCanvasDialogOpen } = this.state; const storageAdapter = config.annotation && config.annotation.adapter('poke'); @@ -91,6 +92,7 @@ class MiradorAnnotation extends Component { aria-label="Create new annotation" onClick={windowViewType === 'single' ? this.handleAnnotationCompanionWindow : this.toggleSingleCanvasDialogOpen} size="small" + disabled={!createAnnotation} > <AddBoxIcon /> </MiradorMenuButton> @@ -142,6 +144,7 @@ MiradorAnnotation.propTypes = { targetProps: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types windowViewType: PropTypes.string.isRequired, closeCompanionWindow: PropTypes.func.isRequired, + createAnnotation: PropTypes.bool.isRequired, }; /** */ @@ -158,12 +161,20 @@ const mapDispatchToProps = (dispatch, props) => ({ }); /** */ -const mapStateToProps = (state, { targetProps: { windowId } }) => ({ - canvases: getVisibleCanvases(state, { windowId }), - config: state.config, - windowViewType: getWindowViewType(state, { windowId }), -}); +function mapStateToProps(state, { targetProps: { windowId } }) { + const annotationCreationCompanionWindows = getCompanionWindowsForContent(state, { content: 'annotationCreation', windowId }); + let annotationEdit = true; + if (Object.keys(annotationCreationCompanionWindows).length !== 0) { + annotationEdit = false; + } + return { + canvases: getVisibleCanvases(state, { windowId }), + config: state.config, + createAnnotation: annotationEdit, + windowViewType: getWindowViewType(state, { windowId }), + } +} export default { component: MiradorAnnotation, mapDispatchToProps,