From 45b795a5857dc208717ecca56283e6e51309307e Mon Sep 17 00:00:00 2001
From: Giannis kopanas <jkopanas@gmail.com>
Date: Fri, 28 May 2021 21:05:01 +0300
Subject: [PATCH] fix(core): portals node id

---
 .../components/EditorComponent.js             |  1 +
 wax-prosemirror-core/src/PortalContext.js     | 16 ++---
 .../components/PortalComponent.js             | 58 ++++++++-----------
 3 files changed, 32 insertions(+), 43 deletions(-)

diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/components/EditorComponent.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/components/EditorComponent.js
index 4cec8c470..6ef4e680d 100644
--- a/editors/demo/src/HHMI/MultipleChoiceQuestionService/components/EditorComponent.js
+++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/components/EditorComponent.js
@@ -20,6 +20,7 @@ const EditorComponent = ({ node, view, getPos }) => {
   });
 
   if (context.activeViewId === node.attrs.id) {
+    console.log(node.attrs.id, "matched")
   }
 
   useEffect(() => {
diff --git a/wax-prosemirror-core/src/PortalContext.js b/wax-prosemirror-core/src/PortalContext.js
index 4a8f32447..ce92373a5 100644
--- a/wax-prosemirror-core/src/PortalContext.js
+++ b/wax-prosemirror-core/src/PortalContext.js
@@ -10,14 +10,6 @@ export const PortalContext = React.createContext({
 
 export default props => {
   const [portal, setPortal] = useState({
-    element: {},
-    component: {},
-    node: {},
-    view: {},
-    id: null,
-    getPos: () => {},
-    decorations: [],
-    context: {},
     createPortal: (
       element,
       component,
@@ -28,8 +20,7 @@ export default props => {
       context,
     ) => {
       setTimeout(() => {
-        setPortal({
-          ...portal,
+        portal.portals.push({
           id: uuidv4(),
           element,
           component,
@@ -39,8 +30,13 @@ export default props => {
           decorations,
           context,
         });
+        setPortal({
+          createPortal: portal.createPortal,
+          portals: [...portal.portals],
+        });
       });
     },
+    portals: [],
   });
 
   return (
diff --git a/wax-prosemirror-services/src/PortalService/components/PortalComponent.js b/wax-prosemirror-services/src/PortalService/components/PortalComponent.js
index 520c5d391..3f3cf8813 100644
--- a/wax-prosemirror-services/src/PortalService/components/PortalComponent.js
+++ b/wax-prosemirror-services/src/PortalService/components/PortalComponent.js
@@ -1,45 +1,37 @@
-import React, { useContext, useEffect, useState } from 'react';
+import React, { useContext } from 'react';
 import { PortalContext } from 'wax-prosemirror-core';
 import ReactDOM from 'react-dom';
-import { isEmpty } from 'lodash';
+// import { isEmpty } from 'lodash';
 
 export default () => {
-  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, id });
-      setPortals([...portals]);
-    }
-  }, [element]);
+  const { portals } = useContext(PortalContext);
 
   return (
     <>
       {portals.length > 0 &&
-        // eslint-disable-next-line no-shadow
-        portals.map(({ dom, component: Component, id }) => {
-          return ReactDOM.createPortal(
-            <Component
-              key={id}
-              decorations={decorations}
-              getPos={getPos}
-              node={node}
-              view={view}
-            />,
-            dom,
+        portals.map(
+          ({
+            element,
+            component: Component,
             id,
-          );
-        })}
+            decorations,
+            node,
+            view,
+            getPos,
+          }) => {
+            return ReactDOM.createPortal(
+              <Component
+                decorations={decorations}
+                getPos={getPos}
+                key={id}
+                node={node}
+                view={view}
+              />,
+              element,
+              id,
+            );
+          },
+        )}
     </>
   );
 };
-- 
GitLab