From 84b78aa59ced17cb2424d021add4d0a94f9efbe1 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Thu, 20 Oct 2022 15:41:10 +0300
Subject: [PATCH] fix feedback insert

---
 editors/demo/src/HHMI/HHMI.js                 |  2 +-
 .../components/FeedbackComponent.js           | 44 +----------------
 .../components/FeedbackComponent.js           | 47 ++-----------------
 .../components/FeedbackComponent.js           | 47 ++-----------------
 .../schema/multipleChoiceNode.js              |  2 +-
 .../components/FeedbackComponent.js           | 47 ++-----------------
 6 files changed, 13 insertions(+), 176 deletions(-)

diff --git a/editors/demo/src/HHMI/HHMI.js b/editors/demo/src/HHMI/HHMI.js
index 2b562b313..a232017d2 100644
--- a/editors/demo/src/HHMI/HHMI.js
+++ b/editors/demo/src/HHMI/HHMI.js
@@ -170,7 +170,7 @@ const Hhmi = () => {
         value={content}
         readonly={readOnly}
         layout={HhmiLayout}
-        // onChange={source => console.log(source)}
+        onChange={source => console.log(source)}
       />
     </>
   );
diff --git a/wax-prosemirror-services/src/FillTheGapQuestionService/components/FeedbackComponent.js b/wax-prosemirror-services/src/FillTheGapQuestionService/components/FeedbackComponent.js
index 0928bfd37..71dc5a0e3 100644
--- a/wax-prosemirror-services/src/FillTheGapQuestionService/components/FeedbackComponent.js
+++ b/wax-prosemirror-services/src/FillTheGapQuestionService/components/FeedbackComponent.js
@@ -37,42 +37,11 @@ export default ({ node, view, getPos, readOnly }) => {
   const {
     pmViews: { main },
   } = context;
-  const [feedBack, setFeedBack] = useState(' ');
-  const [isFirstRun, setFirstRun] = useState(true);
-  const [typing, setTyping] = useState(false);
+  const [feedBack, setFeedBack] = useState(node.attrs.feedback);
   const feedBackRef = useRef(null);
 
-  useEffect(() => {
-    const allNodes = getNodes(main);
-    allNodes.forEach(singleNode => {
-      if (singleNode.node.attrs.id === node.attrs.id) {
-        if (!typing || context.transaction.meta.inputType === 'Redo') {
-          setFeedBack(singleNode.node.attrs.feedback);
-        }
-        if (!isFirstRun) {
-          if (singleNode.node.attrs.feedback === '')
-            setFeedBack(singleNode.node.attrs.feedback);
-        }
-      }
-    });
-  }, [getNodes(main)]);
-
-  const handleKeyDown = e => {
-    setTyping(true);
-    if (e.key === 'Backspace') {
-      main.dispatch(
-        main.state.tr.setSelection(
-          TextSelection.create(main.state.tr.doc, null),
-        ),
-      );
-    }
-  };
-
   const feedBackInput = () => {
     setFeedBack(feedBackRef.current.value);
-  };
-
-  const saveFeedBack = () => {
     const allNodes = getNodes(main);
     allNodes.forEach(singleNode => {
       if (singleNode.node.attrs.id === node.attrs.id) {
@@ -82,27 +51,18 @@ export default ({ node, view, getPos, readOnly }) => {
             feedback: feedBack,
           }),
         );
-        setFirstRun(false);
       }
     });
     return false;
   };
 
-  const onFocus = () => {
-    main.dispatch(
-      main.state.tr.setSelection(TextSelection.create(main.state.tr.doc, null)),
-    );
-  };
-
   return (
     <FeedBack>
       <FeedBackLabel>Feedback</FeedBackLabel>
       <FeedBackInput
+        autoFocus="autoFocus"
         disabled={readOnly}
-        onBlur={saveFeedBack}
         onChange={feedBackInput}
-        onFocus={onFocus}
-        onKeyDown={handleKeyDown}
         placeholder="Insert feedback"
         ref={feedBackRef}
         type="text"
diff --git a/wax-prosemirror-services/src/MatchingService/components/FeedbackComponent.js b/wax-prosemirror-services/src/MatchingService/components/FeedbackComponent.js
index 7e95320ce..b32fba7fb 100644
--- a/wax-prosemirror-services/src/MatchingService/components/FeedbackComponent.js
+++ b/wax-prosemirror-services/src/MatchingService/components/FeedbackComponent.js
@@ -1,8 +1,7 @@
 /* eslint-disable react/prop-types */
 
-import React, { useContext, useRef, useState, useEffect } from 'react';
+import React, { useContext, useRef, useState } from 'react';
 import styled from 'styled-components';
-import { TextSelection } from 'prosemirror-state';
 import { WaxContext } from 'wax-prosemirror-core';
 import { DocumentHelpers } from 'wax-prosemirror-utilities';
 
@@ -36,42 +35,11 @@ export default ({ node, view, getPos, readOnly }) => {
   const {
     pmViews: { main },
   } = context;
-  const [feedBack, setFeedBack] = useState('');
-  const [isFirstRun, setFirstRun] = useState(true);
-  const [typing, setTyping] = useState(false);
+  const [feedBack, setFeedBack] = useState(node.attrs.feedback);
   const feedBackRef = useRef(null);
 
-  useEffect(() => {
-    const allNodes = getNodes(main);
-    allNodes.forEach(singleNode => {
-      if (singleNode.node.attrs.id === node.attrs.id) {
-        if (!typing || context.transaction.meta.inputType === 'Redo') {
-          setFeedBack(singleNode.node.attrs.feedback);
-        }
-        if (!isFirstRun) {
-          if (singleNode.node.attrs.feedback === '')
-            setFeedBack(singleNode.node.attrs.feedback);
-        }
-      }
-    });
-  }, [getNodes(main)]);
-
-  const handleKeyDown = e => {
-    setTyping(true);
-    if (e.key === 'Backspace') {
-      main.dispatch(
-        main.state.tr.setSelection(
-          TextSelection.create(main.state.tr.doc, null),
-        ),
-      );
-    }
-  };
-
   const feedBackInput = () => {
     setFeedBack(feedBackRef.current.value);
-  };
-
-  const saveFeedBack = () => {
     const allNodes = getNodes(main);
     allNodes.forEach(singleNode => {
       if (singleNode.node.attrs.id === node.attrs.id) {
@@ -81,27 +49,18 @@ export default ({ node, view, getPos, readOnly }) => {
             feedback: feedBack,
           }),
         );
-        setFirstRun(false);
       }
     });
     return false;
   };
 
-  const onFocus = () => {
-    main.dispatch(
-      main.state.tr.setSelection(TextSelection.create(main.state.tr.doc, null)),
-    );
-  };
-
   return (
     <FeedBack>
       <FeedBackLabel>Feedback</FeedBackLabel>
       <FeedBackInput
+        autoFocus="autoFocus"
         disabled={readOnly}
-        onBlur={saveFeedBack}
         onChange={feedBackInput}
-        onFocus={onFocus}
-        onKeyDown={handleKeyDown}
         placeholder="Insert feedback"
         ref={feedBackRef}
         type="text"
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/FeedbackComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/FeedbackComponent.js
index 9de6f0ca4..24fb9e3a8 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/FeedbackComponent.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/FeedbackComponent.js
@@ -1,8 +1,7 @@
 /* eslint-disable react/prop-types */
 
-import React, { useContext, useRef, useState, useEffect } from 'react';
+import React, { useContext, useRef, useState } from 'react';
 import styled from 'styled-components';
-import { TextSelection } from 'prosemirror-state';
 import { WaxContext } from 'wax-prosemirror-core';
 import { DocumentHelpers } from 'wax-prosemirror-utilities';
 
@@ -36,42 +35,11 @@ export default ({ node, view, getPos, readOnly }) => {
     pmViews: { main },
   } = context;
 
-  const [feedBack, setFeedBack] = useState(' ');
-  const [isFirstRun, setFirstRun] = useState(true);
-  const [typing, setTyping] = useState(false);
+  const [feedBack, setFeedBack] = useState(node.attrs.feedback);
   const feedBackRef = useRef(null);
 
-  useEffect(() => {
-    const allNodes = getNodes(main);
-    allNodes.forEach(singleNode => {
-      if (singleNode.node.attrs.id === node.attrs.id) {
-        if (!typing || context.transaction.meta.inputType === 'Redo') {
-          setFeedBack(singleNode.node.attrs.feedback);
-        }
-        if (!isFirstRun) {
-          if (singleNode.node.attrs.feedback === '')
-            setFeedBack(singleNode.node.attrs.feedback);
-        }
-      }
-    });
-  }, [getNodes(main)]);
-
-  const handleKeyDown = e => {
-    setTyping(true);
-    if (e.key === 'Backspace') {
-      main.dispatch(
-        main.state.tr.setSelection(
-          TextSelection.create(main.state.tr.doc, null),
-        ),
-      );
-    }
-  };
-
   const feedBackInput = () => {
     setFeedBack(feedBackRef.current.value);
-  };
-
-  const saveFeedBack = () => {
     const allNodes = getNodes(main);
     allNodes.forEach(singleNode => {
       if (singleNode.node.attrs.id === node.attrs.id) {
@@ -81,26 +49,17 @@ export default ({ node, view, getPos, readOnly }) => {
             feedback: feedBack,
           }),
         );
-        setFirstRun(false);
       }
     });
     return false;
   };
 
-  const onFocus = () => {
-    main.dispatch(
-      main.state.tr.setSelection(TextSelection.create(main.state.tr.doc, null)),
-    );
-  };
-
   return (
     <FeedBack>
       <FeedBackLabel>Feedback</FeedBackLabel>
       <FeedBackInput
-        onBlur={saveFeedBack}
+        autoFocus="autoFocus"
         onChange={feedBackInput}
-        onFocus={onFocus}
-        onKeyDown={handleKeyDown}
         placeholder="Insert feedback"
         readOnly={readOnly}
         ref={feedBackRef}
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/schema/multipleChoiceNode.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/schema/multipleChoiceNode.js
index 5eea97cc0..daf0168fa 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/schema/multipleChoiceNode.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/schema/multipleChoiceNode.js
@@ -7,7 +7,7 @@ const multipleChoiceNode = {
     feedback: { default: '' },
   },
   group: 'block questions',
-  content: 'block+',
+  content: 'block*',
   defining: true,
   parseDOM: [
     {
diff --git a/wax-prosemirror-services/src/MultipleDropDownService/components/FeedbackComponent.js b/wax-prosemirror-services/src/MultipleDropDownService/components/FeedbackComponent.js
index d9a4b68f7..dcea073ae 100644
--- a/wax-prosemirror-services/src/MultipleDropDownService/components/FeedbackComponent.js
+++ b/wax-prosemirror-services/src/MultipleDropDownService/components/FeedbackComponent.js
@@ -1,8 +1,7 @@
 /* eslint-disable react/prop-types */
 
-import React, { useContext, useRef, useState, useEffect } from 'react';
+import React, { useContext, useRef, useState } from 'react';
 import styled from 'styled-components';
-import { TextSelection } from 'prosemirror-state';
 import { WaxContext } from 'wax-prosemirror-core';
 import { DocumentHelpers } from 'wax-prosemirror-utilities';
 
@@ -37,42 +36,11 @@ export default ({ node, view, getPos, readOnly }) => {
   const {
     pmViews: { main },
   } = context;
-  const [feedBack, setFeedBack] = useState(' ');
-  const [isFirstRun, setFirstRun] = useState(true);
-  const [typing, setTyping] = useState(false);
+  const [feedBack, setFeedBack] = useState(node.attrs.feedback);
   const feedBackRef = useRef(null);
 
-  useEffect(() => {
-    const allNodes = getNodes(main);
-    allNodes.forEach(singleNode => {
-      if (singleNode.node.attrs.id === node.attrs.id) {
-        if (!typing || context.transaction.meta.inputType === 'Redo') {
-          setFeedBack(singleNode.node.attrs.feedback);
-        }
-        if (!isFirstRun) {
-          if (singleNode.node.attrs.feedback === '')
-            setFeedBack(singleNode.node.attrs.feedback);
-        }
-      }
-    });
-  }, [getNodes(main)]);
-
-  const handleKeyDown = e => {
-    setTyping(true);
-    if (e.key === 'Backspace') {
-      main.dispatch(
-        main.state.tr.setSelection(
-          TextSelection.create(main.state.tr.doc, null),
-        ),
-      );
-    }
-  };
-
   const feedBackInput = () => {
     setFeedBack(feedBackRef.current.value);
-  };
-
-  const saveFeedBack = () => {
     const allNodes = getNodes(main);
     allNodes.forEach(singleNode => {
       if (singleNode.node.attrs.id === node.attrs.id) {
@@ -82,27 +50,18 @@ export default ({ node, view, getPos, readOnly }) => {
             feedback: feedBack,
           }),
         );
-        setFirstRun(false);
       }
     });
     return false;
   };
 
-  const onFocus = () => {
-    main.dispatch(
-      main.state.tr.setSelection(TextSelection.create(main.state.tr.doc, null)),
-    );
-  };
-
   return (
     <FeedBack>
       <FeedBackLabel>Feedback</FeedBackLabel>
       <FeedBackInput
+        autoFocus="autoFocus"
         disabled={readOnly}
-        onBlur={saveFeedBack}
         onChange={feedBackInput}
-        onFocus={onFocus}
-        onKeyDown={handleKeyDown}
         placeholder="Insert feedback"
         ref={feedBackRef}
         type="text"
-- 
GitLab