From 3ea6f9c1b3fb61c784b428b08798e341b42607f7 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Fri, 1 Sep 2023 17:19:22 +0300
Subject: [PATCH] disable image upload whime uploading

---
 editors/demo/src/HHMI/HHMI.js                 |  2 +-
 .../ImageService/components/ImageUpload.js    | 21 ++++++++++++-------
 .../src/ImageService/fileUpload.js            |  2 ++
 3 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/editors/demo/src/HHMI/HHMI.js b/editors/demo/src/HHMI/HHMI.js
index 35f9e0746..1b9ce865f 100644
--- a/editors/demo/src/HHMI/HHMI.js
+++ b/editors/demo/src/HHMI/HHMI.js
@@ -12,7 +12,7 @@ const renderImage = file => {
     reader.onload = () => accept(reader.result);
     reader.onerror = () => fail(reader.error);
     // Some extra delay to make the asynchronicity visible
-    setTimeout(() => reader.readAsDataURL(file), 4150);
+    setTimeout(() => reader.readAsDataURL(file), 6150);
   });
 };
 
diff --git a/wax-prosemirror-services/src/ImageService/components/ImageUpload.js b/wax-prosemirror-services/src/ImageService/components/ImageUpload.js
index 2dd3a1d32..1be9b56fb 100644
--- a/wax-prosemirror-services/src/ImageService/components/ImageUpload.js
+++ b/wax-prosemirror-services/src/ImageService/components/ImageUpload.js
@@ -1,5 +1,5 @@
 /* eslint react/prop-types: 0 */
-import React, { useContext, useRef, useMemo } from 'react';
+import React, { useContext, useRef, useMemo, useEffect } from 'react';
 import { WaxContext, DocumentHelpers, MenuButton } from 'wax-prosemirror-core';
 import { TextSelection } from 'prosemirror-state';
 import styled from 'styled-components';
@@ -20,6 +20,10 @@ const ImageUpload = ({ item, fileUpload, view }) => {
     pmViews: { main },
   } = context;
 
+  const isEditable = main.props.editable(editable => {
+    return editable;
+  });
+
   const inputRef = useRef(null);
   const placeholderPlugin = app.PmPlugins.get('imagePlaceHolder');
   const imageServiceConfig = app.config.get('config.ImageService');
@@ -60,12 +64,10 @@ const ImageUpload = ({ item, fileUpload, view }) => {
     insertImage(urls, view, placeholderPlugin);
   }
 
-  let isDisabled = !item.select(activeView);
+  const isDisabled =
+    context.options.uploading || !item.select(activeView) || !isEditable;
 
-  const isEditable = main.props.editable(editable => {
-    return editable;
-  });
-  if (!isEditable) isDisabled = true;
+  useEffect(() => {}, []);
 
   const ImageUploadComponent = useMemo(
     () => (
@@ -73,7 +75,11 @@ const ImageUpload = ({ item, fileUpload, view }) => {
         <label htmlFor="file-upload">
           <MenuButton
             active={false}
-            disabled={isDisabled}
+            disabled={
+              context.options.uploading ||
+              !item.select(activeView) ||
+              !isEditable
+            }
             iconName={item.icon}
             onMouseDown={e => {
               e.preventDefault();
@@ -87,6 +93,7 @@ const ImageUpload = ({ item, fileUpload, view }) => {
             id="file-upload"
             onChange={e => {
               fileUpload(e.target.files[0]);
+              context.setOption({ uploading: true });
               if (inputRef.current) inputRef.current.value = '';
             }}
             ref={inputRef}
diff --git a/wax-prosemirror-services/src/ImageService/fileUpload.js b/wax-prosemirror-services/src/ImageService/fileUpload.js
index b5fd0716b..3275e45bd 100644
--- a/wax-prosemirror-services/src/ImageService/fileUpload.js
+++ b/wax-prosemirror-services/src/ImageService/fileUpload.js
@@ -51,10 +51,12 @@ export default (view, fileUpload, placeholderPlugin, context) => file => {
           )
           .setMeta(placeholderPlugin, { remove: { id } }),
       );
+      context.setOption({ uploading: false });
     },
     () => {
       // On failure, just clean up the placeholder
       view.dispatch(tr.setMeta(placeholderPlugin, { remove: { id } }));
+      context.setOption({ uploading: false });
     },
   );
 };
-- 
GitLab