diff --git a/editors/demo/src/HHMI/HHMI.js b/editors/demo/src/HHMI/HHMI.js index ed078b6555ec5cdb075a3f0206f11ac8e942f17b..c34a0449aaab258cf0deab9234dd1953ad824535 100644 --- a/editors/demo/src/HHMI/HHMI.js +++ b/editors/demo/src/HHMI/HHMI.js @@ -99,41 +99,53 @@ const initialContent = `<p class="paragraph"></p> </div>`; const Hhmi = () => { - const [submitted, isSubmitted] = useState(false); - const [readOnly, isReadOnly] = useState(false); - const [testMode, isTestMode] = useState(false); - const [content, setContent] = useState(initialContent); + const [stateProps, setStateProps] = useState({ + readOnly: false, + testMode: false, + submitted: false, + content: initialContent, + }); const normalQuestions = () => { - isReadOnly(false); - isTestMode(false); - isSubmitted(false); - setContent(editorRef.current.getContent()); + setStateProps({ + readOnly: false, + testMode: false, + submitted: false, + content: editorRef.current.getContent(), + }); }; const readOnlyQuestions = () => { - isReadOnly(true); - isTestMode(false); - isSubmitted(false); - setContent(editorRef.current.getContent()); + setStateProps({ + readOnly: true, + testMode: false, + submitted: false, + content: editorRef.current.getContent(), + }); }; const testModeQuestions = () => { - isReadOnly(true); - isTestMode(true); - isSubmitted(false); - setContent(editorRef.current.getContent()); + setStateProps({ + readOnly: true, + testMode: true, + submitted: false, + content: editorRef.current.getContent(), + }); }; const submitQuestions = () => { - isReadOnly(true); - isTestMode(false); - isSubmitted(true); - setContent(editorRef.current.getContent()); + setStateProps({ + readOnly: true, + testMode: false, + submitted: true, + content: editorRef.current.getContent(), + }); }; const editorRef = useRef(); + const { readOnly, testMode, submitted, content } = stateProps; + return ( <> <NormalButton isActive={!readOnly} onClick={normalQuestions}> @@ -158,10 +170,10 @@ const Hhmi = () => { ref={editorRef} customValues={{ showFeedBack: submitted, testMode }} fileUpload={file => renderImage(file)} - // value={content} + value={content} readonly={readOnly} layout={HhmiLayout} - onChange={source => console.log(source)} + // onChange={source => console.log(source)} /> </> ); diff --git a/wax-prosemirror-services/src/MatchingService/components/DropDownComponent.js b/wax-prosemirror-services/src/MatchingService/components/DropDownComponent.js index 4dfbba33502713291f1d07c76bc0e19ed6a754be..e8f921166516974e98997672d1bec162ae39048b 100644 --- a/wax-prosemirror-services/src/MatchingService/components/DropDownComponent.js +++ b/wax-prosemirror-services/src/MatchingService/components/DropDownComponent.js @@ -44,7 +44,7 @@ const DropdownStyled = styled(Dropdown)` `; const DropComponent = ({ getPos, node, view }) => { - const [selectedOption, setSelectedOption] = useState(undefined); + const [selectedOption, setSelectedOption] = useState(node.attrs.correct); const context = useContext(WaxContext); const { @@ -52,7 +52,6 @@ const DropComponent = ({ getPos, node, view }) => { } = context; const onChange = option => { - setSelectedOption(option); const allNodes = getNodes(main); allNodes.forEach(singleNode => { if (singleNode.node.attrs.id === node.attrs.id) { @@ -68,14 +67,13 @@ const DropComponent = ({ getPos, node, view }) => { }); }; - useEffect(() => { - const value = selectedOption ? selectedOption.value : ''; - const found = find(node.attrs.options, { value }); + // useEffect(() => { + // const found = find(node.attrs.options, { value: node.attrs.correct }); - if (!found) { - setSelectedOption(undefined); - } - }, [node.attrs.options]); + // if (found) { + // setSelectedOption(found); + // } + // }, [node.attrs.options]); const MultipleDropDown = useMemo( () => ( diff --git a/wax-prosemirror-services/src/MatchingService/components/MatchingContainerComponent.js b/wax-prosemirror-services/src/MatchingService/components/MatchingContainerComponent.js index 166d1a35df8683441377396cd17a2baa66a4678e..64248282a210bba24b50158a59535df2281f2194 100644 --- a/wax-prosemirror-services/src/MatchingService/components/MatchingContainerComponent.js +++ b/wax-prosemirror-services/src/MatchingService/components/MatchingContainerComponent.js @@ -200,6 +200,8 @@ export default ({ node, view, getPos }) => { }); }; + const { testMode } = customProps; + return ( <MatchingWrapper> <span>Matching</span> @@ -252,8 +254,7 @@ export default ({ node, view, getPos }) => { )} </CreateOptions> )} - {(!(readOnly && !customProps.showFeedBack) || - (readOnly && !customProps.testMode && !customProps.showFeedBack)) && ( + {!testMode && ( <FeedbackComponent getPos={getPos} node={node} diff --git a/wax-prosemirror-services/src/MatchingService/components/MatchingOptionComponent.js b/wax-prosemirror-services/src/MatchingService/components/MatchingOptionComponent.js index 5bd695e1b95dfa42c6886c3f1823c5238f650d66..2e9d9e8b4b184b7fbfc7e0612241dbed858128d6 100644 --- a/wax-prosemirror-services/src/MatchingService/components/MatchingOptionComponent.js +++ b/wax-prosemirror-services/src/MatchingService/components/MatchingOptionComponent.js @@ -8,7 +8,7 @@ import { Icon } from 'wax-prosemirror-components'; import { WaxContext } from 'wax-prosemirror-core'; import EditorComponent from './EditorComponent'; import DropDownComponent from './DropDownComponent'; -import ReadOnlyDropDownComponent from './ReadOnlyDropDownComponent'; +import TestModeDropDownComponent from './TestModeDropDownComponent'; const Option = styled.div` display: flex; @@ -139,7 +139,7 @@ export default ({ node, view, getPos }) => { )} {readOnly && testMode && !showFeedBack && ( - <ReadOnlyDropDownComponent getPos={getPos} node={node} view={view} /> + <TestModeDropDownComponent getPos={getPos} node={node} view={view} /> )} {readOnly && showFeedBack && ( diff --git a/wax-prosemirror-services/src/MatchingService/components/ReadOnlyDropDownComponent.js b/wax-prosemirror-services/src/MatchingService/components/TestModeDropDownComponent.js similarity index 95% rename from wax-prosemirror-services/src/MatchingService/components/ReadOnlyDropDownComponent.js rename to wax-prosemirror-services/src/MatchingService/components/TestModeDropDownComponent.js index e5121aca8e739960257d3b5b28dcc82b8ecb478f..bb7a38eb82e1947ff2cabb46fe09f90dc9d95081 100644 --- a/wax-prosemirror-services/src/MatchingService/components/ReadOnlyDropDownComponent.js +++ b/wax-prosemirror-services/src/MatchingService/components/TestModeDropDownComponent.js @@ -41,7 +41,7 @@ const DropdownStyled = styled(Dropdown)` } `; -const ReadOnlyDropDownComponent = ({ getPos, node, view }) => { +const TestModeDropDownComponent = ({ getPos, node, view }) => { const [selectedOption, setSelectedOption] = useState(undefined); const context = useContext(WaxContext); @@ -97,7 +97,7 @@ const ReadOnlyDropDownComponent = ({ getPos, node, view }) => { return ReadOnlyMultipleDropDown; }; -export default ReadOnlyDropDownComponent; +export default TestModeDropDownComponent; const getNodes = view => { return DocumentHelpers.findInlineNodes(view.state.doc); diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/AnswerComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/AnswerComponent.js index 47ea3ed3a312e810c4dbe2ab4bd0c6e33cfa0d7b..71c67b37b93ab78f6ad00e4db30a1688f1794d62 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/AnswerComponent.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceSingleCorrectQuestionService/components/AnswerComponent.js @@ -174,6 +174,7 @@ export default ({ node, view, getPos }) => { }; const readOnly = !isEditable; + const { testMode } = customProps; return ( <Wrapper> @@ -186,7 +187,7 @@ export default ({ node, view, getPos }) => { <QuestionData> <EditorComponent getPos={getPos} node={node} view={view} /> </QuestionData> - {!(readOnly && customProps && !customProps.showFeedBack) && ( + {!testMode && ( <FeedbackComponent getPos={getPos} node={node} diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/AnswerComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/AnswerComponent.js index cba371caf7b343f761e89efcf3a73f70fa1eaffe..76e66cd82a9deea15d0f921fe11bbdb06367a64b 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/AnswerComponent.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/AnswerComponent.js @@ -173,6 +173,7 @@ export default ({ node, view, getPos }) => { }; const readOnly = !isEditable; + const { testMode } = customProps; return ( <Wrapper> @@ -185,7 +186,7 @@ export default ({ node, view, getPos }) => { <QuestionData> <EditorComponent getPos={getPos} node={node} view={view} /> </QuestionData> - {!(readOnly && customProps && !customProps.showFeedBack) && ( + {!testMode && ( <FeedbackComponent getPos={getPos} node={node} diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/TrueFalseSwitch.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/TrueFalseSwitch.js index eb604d4f8e07893773428d275d0ffcb14daa184e..74afdedd98ea4bfb33d96148a88d03cf1acc20fb 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/TrueFalseSwitch.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/components/TrueFalseSwitch.js @@ -67,7 +67,9 @@ const TrueFalseSwitch = ({ checked, checkedAnswerMode, }) => { - if (customProps && customProps.showFeedBack) { + const { testMode, showFeedBack } = customProps; + + if (showFeedBack) { const correct = node.attrs.correct ? 'TRUE' : 'FALSE'; const answer = node.attrs.answer ? 'TRUE' : 'FALSE'; const isCorrect = node.attrs.correct === node.attrs.answer; @@ -90,8 +92,11 @@ const TrueFalseSwitch = ({ return ( <StyledSwitch - checked={isEditable ? checked : checkedAnswerMode} + checked={ + isEditable || (!isEditable && !testMode) ? checked : checkedAnswerMode + } checkedChildren="True" + disabled={!isEditable && !testMode} label="True/false?" labelPosition="left" onChange={handleChange} diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/AnswerComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/AnswerComponent.js index a939693f71294fc3f2d2269a3935778e3a5537ac..8ce1dcdad62130c13542ab0b713b910bd1e306b8 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/AnswerComponent.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/AnswerComponent.js @@ -173,6 +173,7 @@ export default ({ node, view, getPos }) => { }; const readOnly = !isEditable; + const { testMode } = customProps; return ( <Wrapper> @@ -185,7 +186,7 @@ export default ({ node, view, getPos }) => { <QuestionData> <EditorComponent getPos={getPos} node={node} view={view} /> </QuestionData> - {!(readOnly && customProps && !customProps.showFeedBack) && ( + {!testMode && ( <FeedbackComponent getPos={getPos} node={node} diff --git a/wax-prosemirror-services/src/MultipleDropDownService/components/ReadOnlyDropDown.js b/wax-prosemirror-services/src/MultipleDropDownService/components/ReadOnlyDropDown.js index 169846680e849c6802c354d53ddf82dc26c50a9b..6fd68ec91634f6bc5b629df605c93da40d0fce02 100644 --- a/wax-prosemirror-services/src/MultipleDropDownService/components/ReadOnlyDropDown.js +++ b/wax-prosemirror-services/src/MultipleDropDownService/components/ReadOnlyDropDown.js @@ -1,7 +1,6 @@ /* eslint-disable no-underscore-dangle */ -import React, { useContext, useMemo, useEffect, useState } from 'react'; +import React, { useContext, useEffect, useMemo, useState } from 'react'; import styled from 'styled-components'; -import { find } from 'lodash'; import { ReactDropDownStyles } from 'wax-prosemirror-components'; import { WaxContext } from 'wax-prosemirror-core'; import { DocumentHelpers } from 'wax-prosemirror-utilities'; @@ -51,6 +50,14 @@ const DropComponent = ({ getPos, node, options }) => { } = context; const customProps = main.props.customValues; + const { testMode } = customProps; + + useEffect(() => { + const currentOption = node.attrs.options.filter(option => { + return option.value === node.attrs.correct; + }); + if (!testMode && currentOption[0]) setSelectedOption(currentOption[0]); + }, []); const onChange = option => { const allNodes = getNodes(main); @@ -66,12 +73,11 @@ const DropComponent = ({ getPos, node, options }) => { main.dispatch(tr); }; - useEffect(() => {}, []); - const MultipleDropDown = useMemo( () => ( <Wrapper key={uuidv4()}> <DropdownStyled + disabled={!testMode} key={uuidv4()} onChange={option => onChange(option)} options={options}