From af18efeb079fb5b74a9064d46f02191b490c7ceb Mon Sep 17 00:00:00 2001 From: Antoine <antoine.roy@tetras-libre.fr> Date: Fri, 26 Jan 2024 14:45:39 +0100 Subject: [PATCH] =?UTF-8?q?Disable=20bouton=20create=20annotation=20quand?= =?UTF-8?q?=20une=20annotation=20est=20cr=C3=A9=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/containers/miradorAnnotationPlugin.js | 28 +++++++++++++++++++++++ src/plugins/miradorAnnotationPlugin.js | 23 ++++++++++++++----- 2 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 src/containers/miradorAnnotationPlugin.js diff --git a/src/containers/miradorAnnotationPlugin.js b/src/containers/miradorAnnotationPlugin.js new file mode 100644 index 0000000..cdd8a6f --- /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 5bfe3ea..fd209d1 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, -- GitLab