diff --git a/wax-prosemirror-services/src/MatchingService/components/DropDownComponent.js b/wax-prosemirror-services/src/MatchingService/components/DropDownComponent.js index 09ca74eb81f60397379152f13697f8ece77717a3..951a1210915ff382b064a1fb5215ee2d6b93e9a8 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 c66af0e13360d20bb17dfcc7546391ed8086a037..9278ffd3a85597f3e2e456d7bba8f46fb88960a0 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 0000000000000000000000000000000000000000..e5121aca8e739960257d3b5b28dcc82b8ecb478f --- /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); +};