reiji-h 2 лет назад
Родитель
Сommit
2a91f73728

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

@@ -20,6 +20,7 @@ import { useInsertMarkdownElements, type InsertMarkdowElements } from './utils/i
 import { useInsertPrefix, type InsertPrefix } from './utils/insert-prefix';
 import { useInsertText, type InsertText } from './utils/insert-text';
 import { useReplaceText, type ReplaceText } from './utils/replace-text';
+import { useScrollIntoView, type ScrollIntoView } from './utils/scroll-into-view';
 import { useSetCaretLine, type SetCaretLine } from './utils/set-caret-line';
 
 const markdownHighlighting = HighlightStyle.define([
@@ -41,6 +42,7 @@ type UseCodeMirrorEditorUtils = {
   replaceText: ReplaceText,
   insertMarkdownElements: InsertMarkdowElements,
   insertPrefix: InsertPrefix,
+  scrollIntoView: ScrollIntoView,
 }
 export type UseCodeMirrorEditor = {
   state: EditorState | undefined;
@@ -95,6 +97,7 @@ export const useCodeMirrorEditor = (props?: UseCodeMirror): UseCodeMirrorEditor
   const replaceText = useReplaceText(view);
   const insertMarkdownElements = useInsertMarkdownElements(view);
   const insertPrefix = useInsertPrefix(view);
+  const scrollIntoView = useScrollIntoView(view);
 
   return {
     state,
@@ -108,5 +111,6 @@ export const useCodeMirrorEditor = (props?: UseCodeMirror): UseCodeMirrorEditor
     replaceText,
     insertMarkdownElements,
     insertPrefix,
+    scrollIntoView,
   };
 };

+ 15 - 0
packages/editor/src/services/codemirror-editor/use-codemirror-editor/utils/scroll-into-view.ts

@@ -0,0 +1,15 @@
+import { useCallback } from 'react';
+
+import { EditorView } from '@codemirror/view';
+
+export type ScrollIntoView = (line: number) => void;
+
+export const useScrollIntoView = (view?: EditorView): ScrollIntoView => {
+
+  return useCallback((line) => {
+    view?.dispatch({
+      effects: EditorView.scrollIntoView(line),
+    });
+  }, [view]);
+
+};