From ddffd256724735433076cafdfad0ae398331d6a4 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Fri, 28 Jun 2024 19:35:26 +0300
Subject: [PATCH] fix updating context

---
 wax-prosemirror-core/src/Wax.js               |  4 +-
 wax-prosemirror-core/src/useWaxView.js        | 64 ++++++++-----------
 .../components/FullScreenButton.js            |  1 -
 .../NumericalAnswerDropDownCompontent.js      | 11 ----
 4 files changed, 31 insertions(+), 49 deletions(-)

diff --git a/wax-prosemirror-core/src/Wax.js b/wax-prosemirror-core/src/Wax.js
index bb3e37b3e..cf035dba6 100644
--- a/wax-prosemirror-core/src/Wax.js
+++ b/wax-prosemirror-core/src/Wax.js
@@ -56,13 +56,14 @@ const Wax = forwardRef((props, innerViewRef) => {
   const [application, setApplication] = useState();
   const [WaxLayout, setWaxLayout] = useState(null);
   const configHash = createConfigWithHash(config);
-
+  console.log(configHash);
   useEffect(() => {
     const newApplication = createApplication(props);
     setApplication(newApplication);
     const Layout = newApplication.container.get('Layout');
     if (layout) Layout.setLayout(layout);
     setWaxLayout(Layout.layoutComponent);
+    setTimeout(() => {}, 100);
   }, [configHash]);
 
   const finalOnChange = content => {
@@ -78,6 +79,7 @@ const Wax = forwardRef((props, innerViewRef) => {
         autoFocus={autoFocus}
         browserSpellCheck={browserSpellCheck}
         className={className}
+        configHash={configHash}
         customValues={customValues}
         fileUpload={fileUpload}
         innerViewRef={innerViewRef}
diff --git a/wax-prosemirror-core/src/useWaxView.js b/wax-prosemirror-core/src/useWaxView.js
index b70051292..8844d3504 100644
--- a/wax-prosemirror-core/src/useWaxView.js
+++ b/wax-prosemirror-core/src/useWaxView.js
@@ -9,6 +9,7 @@ import helpers from './helpers/helpers';
 import './styles/styles.css';
 
 let previousDoc;
+let currentCofingHash;
 
 const useWaxView = props => {
   const {
@@ -18,6 +19,7 @@ const useWaxView = props => {
     autoFocus,
     user,
     innerViewRef,
+    configHash,
     targetFormat,
     serializer,
     scrollMargin,
@@ -58,17 +60,6 @@ const useWaxView = props => {
       attributes: {
         spellcheck: browserSpellCheck ? 'true' : 'false',
       },
-      handleDOMEvents: {
-        focus() {
-          // return udpateEditorContext(view);
-        },
-        mousedown: () => {
-          return udpateEditorContext(view);
-        },
-      },
-      handleKeyDown: () => {
-        return udpateEditorContext(view);
-      },
     });
 
     setWaxView(view);
@@ -90,17 +81,6 @@ const useWaxView = props => {
     return () => (view = null);
   }, []);
 
-  const udpateEditorContext = editorView => {
-    setTimeout(() => {
-      context.updateView(
-        {
-          main: editorView,
-        },
-        'main',
-      );
-    }, 50);
-  };
-
   useImperativeHandle(innerViewRef, () => ({
     getContent() {
       return helpers.getDocContent(schema, serializer, targetFormat, context);
@@ -108,24 +88,36 @@ const useWaxView = props => {
   }));
 
   const dispatchTransaction = transaction => {
-    const { TrackChange } = props;
-    const tr =
-      TrackChange && TrackChange.enabled
-        ? trackedTransaction(transaction, view.state, user, context)
-        : transaction;
+    if (currentCofingHash === configHash) {
+      const { TrackChange } = props;
+      const tr =
+        TrackChange && TrackChange.enabled
+          ? trackedTransaction(transaction, view.state, user, context)
+          : transaction;
 
-    if (!view) return;
+      if (!view) return;
 
-    previousDoc = view.state.doc;
-    const state = view.state.apply(tr);
-    view.updateState(state);
+      previousDoc = view.state.doc;
+      const state = view.state.apply(tr);
+      view.updateState(state);
 
-    context.setTransaction(transaction);
+      context.setTransaction(transaction);
 
-    const docContent =
-      targetFormat === 'JSON' ? state.doc.toJSON() : state.doc.content;
-    if (!previousDoc.eq(view.state.doc) || tr.getMeta('forceUpdate'))
-      onChange(docContent);
+      context.updateView(
+        {
+          main: view,
+        },
+        'main',
+      );
+
+      const docContent =
+        targetFormat === 'JSON' ? state.doc.toJSON() : state.doc.content;
+      if (!previousDoc.eq(view.state.doc) || tr.getMeta('forceUpdate'))
+        onChange(docContent);
+    }
+    setTimeout(() => {
+      currentCofingHash = configHash;
+    }, 100);
   };
 
   return WaxView;
diff --git a/wax-prosemirror-services/src/FullScreenService/components/FullScreenButton.js b/wax-prosemirror-services/src/FullScreenService/components/FullScreenButton.js
index c744d370f..0a57885a9 100644
--- a/wax-prosemirror-services/src/FullScreenService/components/FullScreenButton.js
+++ b/wax-prosemirror-services/src/FullScreenService/components/FullScreenButton.js
@@ -15,7 +15,6 @@ const FullScreenButton = ({ view = {}, item }) => {
   const { state } = view;
 
   const handleMouseDown = e => {
-    context.updateView({}, 'main');
     e.preventDefault();
     Object.assign(options, { fullScreen: !options.fullScreen });
     activeView.dispatch(
diff --git a/wax-questions-service/src/NumericalAnswerService/components/NumericalAnswerDropDownCompontent.js b/wax-questions-service/src/NumericalAnswerService/components/NumericalAnswerDropDownCompontent.js
index 249bd2e58..c80ea7c78 100644
--- a/wax-questions-service/src/NumericalAnswerService/components/NumericalAnswerDropDownCompontent.js
+++ b/wax-questions-service/src/NumericalAnswerService/components/NumericalAnswerDropDownCompontent.js
@@ -140,7 +140,6 @@ const NumericalAnswerDropDownCompontent = ({ node }) => {
 
   const onKeyDown = (e, index) => {
     e.preventDefault();
-    updateWaxView();
     // arrow down
     if (e.keyCode === 40) {
       if (index === itemRefs.current.length - 1) {
@@ -192,7 +191,6 @@ const NumericalAnswerDropDownCompontent = ({ node }) => {
   };
 
   const onChange = option => {
-    updateWaxView();
     context.setOption({ [node.attrs.id]: { numericalAnswer: option.value } });
     setLabel(option.label);
     openCloseMenu();
@@ -200,15 +198,6 @@ const NumericalAnswerDropDownCompontent = ({ node }) => {
     activeView.focus();
   };
 
-  const updateWaxView = () => {
-    context.updateView(
-      {
-        main: context.pmViews.main,
-      },
-      'main',
-    );
-  };
-
   const NumericalAnswerDropDown = useMemo(
     () => (
       <Wrapper disabled={isDisabled} ref={wrapperRef}>
-- 
GitLab