From 90d20e75fb58dabfe740bd5944ebe1f81ba6f361 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Mon, 21 Mar 2022 09:26:31 +0200
Subject: [PATCH] lists

---
 editors/demo/src/HHMI/config/config.js    |  4 +--
 wax-prosemirror-plugins/src/ChatPlugin.js | 42 +++++++++++++++--------
 2 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/editors/demo/src/HHMI/config/config.js b/editors/demo/src/HHMI/config/config.js
index e5f77e92e..d5f40e10d 100644
--- a/editors/demo/src/HHMI/config/config.js
+++ b/editors/demo/src/HHMI/config/config.js
@@ -35,7 +35,7 @@ import {
 import { DefaultSchema } from 'wax-prosemirror-utilities';
 import invisibles, { hardBreak } from '@guardian/prosemirror-invisibles';
 
-const getContent = source => {
+const getContentOnEnter = source => {
   console.log('editor content', source);
 };
 
@@ -68,7 +68,7 @@ export default {
     },
   ],
 
-  // ChatService: { getContent },
+  ChatService: { getContentOnEnter },
   SchemaService: DefaultSchema,
   RulesService: [emDash, ellipsis],
 
diff --git a/wax-prosemirror-plugins/src/ChatPlugin.js b/wax-prosemirror-plugins/src/ChatPlugin.js
index 369932323..63096466e 100644
--- a/wax-prosemirror-plugins/src/ChatPlugin.js
+++ b/wax-prosemirror-plugins/src/ChatPlugin.js
@@ -33,26 +33,38 @@ export default props => {
     },
     props: {
       handleKeyDown(view, event) {
+        let isList = false;
         if (event.key === 'Enter' && !event.shiftKey) {
           if (view.state.doc.content.size <= 2) {
             return true;
           }
-          const WaxOptions = {
-            doc: {},
-            schema: view.props.options.schema,
-            plugins: view.props.options.plugins,
-          };
-          const parse = parser(view.props.options.schema);
-          WaxOptions.doc = parse('');
-
-          const serialize = serializer(view.props.options.schema);
-          props.getContent(serialize(view.state.doc.content));
-
-          view.updateState(EditorState.create(WaxOptions));
-          if (view.dispatch) {
-            view.state.tr.setMeta('addToHistory', false);
+          const {
+            selection: { from, to },
+          } = view.state;
+
+          view.state.doc.nodesBetween(from, to, node => {
+            if (node.type.name === 'list_item') isList = true;
+          });
+
+          if (!isList) {
+            const serialize = serializer(view.props.options.schema);
+            props.getContentOnEnter(serialize(view.state.doc.content));
+
+            const WaxOptions = {
+              doc: {},
+              schema: view.props.options.schema,
+              plugins: view.props.options.plugins,
+            };
+
+            const parse = parser(view.props.options.schema);
+            WaxOptions.doc = parse('');
+            view.updateState(EditorState.create(WaxOptions));
+
+            if (view.dispatch) {
+              view.state.tr.setMeta('addToHistory', false);
+            }
+            return true;
           }
-          return true;
         }
         return false;
       },
-- 
GitLab