diff --git a/editors/demo/src/HHMI/HHMI.js b/editors/demo/src/HHMI/HHMI.js index e9f619292ce7185011a76da79d66bb050c4f31a4..cc00d139054b489ec80028e63c8a18656c96de11 100644 --- a/editors/demo/src/HHMI/HHMI.js +++ b/editors/demo/src/HHMI/HHMI.js @@ -55,7 +55,7 @@ const Hhmi = () => { value={aa} readonly={readOnly} layout={HhmiLayout} - // onChange={source => console.log(source)} + onChange={source => console.log(source)} /> </> ); diff --git a/wax-prosemirror-services/src/MultipleDropDownService/components/DropDownComponent.js b/wax-prosemirror-services/src/MultipleDropDownService/components/DropDownComponent.js index 1781c8757dc65957b822d8539044f8f4b73ac5d4..94c9807a2544e611052cf8bd1aaff27f2735fcef 100644 --- a/wax-prosemirror-services/src/MultipleDropDownService/components/DropDownComponent.js +++ b/wax-prosemirror-services/src/MultipleDropDownService/components/DropDownComponent.js @@ -7,11 +7,11 @@ import React, { useEffect, } from 'react'; import { WaxContext } from 'wax-prosemirror-core'; -import { DocumentHelpers } from 'wax-prosemirror-utilities'; import { v4 as uuidv4 } from 'uuid'; import styled from 'styled-components'; import { Icon } from 'wax-prosemirror-components'; import { NodeSelection } from 'prosemirror-state'; + const TriangleTop = styled.div` width: 0; height: 0; @@ -90,7 +90,7 @@ const IconRemove = styled(Icon)` width: 10px; `; -let PreviousNode = ''; +let previousNode = ''; export default ({ setPosition, position }) => { const context = useContext(WaxContext); @@ -127,16 +127,28 @@ export default ({ setPosition, position }) => { useEffect(() => { if (addOptionRef.current) addOptionRef.current.focus(); + const { tr } = activeView.state; - tr.setNodeMarkup(position.from, undefined, { - ...currentNode.node.attrs, - options, - }); + if (previousNode.from !== currentNode.from) { + tr.setNodeMarkup(position.from, undefined, { + ...currentNode.node.attrs, + options: currentNode.node.attrs.options, + }); + setOptions(currentNode.node.attrs.options); + } else { + tr.setNodeMarkup(position.from, undefined, { + ...currentNode.node.attrs, + options, + }); + } + previousNode = currentNode; + + if (!activeView.state.selection.node) return; const resolvedPos = tr.doc.resolve(position.from); tr.setSelection(new NodeSelection(resolvedPos)); - activeView.dispatch(tr.setMeta('reject', true)); - }, [position.from]); + activeView.dispatch(tr); + }, [options, position.from]); const updateOptionText = () => { setOptionText(addOptionRef.current.value); @@ -166,7 +178,7 @@ export default ({ setPosition, position }) => { <TriangleTop /> <DropDownComponent> <Options> - {currentOptions.map(value => { + {options.map(value => { return ( <Option key={uuidv4()}> <span>{value.label}</span>