From a3166f027461f5de16c2c6bed398eb2bcd635863 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Fri, 23 Apr 2021 12:43:22 +0300
Subject: [PATCH] pass dynamic id for each nodeView

---
 .../components/TestComponent.js                |  4 ++--
 wax-prosemirror-core/src/PortalContext.js      |  3 +++
 .../components/PortalComponent.js              | 18 ++++++++++++------
 3 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/components/TestComponent.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/components/TestComponent.js
index 558008049..2be18416a 100644
--- a/editors/demo/src/HHMI/MultipleChoiceQuestionService/components/TestComponent.js
+++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/components/TestComponent.js
@@ -92,7 +92,7 @@ export default ({ node, view, getPos }) => {
     console.log(node.attrs);
     setShowExplanation(true);
     showExp = true;
-    view.dispatch(view.state.tr);
+    // view.dispatch(view.state.tr);
   };
 
   const MemorizedComponent = useMemo(
@@ -110,7 +110,7 @@ export default ({ node, view, getPos }) => {
     <>
       <EditorWrapper ref={setEditorRef} style={styles} />
       <button onClick={clickMe}>Show Explanation</button>
-      {showExp && (
+      {showExplanation && (
         <input type="text" placeholder="type your explanation"></input>
       )}
     </>
diff --git a/wax-prosemirror-core/src/PortalContext.js b/wax-prosemirror-core/src/PortalContext.js
index 78e364e18..8e5b7d9a6 100644
--- a/wax-prosemirror-core/src/PortalContext.js
+++ b/wax-prosemirror-core/src/PortalContext.js
@@ -1,6 +1,7 @@
 /* eslint react/prop-types: 0 */
 /* eslint react/destructuring-assignment: 0 */
 import React, { useState } from 'react';
+import { v4 as uuidv4 } from 'uuid';
 
 export const PortalContext = React.createContext({
   createPortal: () => {},
@@ -13,11 +14,13 @@ export default props => {
     component: {},
     node: {},
     view: {},
+    id: null,
     getPos: () => {},
     decorations: [],
     createPortal: (element, component, node, view, getPos, decorations) => {
       setPortal({
         ...portal,
+        id: uuidv4(),
         element,
         component,
         node,
diff --git a/wax-prosemirror-services/src/PortalService/components/PortalComponent.js b/wax-prosemirror-services/src/PortalService/components/PortalComponent.js
index a27c133f4..f8999f946 100644
--- a/wax-prosemirror-services/src/PortalService/components/PortalComponent.js
+++ b/wax-prosemirror-services/src/PortalService/components/PortalComponent.js
@@ -6,15 +6,21 @@ import { isEmpty } from 'lodash';
 
 export default () => {
   // eslint-disable-next-line no-unused-vars
-  const { element, component, node, view, getPos, decorations } = useContext(
-    PortalContext,
-  );
+  const {
+    element,
+    component,
+    node,
+    view,
+    getPos,
+    decorations,
+    id,
+  } = useContext(PortalContext);
 
   const [portals, setPortals] = useState([]);
 
   useEffect(() => {
     if (!isEmpty(element)) {
-      portals.push({ dom: element, component, active: true });
+      portals.push({ dom: element, component, active: true, id });
       setPortals([...portals]);
     }
   }, [element]);
@@ -22,7 +28,7 @@ export default () => {
   return (
     <>
       {portals.length > 0 &&
-        portals.map(({ dom, component: Component }) => {
+        portals.map(({ dom, component: Component, id }) => {
           return ReactDOM.createPortal(
             <Component
               node={node}
@@ -31,7 +37,7 @@ export default () => {
               decorations={decorations}
             />,
             dom,
-            uuidv4(),
+            id,
           );
         })}
     </>
-- 
GitLab