From c96ec435b8eebd44c4604bf6c2920084724298cf Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Sat, 4 Mar 2023 10:09:20 +0200 Subject: [PATCH] core plugins --- .../src/config/defaultConfig.js | 2 + .../src/config/plugins/defaultPlugins.js | 3 +- .../components/DropDownComponent1.js | 100 ++++++++++++++++++ 3 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 wax-prosemirror-services/src/MatchingService/components/DropDownComponent1.js diff --git a/wax-prosemirror-core/src/config/defaultConfig.js b/wax-prosemirror-core/src/config/defaultConfig.js index 8b5f98f72..457cb38f0 100644 --- a/wax-prosemirror-core/src/config/defaultConfig.js +++ b/wax-prosemirror-core/src/config/defaultConfig.js @@ -5,6 +5,7 @@ import LayoutService from './defaultServices/LayoutService/LayoutService'; import PortalService from './defaultServices/PortalService/PortalService'; import MenuService from './defaultServices/MenuService/MenuService'; import OverlayService from './defaultServices/OverlayService/OverlayService'; +import CorePluginsService from './defaultServices/CorePluginsService/CorePluginsService'; export default () => ({ services: [ @@ -15,5 +16,6 @@ export default () => ({ new PortalService(), new MenuService(), new OverlayService(), + new CorePluginsService(), ], }); diff --git a/wax-prosemirror-core/src/config/plugins/defaultPlugins.js b/wax-prosemirror-core/src/config/plugins/defaultPlugins.js index eb6227920..88158c86b 100644 --- a/wax-prosemirror-core/src/config/plugins/defaultPlugins.js +++ b/wax-prosemirror-core/src/config/plugins/defaultPlugins.js @@ -1,6 +1,5 @@ import { history } from 'prosemirror-history'; import { dropCursor } from 'prosemirror-dropcursor'; import { gapCursor } from 'prosemirror-gapcursor'; -import FakeCursorPlugin from './FakeCursorPlugin'; -export default [dropCursor(), gapCursor(), history(), FakeCursorPlugin()]; +export default [dropCursor(), gapCursor(), history()]; diff --git a/wax-prosemirror-services/src/MatchingService/components/DropDownComponent1.js b/wax-prosemirror-services/src/MatchingService/components/DropDownComponent1.js new file mode 100644 index 000000000..cc2f3d450 --- /dev/null +++ b/wax-prosemirror-services/src/MatchingService/components/DropDownComponent1.js @@ -0,0 +1,100 @@ +/* eslint-disable no-underscore-dangle */ +import React, { useContext, useMemo, useState } from 'react'; +import styled from 'styled-components'; +import { + WaxContext, + DocumentHelpers, + ReactDropDownStyles, +} from 'wax-prosemirror-core'; +import Dropdown from 'react-dropdown'; +import { v4 as uuidv4 } from 'uuid'; + +const Wrapper = styled.div` + ${ReactDropDownStyles}; +`; +const DropdownStyled = styled(Dropdown)` + cursor: not-allowed; + display: inline-flex; + 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 { + align-items: flex-start; + display: flex; + flex-direction: column; + width: 102%; + + .Dropdown-option { + width: 100%; + } + } +`; + +const DropComponent = ({ getPos, node, view }) => { + const [selectedOption, setSelectedOption] = useState(node.attrs.correct); + + const context = useContext(WaxContext); + const { + pmViews: { main }, + } = context; + + const isEditable = main.props.editable(editable => { + return editable; + }); + + const onChange = 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, + correct: option.value, + }), + ); + } + }); + }; + + const MultipleDropDown = useMemo( + () => ( + <Wrapper key={uuidv4()}> + <DropdownStyled + key={uuidv4()} + onChange={option => onChange(option)} + options={node.attrs.options} + placeholder="Select option" + select={isEditable} + value={ + selectedOption === 'undefined' ? 'Select Option' : selectedOption + } + /> + </Wrapper> + ), + [node.attrs.options, selectedOption], + ); + + return MultipleDropDown; +}; + +export default DropComponent; + +const getNodes = view => { + return DocumentHelpers.findInlineNodes(view.state.doc); +}; -- GitLab