diff --git a/wax-questions-service/src/NumericalAnswerService/components/ExactAnswerComponent.js b/wax-questions-service/src/NumericalAnswerService/components/ExactAnswerComponent.js index 070b6156956e6a8ad04fe804545de613414ce072..ac9002e361a9c300f467f9b166480420309c735d 100644 --- a/wax-questions-service/src/NumericalAnswerService/components/ExactAnswerComponent.js +++ b/wax-questions-service/src/NumericalAnswerService/components/ExactAnswerComponent.js @@ -1,5 +1,6 @@ import React, { useRef, useState } from 'react'; import styled from 'styled-components'; +import { DocumentHelpers } from 'wax-prosemirror-core'; const AnswerContainer = styled.div` display: flex; @@ -32,12 +33,19 @@ const ExactAnswerComponent = () => { const exactRef = useRef(null); const errorRef = useRef(null); + const onlyNumbers = value => { + return value + .replace(/[^0-9.]/g, '') + .replace(/(\..*?)\..*/g, '$1') + .replace(/^0[^.]/, '0'); + }; + const onChangeExact = () => { - setExact(exactRef.current.value); + setExact(onlyNumbers(exactRef.current.value)); }; const onChangeError = () => { - setMarginError(errorRef.current.value); + setMarginError(onlyNumbers(errorRef.current.value)); }; return ( @@ -74,4 +82,15 @@ const ExactAnswerComponent = () => { ); }; +const getNodes = view => { + const allNodes = DocumentHelpers.findBlockNodes(view.state.doc); + const numericalAnswerpContainerNodes = []; + allNodes.forEach(node => { + if (node.node.type.name === 'numerical_answer_container') { + numericalAnswerpContainerNodes.push(node); + } + }); + return numericalAnswerpContainerNodes; +}; + export default ExactAnswerComponent; diff --git a/wax-questions-service/src/NumericalAnswerService/components/NumericalAnswerDropDownCompontent.js b/wax-questions-service/src/NumericalAnswerService/components/NumericalAnswerDropDownCompontent.js index aad0a1c803b8454a53e42549d16b5ac9e7907ca7..a743a3949cf7a12e38bde23b3e83c400c790c29d 100644 --- a/wax-questions-service/src/NumericalAnswerService/components/NumericalAnswerDropDownCompontent.js +++ b/wax-questions-service/src/NumericalAnswerService/components/NumericalAnswerDropDownCompontent.js @@ -163,9 +163,10 @@ const NumericalAnswerDropDownCompontent = ({ nodeId }) => { const onChange = option => { context.setOption({ [nodeId]: { numericalAnswer: option.value } }); - main.dispatch(main.state.tr.setMeta('addToHistory', false)); setLabel(option.label); openCloseMenu(); + activeView.dispatch(activeView.state.tr.setMeta('addToHistory', false)); + activeView.focus(); }; const NumericalAnswerDropDown = useMemo( diff --git a/wax-questions-service/src/NumericalAnswerService/components/PreciseAnswerComponent.js b/wax-questions-service/src/NumericalAnswerService/components/PreciseAnswerComponent.js index 2ab9c1a5ff0467e798aac4b760c333fd2bd9c19d..38c34b2eabc0d492ddb1b027adaa1a44ae6c4027 100644 --- a/wax-questions-service/src/NumericalAnswerService/components/PreciseAnswerComponent.js +++ b/wax-questions-service/src/NumericalAnswerService/components/PreciseAnswerComponent.js @@ -1,5 +1,6 @@ import React, { useRef, useState } from 'react'; import styled from 'styled-components'; +import { DocumentHelpers } from 'wax-prosemirror-core'; const AnswerContainer = styled.div` display: flex; @@ -30,8 +31,15 @@ const PreciseAnswerComponent = () => { const preciseRef = useRef(null); + const onlyNumbers = value => { + return value + .replace(/[^0-9.]/g, '') + .replace(/(\..*?)\..*/g, '$1') + .replace(/^0[^.]/, '0'); + }; + const onChangePrecice = () => { - setPrecise(preciseRef.current.value); + setPrecise(onlyNumbers(preciseRef.current.value)); }; return ( @@ -54,4 +62,15 @@ const PreciseAnswerComponent = () => { ); }; +const getNodes = view => { + const allNodes = DocumentHelpers.findBlockNodes(view.state.doc); + const numericalAnswerpContainerNodes = []; + allNodes.forEach(node => { + if (node.node.type.name === 'numerical_answer_container') { + numericalAnswerpContainerNodes.push(node); + } + }); + return numericalAnswerpContainerNodes; +}; + export default PreciseAnswerComponent; diff --git a/wax-questions-service/src/NumericalAnswerService/components/RangeAnswerComponent.js b/wax-questions-service/src/NumericalAnswerService/components/RangeAnswerComponent.js index 8b98b87a1f4e5e00fc6b57fa247bec302df202f8..c0be1d170700256d4802da681aa4527e6cd51e93 100644 --- a/wax-questions-service/src/NumericalAnswerService/components/RangeAnswerComponent.js +++ b/wax-questions-service/src/NumericalAnswerService/components/RangeAnswerComponent.js @@ -1,5 +1,6 @@ import React, { useRef, useState } from 'react'; import styled from 'styled-components'; +import { DocumentHelpers } from 'wax-prosemirror-core'; const AnswerContainer = styled.div` display: flex; @@ -32,12 +33,19 @@ const RangeAnswerComponent = () => { const minRef = useRef(null); const maxRef = useRef(null); + const onlyNumbers = value => { + return value + .replace(/[^0-9.]/g, '') + .replace(/(\..*?)\..*/g, '$1') + .replace(/^0[^.]/, '0'); + }; + const onChangeMin = () => { - setMinValue(minRef.current.value); + setMinValue(onlyNumbers(minRef.current.value)); }; const onChangeMax = () => { - setMaxValue(maxRef.current.value); + setMaxValue(onlyNumbers(maxRef.current.value)); }; return ( @@ -74,4 +82,15 @@ const RangeAnswerComponent = () => { ); }; +const getNodes = view => { + const allNodes = DocumentHelpers.findBlockNodes(view.state.doc); + const numericalAnswerpContainerNodes = []; + allNodes.forEach(node => { + if (node.node.type.name === 'numerical_answer_container') { + numericalAnswerpContainerNodes.push(node); + } + }); + return numericalAnswerpContainerNodes; +}; + export default RangeAnswerComponent; diff --git a/wax-questions-service/src/NumericalAnswerService/schema/NumericalAnswerContainerNode.js b/wax-questions-service/src/NumericalAnswerService/schema/NumericalAnswerContainerNode.js index a98ec716b4e15bcdefe16103d1288006e0136d81..b110d5f2431a6416dfaaf7a37aef3cd7d53a4e84 100644 --- a/wax-questions-service/src/NumericalAnswerService/schema/NumericalAnswerContainerNode.js +++ b/wax-questions-service/src/NumericalAnswerService/schema/NumericalAnswerContainerNode.js @@ -4,6 +4,7 @@ const NumericalAnswerContainerNode = { class: { default: 'numerical-answer' }, feedback: { default: '' }, answerType: { default: '' }, + answers: { default: [] }, }, group: 'block questions', atom: true, @@ -13,15 +14,26 @@ const NumericalAnswerContainerNode = { tag: 'div.numerical-answer', getAttrs(dom) { return { + answers: JSON.parse(dom.getAttribute('answers')), id: dom.getAttribute('id'), class: dom.getAttribute('class'), feedback: dom.getAttribute('feedback'), + answerType: dom.getAttribute('answerType'), }; }, }, ], toDOM(node) { - return ['div', node.attrs, 0]; + return [ + 'div', + { + id: node.attrs.id, + class: node.attrs.class, + answers: JSON.stringify(node.attrs.answers), + feedback: node.attrs.feedback, + answerType: node.attrs.answerType, + }, + ]; }, };