From b3a1210ebdb7f46fc25c67d46c3d827d50ff714d Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Wed, 18 May 2022 16:34:38 +0300 Subject: [PATCH] fix: update correct and answer --- .../components/DropDownComponent.js | 2 +- .../components/EditorComponent.js | 1 + .../components/ReadOnlyDropDownComponent.js | 104 ++++++++++++++++++ 3 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 wax-prosemirror-services/src/MatchingService/components/ReadOnlyDropDownComponent.js diff --git a/wax-prosemirror-services/src/MatchingService/components/DropDownComponent.js b/wax-prosemirror-services/src/MatchingService/components/DropDownComponent.js index 09ca74eb8..951a12109 100644 --- a/wax-prosemirror-services/src/MatchingService/components/DropDownComponent.js +++ b/wax-prosemirror-services/src/MatchingService/components/DropDownComponent.js @@ -58,7 +58,7 @@ const DropComponent = ({ getPos, node, view }) => { main.state.tr .setMeta('addToHistory', false) .setNodeMarkup(singleNode.pos, undefined, { - ...singleNode.attrs, + ...singleNode.node.attrs, correct: option.value, }), ); diff --git a/wax-prosemirror-services/src/MatchingService/components/EditorComponent.js b/wax-prosemirror-services/src/MatchingService/components/EditorComponent.js index c66af0e13..9278ffd3a 100644 --- a/wax-prosemirror-services/src/MatchingService/components/EditorComponent.js +++ b/wax-prosemirror-services/src/MatchingService/components/EditorComponent.js @@ -58,6 +58,7 @@ const EditorWrapper = styled.div` const EditorComponent = ({ node, view, getPos }) => { const editorRef = useRef(); + console.log(node); const context = useContext(WaxContext); const { diff --git a/wax-prosemirror-services/src/MatchingService/components/ReadOnlyDropDownComponent.js b/wax-prosemirror-services/src/MatchingService/components/ReadOnlyDropDownComponent.js new file mode 100644 index 000000000..e5121aca8 --- /dev/null +++ b/wax-prosemirror-services/src/MatchingService/components/ReadOnlyDropDownComponent.js @@ -0,0 +1,104 @@ +/* eslint-disable no-underscore-dangle */ +import React, { useContext, useMemo, useEffect, 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'; +import Dropdown from 'react-dropdown'; +import { v4 as uuidv4 } from 'uuid'; + +const Wrapper = styled.div` + ${ReactDropDownStyles}; +`; +const DropdownStyled = styled(Dropdown)` + display: inline-flex; + cursor: not-allowed; + margin-left: auto; + opacity: ${props => (props.select ? 1 : 0.4)}; + pointer-events: ${props => (props.select ? 'default' : 'none')}; + .Dropdown-control { + border: none; + padding: 8px 30px 8px 10px; + + &:hover { + box-shadow: none; + } + } + + .Dropdown-arrow { + top: 17px; + } + + .Dropdown-menu { + width: 102%; + display: flex; + flex-direction: column; + align-items: flex-start; + .Dropdown-option { + width: 100%; + } + } +`; + +const ReadOnlyDropDownComponent = ({ getPos, node, view }) => { + const [selectedOption, setSelectedOption] = useState(undefined); + + const context = useContext(WaxContext); + const { + pmViews: { main }, + } = context; + + const onChange = option => { + setSelectedOption(option); + + const allNodes = getNodes(main); + allNodes.forEach(singleNode => { + if (singleNode.node.attrs.id === node.attrs.id) { + main.dispatch( + main.state.tr + .setMeta('addToHistory', false) + .setNodeMarkup(singleNode.pos, undefined, { + ...singleNode.node.attrs, + answer: option.value, + }), + ); + } + }); + }; + + useEffect(() => { + const value = selectedOption ? selectedOption.value : ''; + const found = find(node.attrs.options, { value }); + + if (!found) { + setSelectedOption(undefined); + } + }, [node.attrs.options]); + + const ReadOnlyMultipleDropDown = useMemo( + () => ( + <Wrapper key={uuidv4()}> + <DropdownStyled + key={uuidv4()} + onChange={option => onChange(option)} + options={node.attrs.options} + placeholder="Select option" + select + value={ + selectedOption === 'undedfined' ? 'Select Option' : selectedOption + } + /> + </Wrapper> + ), + [node.attrs.options, selectedOption], + ); + + return ReadOnlyMultipleDropDown; +}; + +export default ReadOnlyDropDownComponent; + +const getNodes = view => { + return DocumentHelpers.findInlineNodes(view.state.doc); +}; -- GitLab