From 5e2505d30c25ec1c4bd1d68a1efb420f2d6df903 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Thu, 10 Mar 2022 18:50:03 +0200
Subject: [PATCH] Yes/No Switch

---
 .../components/SwitchComponent.js             | 79 ++----------------
 .../components/SwitchComponent.js             | 75 ++---------------
 .../components/YesNoSwitch.js                 | 83 +++++++++++++++++++
 3 files changed, 99 insertions(+), 138 deletions(-)
 create mode 100644 wax-prosemirror-services/src/MultipleChoiceQuestionService/components/YesNoSwitch.js

diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/SwitchComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/SwitchComponent.js
index a36386841..7259ea37b 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/SwitchComponent.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/SwitchComponent.js
@@ -4,50 +4,8 @@
 import React, { useState, useContext, useEffect } from 'react';
 import { WaxContext } from 'wax-prosemirror-core';
 import { DocumentHelpers } from 'wax-prosemirror-utilities';
-import { Icon } from 'wax-prosemirror-components';
 import { NodeSelection } from 'prosemirror-state';
-import styled from 'styled-components';
-import Switch from '../../components/Switch';
-
-const StyledSwitch = styled(Switch)`
-  display: flex;
-  margin-left: auto;
-
-  .ant-switch-checked {
-    background-color: green;
-  }
-`;
-
-const AnswerContainer = styled.span`
-  margin-left: auto;
-`;
-
-const Correct = styled.span`
-  margin-right: 10px;
-  span {
-   color: #008000;
-`;
-
-const Answer = styled.span`
-  margin-right: 10px;
-  span {
-    color: ${props => (props.isCorrect ? ' #008000' : 'red')};
-  }
-`;
-
-const StyledIconCorrect = styled(Icon)`
-  fill: #008000;
-  pointer-events: none;
-  height: 24px;
-  width: 24px;
-`;
-
-const StyledIconWrong = styled(Icon)`
-  fill: red;
-  pointer-events: none;
-  height: 24px;
-  width: 24px;
-`;
+import YesNoSwitch from '../../components/YesNoSwitch';
 
 const CustomSwitch = ({ node, getPos }) => {
   const context = useContext(WaxContext);
@@ -126,35 +84,14 @@ const CustomSwitch = ({ node, getPos }) => {
     main.dispatch(tr);
   };
 
-  if (customProps.showFeedBack) {
-    const correct = node.attrs.correct ? 'YES' : 'NO';
-    const answer = node.attrs.answer ? 'YES' : 'NO';
-    const isCorrect = node.attrs.correct === node.attrs.answer;
-
-    return (
-      <AnswerContainer>
-        <Correct>
-          Correct:
-          <span>{correct}</span>
-        </Correct>
-
-        <Answer isCorrect={isCorrect}>
-          Answer: <span>{answer}</span>
-        </Answer>
-        {isCorrect && <StyledIconCorrect name="done" />}
-        {!isCorrect && <StyledIconWrong name="close" />}
-      </AnswerContainer>
-    );
-  }
-
   return (
-    <StyledSwitch
-      checked={isEditable ? checked : checkedAnswerMode}
-      checkedChildren="YES"
-      label="Correct?"
-      labelPosition="left"
-      onChange={handleChange}
-      unCheckedChildren="NO"
+    <YesNoSwitch
+      checked={checked}
+      checkedAnswerMode={checkedAnswerMode}
+      customProps={customProps}
+      handleChange={handleChange}
+      isEditable={isEditable}
+      node={node}
     />
   );
 };
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/SwitchComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/SwitchComponent.js
index 76d2659ac..b0887514e 100644
--- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/SwitchComponent.js
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/SwitchComponent.js
@@ -4,46 +4,7 @@
 import React, { useState, useContext, useEffect } from 'react';
 import { WaxContext } from 'wax-prosemirror-core';
 import { DocumentHelpers } from 'wax-prosemirror-utilities';
-import { Icon } from 'wax-prosemirror-components';
-import styled from 'styled-components';
-import Switch from './Switch';
-
-const StyledSwitch = styled(Switch)`
-  display: flex;
-  margin-left: auto;
-`;
-
-const AnswerContainer = styled.span`
-  margin-left: auto;
-`;
-
-const Correct = styled.span`
-  margin-right: 10px;
-  span {
-    color: #008000;
-  }
-`;
-
-const Answer = styled.span`
-  margin-right: 10px;
-  span {
-    color: ${props => (props.isCorrect ? ' #008000' : 'red')};
-  }
-`;
-
-const StyledIconCorrect = styled(Icon)`
-  fill: #008000;
-  pointer-events: none;
-  height: 24px;
-  width: 24px;
-`;
-
-const StyledIconWrong = styled(Icon)`
-  fill: red;
-  pointer-events: none;
-  height: 24px;
-  width: 24px;
-`;
+import YesNoSwitch from './YesNoSwitch';
 
 const CustomSwitch = ({ node, getPos }) => {
   const context = useContext(WaxContext);
@@ -89,34 +50,14 @@ const CustomSwitch = ({ node, getPos }) => {
     });
   };
 
-  if (customProps.showFeedBack) {
-    const correct = node.attrs.correct ? 'YES' : 'NO';
-    const answer = node.attrs.answer ? 'YES' : 'NO';
-    const isCorrect = node.attrs.correct === node.attrs.answer;
-
-    return (
-      <AnswerContainer>
-        <Correct>
-          Correct:
-          <span>{correct}</span>
-        </Correct>
-
-        <Answer isCorrect={isCorrect}>
-          Answer: <span>{answer}</span>
-        </Answer>
-        {isCorrect && <StyledIconCorrect name="done" />}
-        {!isCorrect && <StyledIconWrong name="close" />}
-      </AnswerContainer>
-    );
-  }
   return (
-    <StyledSwitch
-      checked={isEditable ? checked : checkedAnswerMode}
-      checkedChildren="YES"
-      label="Correct?"
-      labelPosition="left"
-      onChange={handleChange}
-      unCheckedChildren="NO"
+    <YesNoSwitch
+      checked={checked}
+      checkedAnswerMode={checkedAnswerMode}
+      customProps={customProps}
+      handleChange={handleChange}
+      isEditable={isEditable}
+      node={node}
     />
   );
 };
diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/YesNoSwitch.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/YesNoSwitch.js
new file mode 100644
index 000000000..020056983
--- /dev/null
+++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/YesNoSwitch.js
@@ -0,0 +1,83 @@
+/* eslint-disable react/prop-types */
+import React from 'react';
+import styled from 'styled-components';
+import { Icon } from 'wax-prosemirror-components';
+import Switch from './Switch';
+
+const StyledSwitch = styled(Switch)`
+  display: flex;
+  margin-left: auto;
+`;
+
+const AnswerContainer = styled.span`
+  margin-left: auto;
+`;
+
+const Correct = styled.span`
+  margin-right: 10px;
+  span {
+    color: #008000;
+  }
+`;
+
+const Answer = styled.span`
+  margin-right: 10px;
+  span {
+    color: ${props => (props.isCorrect ? ' #008000' : 'red')};
+  }
+`;
+
+const StyledIconCorrect = styled(Icon)`
+  fill: #008000;
+  pointer-events: none;
+  height: 24px;
+  width: 24px;
+`;
+
+const StyledIconWrong = styled(Icon)`
+  fill: red;
+  pointer-events: none;
+  height: 24px;
+  width: 24px;
+`;
+const YesNoSwitch = ({
+  customProps,
+  node,
+  isEditable,
+  handleChange,
+  checked,
+  checkedAnswerMode,
+}) => {
+  if (customProps.showFeedBack) {
+    const correct = node.attrs.correct ? 'YES' : 'NO';
+    const answer = node.attrs.answer ? 'YES' : 'NO';
+    const isCorrect = node.attrs.correct === node.attrs.answer;
+
+    return (
+      <AnswerContainer>
+        <Correct>
+          Correct:
+          <span>{correct}</span>
+        </Correct>
+
+        <Answer isCorrect={isCorrect}>
+          Answer: <span>{answer}</span>
+        </Answer>
+        {isCorrect && <StyledIconCorrect name="done" />}
+        {!isCorrect && <StyledIconWrong name="close" />}
+      </AnswerContainer>
+    );
+  }
+  return (
+    <StyledSwitch
+      checked={isEditable ? checked : checkedAnswerMode}
+      checkedChildren="YES"
+      label="Correct?"
+      labelPosition="left"
+      onChange={handleChange}
+      unCheckedChildren="NO"
+    />
+  );
+};
+
+export default YesNoSwitch;
-- 
GitLab