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