2
0
Эх сурвалжийг харах

use autoFormatMarkdownTable

reiji-h 2 жил өмнө
parent
commit
f33aab4e31

+ 27 - 2
packages/editor/src/components/CodeMirrorEditor/CodeMirrorEditor.tsx

@@ -1,10 +1,12 @@
 import {
 import {
-  forwardRef, useMemo, useRef, useEffect, useState,
+  forwardRef, useMemo, useRef, useEffect, useState, useCallback,
 } from 'react';
 } from 'react';
 
 
 import { indentUnit } from '@codemirror/language';
 import { indentUnit } from '@codemirror/language';
 import { Prec, Extension } from '@codemirror/state';
 import { Prec, Extension } from '@codemirror/state';
-import { EditorView, highlightActiveLine, highlightActiveLineGutter } from '@codemirror/view';
+import {
+  keymap, type Command, EditorView, highlightActiveLine, highlightActiveLineGutter,
+} from '@codemirror/view';
 import { AcceptedUploadFileType } from '@growi/core';
 import { AcceptedUploadFileType } from '@growi/core';
 import type { ReactCodeMirrorProps } from '@uiw/react-codemirror';
 import type { ReactCodeMirrorProps } from '@uiw/react-codemirror';
 
 
@@ -12,9 +14,11 @@ import { GlobalCodeMirrorEditorKey } from '../../consts';
 import {
 import {
   useFileDropzone, FileDropzoneOverlay, getEditorTheme, type EditorTheme, getKeymap, type KeyMapMode,
   useFileDropzone, FileDropzoneOverlay, getEditorTheme, type EditorTheme, getKeymap, type KeyMapMode,
 } from '../../services';
 } from '../../services';
+import { insertNewlineContinueMarkup } from '../../services/list-util/insert-newline-continue-markup';
 import {
 import {
   adjustPasteData, getStrFromBol,
   adjustPasteData, getStrFromBol,
 } from '../../services/paste-util/paste-markdown-util';
 } from '../../services/paste-util/paste-markdown-util';
+import { insertNewRowToMarkdownTable, isInTable } from '../../services/table-util/insert-new-row-to-table-markdown';
 import { useCodeMirrorEditorIsolated } from '../../stores';
 import { useCodeMirrorEditorIsolated } from '../../stores';
 
 
 import { Toolbar } from './Toolbar';
 import { Toolbar } from './Toolbar';
@@ -91,6 +95,27 @@ export const CodeMirrorEditor = (props: Props): JSX.Element => {
 
 
   }, [codeMirrorEditor, styleActiveLine]);
   }, [codeMirrorEditor, styleActiveLine]);
 
 
+  const onPressEnter: Command = useCallback((editor) => {
+    if (isInTable(editor) && autoFormatMarkdownTable) {
+      insertNewRowToMarkdownTable(editor);
+      return true;
+    }
+    insertNewlineContinueMarkup(editor);
+    return true;
+  }, [autoFormatMarkdownTable]);
+
+
+  useEffect(() => {
+
+    const extension = keymap.of([
+      { key: 'Enter', run: onPressEnter },
+    ]);
+
+    const cleanupFunction = codeMirrorEditor?.appendExtensions?.(extension);
+    return cleanupFunction;
+
+  }, [codeMirrorEditor, onPressEnter]);
+
   useEffect(() => {
   useEffect(() => {
     const handlePaste = (event: ClipboardEvent) => {
     const handlePaste = (event: ClipboardEvent) => {
       event.preventDefault();
       event.preventDefault();

+ 0 - 16
packages/editor/src/services/codemirror-editor/use-codemirror-editor/use-codemirror-editor.ts

@@ -10,7 +10,6 @@ import {
   EditorState, Prec, type Extension,
   EditorState, Prec, type Extension,
 } from '@codemirror/state';
 } from '@codemirror/state';
 import { keymap, EditorView } from '@codemirror/view';
 import { keymap, EditorView } from '@codemirror/view';
-import type { Command } from '@codemirror/view';
 import { tags } from '@lezer/highlight';
 import { tags } from '@lezer/highlight';
 import { useCodeMirror, type UseCodeMirror } from '@uiw/react-codemirror';
 import { useCodeMirror, type UseCodeMirror } from '@uiw/react-codemirror';
 import deepmerge from 'ts-deepmerge';
 import deepmerge from 'ts-deepmerge';
@@ -20,8 +19,6 @@ import deepmerge from 'ts-deepmerge';
 import { yUndoManagerKeymap } from 'y-codemirror.next';
 import { yUndoManagerKeymap } from 'y-codemirror.next';
 
 
 import { emojiAutocompletionSettings } from '../../extensions/emojiAutocompletionSettings';
 import { emojiAutocompletionSettings } from '../../extensions/emojiAutocompletionSettings';
-import { insertNewlineContinueMarkup } from '../../list-util/insert-newline-continue-markup';
-import { insertNewRowToMarkdownTable, isInTable } from '../../table-util/insert-new-row-to-table-markdown';
 
 
 import { useAppendExtensions, type AppendExtensions } from './utils/append-extensions';
 import { useAppendExtensions, type AppendExtensions } from './utils/append-extensions';
 import { useFocus, type Focus } from './utils/focus';
 import { useFocus, type Focus } from './utils/focus';
@@ -35,23 +32,10 @@ import { useReplaceText, type ReplaceText } from './utils/replace-text';
 import { useSetCaretLine, type SetCaretLine } from './utils/set-caret-line';
 import { useSetCaretLine, type SetCaretLine } from './utils/set-caret-line';
 
 
 
 
-const onPressEnter: Command = (editor) => {
-
-  if (isInTable(editor)) {
-    insertNewRowToMarkdownTable(editor);
-    return true;
-  }
-
-  insertNewlineContinueMarkup(editor);
-
-  return true;
-};
-
 // set new markdownKeymap instead of default one
 // set new markdownKeymap instead of default one
 // https://github.com/codemirror/lang-markdown/blob/main/src/index.ts#L17
 // https://github.com/codemirror/lang-markdown/blob/main/src/index.ts#L17
 const markdownKeymap = [
 const markdownKeymap = [
   { key: 'Backspace', run: deleteCharBackward },
   { key: 'Backspace', run: deleteCharBackward },
-  { key: 'Enter', run: onPressEnter },
 ];
 ];
 
 
 const markdownHighlighting = HighlightStyle.define([
 const markdownHighlighting = HighlightStyle.define([