From 13db5407a823534f25d5ab64cd350a240dc8501d Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Mon, 5 Apr 2021 11:45:13 +0300 Subject: [PATCH] pass component in progress --- editors/demo/src/Editors.js | 2 +- editors/demo/src/HHMI/HHMI.js | 2 + .../MultipleChoiceQuestion.js | 5 ++- .../MultipleChoiceQuestionService.js | 6 ++- .../components/TestComponent.js | 0 .../schema/multipleChoiceNode.js | 24 ++++++++++++ editors/demo/src/HHMI/config/config.js | 22 ++++------- wax-prosemirror-core/src/Wax.js | 2 + wax-prosemirror-core/src/WaxView.js | 37 +++++++++++-------- 9 files changed, 68 insertions(+), 32 deletions(-) rename wax-prosemirror-core/src/BlockQuote.js => editors/demo/src/HHMI/MultipleChoiceQuestionService/components/TestComponent.js (100%) create mode 100644 editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js diff --git a/editors/demo/src/Editors.js b/editors/demo/src/Editors.js index dac341434..774b1d788 100644 --- a/editors/demo/src/Editors.js +++ b/editors/demo/src/Editors.js @@ -48,7 +48,7 @@ const Editors = () => { case 'ncbi': break; default: - return <Editoria />; + return <HHMI />; } }; diff --git a/editors/demo/src/HHMI/HHMI.js b/editors/demo/src/HHMI/HHMI.js index 956b2d8a9..f9e2283ca 100644 --- a/editors/demo/src/HHMI/HHMI.js +++ b/editors/demo/src/HHMI/HHMI.js @@ -4,6 +4,7 @@ import { Wax } from 'wax-prosemirror-core'; import { HhmiLayout } from './layout'; import { config } from './config'; +import TestComponent from './MultipleChoiceQuestionService/components/TestComponent'; const renderImage = file => { const reader = new FileReader(); @@ -24,6 +25,7 @@ const Hhmi = () => { fileUpload={file => renderImage(file)} value="" targetFormat="JSON" + nodeViews={[{ multiple_choice: { component: TestComponent } }]} // readonly layout={HhmiLayout} // onChange={source => console.log(source)} diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js index 7f7cbdec7..e921c333d 100644 --- a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js +++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js @@ -1,5 +1,6 @@ import { injectable } from 'inversify'; import { Tools } from 'wax-prosemirror-services'; +import { wrapIn } from 'prosemirror-commands'; @injectable() class MultipleChoiceQuestion extends Tools { @@ -8,7 +9,9 @@ class MultipleChoiceQuestion extends Tools { name = 'Multiple Choice'; get run() { - return (state, dispatch) => {}; + return (state, dispatch) => { + wrapIn(state.config.schema.nodes.multiple_choice)(state, dispatch); + }; } get active() { diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js index c128ee420..7d926286d 100644 --- a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js +++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js @@ -1,5 +1,6 @@ import { Service } from 'wax-prosemirror-services'; import MultipleChoiceQuestion from './MultipleChoiceQuestion'; +import multipleChoiceNode from './schema/multipleChoiceNode'; class MultipleChoiceQuestionService extends Service { boot() {} @@ -7,7 +8,10 @@ class MultipleChoiceQuestionService extends Service { register() { this.container.bind('MultipleChoiceQuestion').to(MultipleChoiceQuestion); const createNode = this.container.get('CreateNode'); - console.log(createNode); + createNode({ + multiple_choice: multipleChoiceNode, + }); + console.log(this.schema); } } diff --git a/wax-prosemirror-core/src/BlockQuote.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/components/TestComponent.js similarity index 100% rename from wax-prosemirror-core/src/BlockQuote.js rename to editors/demo/src/HHMI/MultipleChoiceQuestionService/components/TestComponent.js diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js new file mode 100644 index 000000000..da9539965 --- /dev/null +++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js @@ -0,0 +1,24 @@ +// const multipleChoiceNode = { +// group: 'block multiple', +// content: 'text*', +// atom: true, +// code: true, +// toDOM: () => ['multiple-choice', { class: 'multiple-choice' }, 0], +// parseDOM: [ +// { +// tag: 'multiple-choice', +// }, +// ], +// }; + +const multipleChoiceNode = { + content: 'block+', + group: 'block', + defining: true, + parseDOM: [{ tag: 'multiple-choice' }], + toDOM() { + return ['multiple-choice', 0]; + }, +}; + +export default multipleChoiceNode; diff --git a/editors/demo/src/HHMI/config/config.js b/editors/demo/src/HHMI/config/config.js index e972699d6..d0e0640f5 100644 --- a/editors/demo/src/HHMI/config/config.js +++ b/editors/demo/src/HHMI/config/config.js @@ -17,17 +17,8 @@ import { DisplayToolGroupService, TextBlockLevelService, TextToolGroupService, - NoteService, - NoteToolGroupService, - TrackChangeService, - CommentsService, - CodeBlockService, - CodeBlockToolGroupService, DisplayTextToolGroupService, MathService, - FindAndReplaceService, - EditingSuggestingService, - TrackingAndEditingToolGroupService, FullScreenService, FullScreenToolGroupService, SpecialCharactersService, @@ -38,13 +29,13 @@ import { BottomInfoService, TransformService, TransformToolGroupService, - TrackOptionsToolGroupService, - TrackCommentOptionsToolGroupService, - CustomTagInlineToolGroupService, - CustomTagBlockToolGroupService, - CustomTagService, } from 'wax-prosemirror-services'; +/* Questions Services */ + +import MultipleChoiceQuestionService from '../MultipleChoiceQuestionService/MultipleChoiceQuestionService'; +import QuestionsToolGroupService from '../QuestionsToolGroupService/QuestionsToolGroupService'; + import { DefaultSchema } from 'wax-prosemirror-utilities'; import { WaxSelectionPlugin } from 'wax-prosemirror-plugins'; @@ -77,6 +68,7 @@ export default { 'Images', 'SpecialCharacters', 'Tables', + 'Questions', 'FullScreen', ], }, @@ -93,6 +85,8 @@ export default { ], services: [ + new MultipleChoiceQuestionService(), + new QuestionsToolGroupService(), new DisplayBlockLevelService(), new DisplayToolGroupService(), new TextBlockLevelService(), diff --git a/wax-prosemirror-core/src/Wax.js b/wax-prosemirror-core/src/Wax.js index fc15ccd02..b344cce3c 100644 --- a/wax-prosemirror-core/src/Wax.js +++ b/wax-prosemirror-core/src/Wax.js @@ -66,6 +66,7 @@ const Wax = props => { user, onChange, targetFormat, + nodeViews, } = props; if (!application) return null; @@ -144,6 +145,7 @@ const Wax = props => { targetFormat={targetFormat} TrackChange={TrackChange} user={user} + nodeViews={nodeViews} > {({ editor }) => <WaxRender className={className} editor={editor} />} </WaxView> diff --git a/wax-prosemirror-core/src/WaxView.js b/wax-prosemirror-core/src/WaxView.js index 41563bdb7..f12d4c69a 100644 --- a/wax-prosemirror-core/src/WaxView.js +++ b/wax-prosemirror-core/src/WaxView.js @@ -10,7 +10,6 @@ import { trackedTransaction } from 'wax-prosemirror-services'; import { WaxContext, useReactNodeViewPortals } from './WaxContext'; import transformPasted from './helpers/TransformPasted'; import { createReactNodeView } from './ReactNodeView'; -import BlockQuote from './BlockQuote'; let previousDoc; @@ -23,13 +22,13 @@ export default props => { autoFocus, user, targetFormat, + nodeViews, } = props; const editorRef = useRef(); let view; const context = useContext(WaxContext); const { createPortal } = useReactNodeViewPortals(); - const handleCreatePortal = useCallback(createPortal, []); const setEditorRef = useCallback( @@ -49,19 +48,7 @@ export default props => { user, scrollMargin: 200, scrollThreshold: 200, - nodeViews: { - blockquote(node, view, getPos, decorations) { - console.log('rerenders for ever'); - return createReactNodeView({ - node, - view, - getPos, - decorations, - component: BlockQuote, - onCreatePortal: handleCreatePortal, - }); - }, - }, + nodeViews: createNodeVies(), handleDOMEvents: { blur: onBlur ? view => { @@ -97,6 +84,26 @@ export default props => { [readonly], ); + const createNodeVies = () => { + const test = nodeViews.map((nodeView, key) => { + return { + multiple_choice(node, view, getPos, decorations) { + console.log('rerenders for ever'); + return createReactNodeView({ + node, + view, + getPos, + decorations, + component: nodeView.multiple_choice.component, + onCreatePortal: handleCreatePortal, + }); + }, + }; + }); + console.log(test); + return test[0]; + }; + const dispatchTransaction = transaction => { const { TrackChange } = props; const tr = -- GitLab