From a8fb3c97ca5f7b561dcfa66d686027cdf9f81753 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Tue, 15 Feb 2022 16:20:47 +0200
Subject: [PATCH] answermode for rest of multiple types

---
 editors/demo/src/HHMI/HHMI.js                 |  6 ++---
 .../components/AnswerComponent.js             |  7 +++++-
 .../components/SwitchComponent.js             | 17 ++++++++++---
 .../components/AnswerComponent.js             |  7 +++++-
 .../components/SwitchComponent.js             | 15 ++++++++++--
 .../components/AnswerComponent.js             |  7 +++++-
 .../components/SwitchComponent.js             | 17 ++++++++++---
 .../components/SwitchComponent.js             | 24 +++++++------------
 8 files changed, 71 insertions(+), 29 deletions(-)

diff --git a/editors/demo/src/HHMI/HHMI.js b/editors/demo/src/HHMI/HHMI.js
index 5d85c3ced..8f01580d9 100644
--- a/editors/demo/src/HHMI/HHMI.js
+++ b/editors/demo/src/HHMI/HHMI.js
@@ -22,7 +22,7 @@ const SubmitButton = styled.button`
   top: 16px;
 `;
 
-const t = `<p class="paragraph"></p><div id="" class="multiple-choice"><div class="multiple-choice-question" id="38de8538-647a-489d-8474-f92d0d256c32"><p class="paragraph">question </p></div><div class="multiple-choice-option" id="debb868e-bbfe-4ba2-bf93-c963153ff791" correct="false" correctanswer="false" feedback="feedback 1"><p class="paragraph">answer 1</p></div><div class="multiple-choice-option" id="810bcf10-4fcb-4d1e-9dab-ce35cbd28527" correct="true" correctanswer="false" feedback="feedback 2"><p class="paragraph">answer 2</p></div></div>`;
+const t = `<p class="paragraph"></p><div id="" class="multiple-choice"><div class="multiple-choice-question" id="38de8538-647a-489d-8474-f92d0d256c32"><p class="paragraph">question </p></div><div class="multiple-choice-option" id="debb868e-bbfe-4ba2-bf93-c963153ff791" correct="false" answer="false" feedback="feedback 1"><p class="paragraph">answer 1</p></div><div class="multiple-choice-option" id="810bcf10-4fcb-4d1e-9dab-ce35cbd28527" correct="true" answer="false" feedback="feedback 2"><p class="paragraph">answer 2</p></div></div>`;
 
 const Hhmi = () => {
   const [submited, isSubmited] = useState(false);
@@ -39,9 +39,9 @@ const Hhmi = () => {
         customValues={{ showFeedBack: submited }}
         fileUpload={file => renderImage(file)}
         value={t}
-        // readonly
+        readonly
         layout={HhmiLayout}
-        onChange={source => console.log(source)}
+        // onChange={source => console.log(source)}
       />
     </>
   );
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/AnswerComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/AnswerComponent.js
index 157a61c4f..c013fc7b7 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/AnswerComponent.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/AnswerComponent.js
@@ -76,6 +76,9 @@ export default ({ node, view, getPos }) => {
     view: { main },
   } = context;
 
+  // eslint-disable-next-line react/destructuring-assignment
+  const customProps = context.view.main.props.customValues;
+
   const isEditable = main.props.editable(editable => {
     return editable;
   });
@@ -176,7 +179,9 @@ export default ({ node, view, getPos }) => {
           <QuestionData>
             <EditorComponent getPos={getPos} node={node} view={view} />
           </QuestionData>
-          <FeedbackComponent getPos={getPos} node={node} view={view} />
+          {!(readOnly && !customProps.showFeedBack) && (
+            <FeedbackComponent getPos={getPos} node={node} view={view} />
+          )}
         </QuestionWrapper>
       </QuestionControlsWrapper>
       <IconsWrapper>
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/SwitchComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/SwitchComponent.js
index 24f3e9981..fe9203524 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/SwitchComponent.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/SwitchComponent.js
@@ -19,10 +19,16 @@ const StyledSwitch = styled(Switch)`
 const CustomSwitch = ({ node, getPos }) => {
   const context = useContext(WaxContext);
   const [checked, setChecked] = useState(false);
+  const [checkedAnswerMode, setCheckedAnswerMode] = useState(false);
   const {
+    view,
     view: { main },
   } = context;
 
+  const isEditable = view.main.props.editable(editable => {
+    return editable;
+  });
+
   useEffect(() => {
     const allNodes = getNodes(main);
     allNodes.forEach(singNode => {
@@ -34,6 +40,11 @@ const CustomSwitch = ({ node, getPos }) => {
 
   const handleChange = () => {
     setChecked(!checked);
+    setCheckedAnswerMode(!checkedAnswerMode);
+
+    const key = isEditable ? 'correct' : 'answer';
+    const value = isEditable ? !checked : !checkedAnswerMode;
+
     main.dispatch(
       main.state.tr.setSelection(
         NodeSelection.create(main.state.doc, getPos()),
@@ -63,7 +74,7 @@ const CustomSwitch = ({ node, getPos }) => {
       ) {
         tr.setNodeMarkup(getPos(), undefined, {
           ...element.attrs,
-          correct: !checked,
+          [key]: value,
         });
       } else if (
         element.type.name === 'multiple_choice_single_correct' &&
@@ -71,7 +82,7 @@ const CustomSwitch = ({ node, getPos }) => {
       ) {
         tr.setNodeMarkup(parentPosition + position + 1, undefined, {
           ...element.attrs,
-          correct: false,
+          [key]: false,
         });
       }
     });
@@ -81,7 +92,7 @@ const CustomSwitch = ({ node, getPos }) => {
 
   return (
     <StyledSwitch
-      checked={checked}
+      checked={isEditable ? checked : checkedAnswerMode}
       checkedChildren="YES"
       label="Correct?"
       labelPosition="left"
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/AnswerComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/AnswerComponent.js
index fda493238..7303a8847 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/AnswerComponent.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/AnswerComponent.js
@@ -1,3 +1,4 @@
+/* eslint-disable react/destructuring-assignment */
 /* eslint-disable react/prop-types */
 import React, { useContext } from 'react';
 import styled from 'styled-components';
@@ -76,6 +77,8 @@ export default ({ node, view, getPos }) => {
     view: { main },
   } = context;
 
+  const customProps = context.view.main.props.customValues;
+
   const isEditable = main.props.editable(editable => {
     return editable;
   });
@@ -176,7 +179,9 @@ export default ({ node, view, getPos }) => {
           <QuestionData>
             <EditorComponent getPos={getPos} node={node} view={view} />
           </QuestionData>
-          <FeedbackComponent getPos={getPos} node={node} view={view} />
+          {!(readOnly && !customProps.showFeedBack) && (
+            <FeedbackComponent getPos={getPos} node={node} view={view} />
+          )}
         </QuestionWrapper>
       </QuestionControlsWrapper>
       <IconsWrapper>
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/SwitchComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/SwitchComponent.js
index 8b3de4318..e30e34754 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/SwitchComponent.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/SwitchComponent.js
@@ -26,10 +26,17 @@ const StyledSwitch = styled(Switch)`
 const CustomSwitch = ({ node, getPos }) => {
   const context = useContext(WaxContext);
   const [checked, setChecked] = useState(false);
+  const [checkedAnswerMode, setCheckedAnswerMode] = useState(false);
+
   const {
+    view,
     view: { main },
   } = context;
 
+  const isEditable = view.main.props.editable(editable => {
+    return editable;
+  });
+
   useEffect(() => {
     const allNodes = getNodes(main);
     allNodes.forEach(singNode => {
@@ -41,13 +48,17 @@ const CustomSwitch = ({ node, getPos }) => {
 
   const handleChange = () => {
     setChecked(!checked);
+    setCheckedAnswerMode(!checkedAnswerMode);
+    const key = isEditable ? 'correct' : 'answer';
+    const value = isEditable ? !checked : !checkedAnswerMode;
     const allNodes = getNodes(main);
+
     allNodes.forEach(singleNode => {
       if (singleNode.node.attrs.id === node.attrs.id) {
         main.dispatch(
           main.state.tr.setNodeMarkup(getPos(), undefined, {
             ...singleNode.node.attrs,
-            correct: !checked,
+            [key]: value,
           }),
         );
       }
@@ -56,7 +67,7 @@ const CustomSwitch = ({ node, getPos }) => {
 
   return (
     <StyledSwitch
-      checked={checked}
+      checked={isEditable ? checked : checkedAnswerMode}
       checkedChildren="True"
       label="True/false?"
       labelPosition="left"
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/AnswerComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/AnswerComponent.js
index 37091b159..665837da3 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/AnswerComponent.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/AnswerComponent.js
@@ -1,3 +1,4 @@
+/* eslint-disable react/destructuring-assignment */
 /* eslint-disable react/prop-types */
 import React, { useContext } from 'react';
 import styled from 'styled-components';
@@ -76,6 +77,8 @@ export default ({ node, view, getPos }) => {
     view: { main },
   } = context;
 
+  const customProps = context.view.main.props.customValues;
+
   const isEditable = main.props.editable(editable => {
     return editable;
   });
@@ -176,7 +179,9 @@ export default ({ node, view, getPos }) => {
           <QuestionData>
             <EditorComponent getPos={getPos} node={node} view={view} />
           </QuestionData>
-          <FeedbackComponent getPos={getPos} node={node} view={view} />
+          {!(readOnly && !customProps.showFeedBack) && (
+            <FeedbackComponent getPos={getPos} node={node} view={view} />
+          )}
         </QuestionWrapper>
       </QuestionControlsWrapper>
       <IconsWrapper>
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/SwitchComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/SwitchComponent.js
index 91169bd35..4826676ba 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/SwitchComponent.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/SwitchComponent.js
@@ -19,10 +19,17 @@ const StyledSwitch = styled(Switch)`
 const CustomSwitch = ({ node, getPos }) => {
   const context = useContext(WaxContext);
   const [checked, setChecked] = useState(false);
+  const [checkedAnswerMode, setCheckedAnswerMode] = useState(false);
+
   const {
+    view,
     view: { main },
   } = context;
 
+  const isEditable = view.main.props.editable(editable => {
+    return editable;
+  });
+
   useEffect(() => {
     const allNodes = getNodes(main);
     allNodes.forEach(singNode => {
@@ -34,6 +41,10 @@ const CustomSwitch = ({ node, getPos }) => {
 
   const handleChange = () => {
     setChecked(!checked);
+    setCheckedAnswerMode(!checkedAnswerMode);
+    const key = isEditable ? 'correct' : 'answer';
+    const value = isEditable ? !checked : !checkedAnswerMode;
+
     main.dispatch(
       main.state.tr.setSelection(
         NodeSelection.create(main.state.doc, getPos()),
@@ -63,7 +74,7 @@ const CustomSwitch = ({ node, getPos }) => {
       ) {
         tr.setNodeMarkup(getPos(), undefined, {
           ...element.attrs,
-          correct: !checked,
+          [key]: value,
         });
       } else if (
         element.type.name === 'true_false_single_correct' &&
@@ -71,7 +82,7 @@ const CustomSwitch = ({ node, getPos }) => {
       ) {
         tr.setNodeMarkup(parentPosition + position + 1, undefined, {
           ...element.attrs,
-          correct: false,
+          [key]: false,
         });
       }
     });
@@ -81,7 +92,7 @@ const CustomSwitch = ({ node, getPos }) => {
 
   return (
     <StyledSwitch
-      checked={checked}
+      checked={isEditable ? checked : checkedAnswerMode}
       checkedChildren="True"
       label="True/false?"
       labelPosition="left"
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/SwitchComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/SwitchComponent.js
index 446f801fb..b4f746399 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/SwitchComponent.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/SwitchComponent.js
@@ -48,24 +48,18 @@ const CustomSwitch = ({ node, getPos }) => {
   const handleChange = () => {
     setChecked(!checked);
     setCheckedAnswerMode(!checkedAnswerMode);
+    const key = isEditable ? 'correct' : 'answer';
+    const value = isEditable ? !checked : !checkedAnswerMode;
     const allNodes = getNodes(main);
+
     allNodes.forEach(singleNode => {
       if (singleNode.node.attrs.id === node.attrs.id) {
-        if (isEditable) {
-          main.dispatch(
-            main.state.tr.setNodeMarkup(getPos(), undefined, {
-              ...singleNode.node.attrs,
-              correct: !checked,
-            }),
-          );
-        } else {
-          main.dispatch(
-            main.state.tr.setNodeMarkup(getPos(), undefined, {
-              ...singleNode.node.attrs,
-              answer: !checkedAnswerMode,
-            }),
-          );
-        }
+        main.dispatch(
+          main.state.tr.setNodeMarkup(getPos(), undefined, {
+            ...singleNode.node.attrs,
+            [key]: value,
+          }),
+        );
       }
     });
   };
-- 
GitLab