Yuki Takei 2 years ago
parent
commit
4113db62b7

+ 5 - 7
packages/editor/src/services/codemirror-editor/use-codemirror-editor/use-codemirror-editor.ts

@@ -5,6 +5,7 @@ import { languages } from '@codemirror/language-data';
 import { EditorState, type Extension } from '@codemirror/state';
 import { EditorState, type Extension } from '@codemirror/state';
 import { EditorView } from '@codemirror/view';
 import { EditorView } from '@codemirror/view';
 import { useCodeMirror, type UseCodeMirror } from '@uiw/react-codemirror';
 import { useCodeMirror, type UseCodeMirror } from '@uiw/react-codemirror';
+import deepmerge from 'ts-deepmerge';
 
 
 import { AppendExtension, useAppendExtension } from './utils/append-extension';
 import { AppendExtension, useAppendExtension } from './utils/append-extension';
 import { useFocus, type Focus } from './utils/focus';
 import { useFocus, type Focus } from './utils/focus';
@@ -32,13 +33,10 @@ const defaultExtensions: Extension[] = [
 export const useCodeMirrorEditor = (props?: UseCodeMirror): UseCodeMirrorEditor => {
 export const useCodeMirrorEditor = (props?: UseCodeMirror): UseCodeMirrorEditor => {
 
 
   const mergedProps = useMemo<UseCodeMirror>(() => {
   const mergedProps = useMemo<UseCodeMirror>(() => {
-    return {
-      ...props,
-      extensions: [
-        ...(props?.extensions ?? []),
-        ...defaultExtensions,
-      ],
-    };
+    return deepmerge(
+      props ?? {},
+      { extensions: defaultExtensions },
+    );
   }, [props]);
   }, [props]);
 
 
   const { state, view } = useCodeMirror(mergedProps);
   const { state, view } = useCodeMirror(mergedProps);

+ 8 - 8
packages/editor/src/stores/codemirror-editor.ts

@@ -5,6 +5,7 @@ import { scrollPastEnd } from '@codemirror/view';
 import { useSWRStatic } from '@growi/core/dist/swr';
 import { useSWRStatic } from '@growi/core/dist/swr';
 import type { ReactCodeMirrorProps, UseCodeMirror } from '@uiw/react-codemirror';
 import type { ReactCodeMirrorProps, UseCodeMirror } from '@uiw/react-codemirror';
 import type { SWRResponse } from 'swr';
 import type { SWRResponse } from 'swr';
+import deepmerge from 'ts-deepmerge';
 
 
 import type { UseCodeMirrorEditor } from '../services';
 import type { UseCodeMirrorEditor } from '../services';
 import { useCodeMirrorEditor } from '../services';
 import { useCodeMirrorEditor } from '../services';
@@ -33,14 +34,13 @@ export const useCodeMirrorEditorIsolated = (
 
 
   const swrKey = key != null ? `codeMirrorEditor_${key}` : null;
   const swrKey = key != null ? `codeMirrorEditor_${key}` : null;
   const mergedProps = useMemo<UseCodeMirror>(() => {
   const mergedProps = useMemo<UseCodeMirror>(() => {
-    return {
-      ...props,
-      container,
-      extensions: [
-        ...(props?.extensions ?? []),
-        ...defaultExtensionsMain,
-      ],
-    };
+    return deepmerge(
+      props ?? {},
+      {
+        container,
+        extensions: defaultExtensionsMain,
+      },
+    );
   }, [container, props]);
   }, [container, props]);
 
 
   const newData = useCodeMirrorEditor(mergedProps);
   const newData = useCodeMirrorEditor(mergedProps);