|
@@ -2,7 +2,9 @@ import { useCallback, useEffect } from 'react';
|
|
|
|
|
|
|
|
import { markdown, markdownLanguage } from '@codemirror/lang-markdown';
|
|
import { markdown, markdownLanguage } from '@codemirror/lang-markdown';
|
|
|
import { languages } from '@codemirror/language-data';
|
|
import { languages } from '@codemirror/language-data';
|
|
|
-import { EditorState, type EditorStateConfig, type Extension } from '@codemirror/state';
|
|
|
|
|
|
|
+import {
|
|
|
|
|
+ EditorState, StateEffect, type EditorStateConfig, type Extension,
|
|
|
|
|
+} from '@codemirror/state';
|
|
|
import { basicSetup, useCodeMirror, type UseCodeMirror } from '@uiw/react-codemirror';
|
|
import { basicSetup, useCodeMirror, type UseCodeMirror } from '@uiw/react-codemirror';
|
|
|
|
|
|
|
|
import { UseCodeMirrorEditorStates } from './interfaces/react-codemirror';
|
|
import { UseCodeMirrorEditorStates } from './interfaces/react-codemirror';
|
|
@@ -12,6 +14,7 @@ export type UseCodeMirrorEditor = UseCodeMirror;
|
|
|
type UseCodeMirrorEditorUtils = {
|
|
type UseCodeMirrorEditorUtils = {
|
|
|
initState: (config?: EditorStateConfig) => void,
|
|
initState: (config?: EditorStateConfig) => void,
|
|
|
initDoc: (doc?: string) => void,
|
|
initDoc: (doc?: string) => void,
|
|
|
|
|
+ appendExtension: (extension: Extension) => void,
|
|
|
getDoc: () => string | undefined,
|
|
getDoc: () => string | undefined,
|
|
|
focus: () => void,
|
|
focus: () => void,
|
|
|
setCaretLine: (lineNumber?: number) => void,
|
|
setCaretLine: (lineNumber?: number) => void,
|
|
@@ -62,6 +65,13 @@ export const useCodeMirrorEditor = (props?: UseCodeMirrorEditor): UseCodeMirrorE
|
|
|
initState({ doc });
|
|
initState({ doc });
|
|
|
}, [initState]);
|
|
}, [initState]);
|
|
|
|
|
|
|
|
|
|
+ // implement appendExtension method
|
|
|
|
|
+ const appendExtension = useCallback((extension: Extension): void => {
|
|
|
|
|
+ view?.dispatch({
|
|
|
|
|
+ effects: StateEffect.appendConfig.of(extension),
|
|
|
|
|
+ });
|
|
|
|
|
+ }, [view]);
|
|
|
|
|
+
|
|
|
// implement getDoc method
|
|
// implement getDoc method
|
|
|
const getDoc = useCallback((): string | undefined => {
|
|
const getDoc = useCallback((): string | undefined => {
|
|
|
return view?.state.doc.toString();
|
|
return view?.state.doc.toString();
|
|
@@ -99,6 +109,7 @@ export const useCodeMirrorEditor = (props?: UseCodeMirrorEditor): UseCodeMirrorE
|
|
|
...codemirror,
|
|
...codemirror,
|
|
|
initState,
|
|
initState,
|
|
|
initDoc,
|
|
initDoc,
|
|
|
|
|
+ appendExtension,
|
|
|
getDoc,
|
|
getDoc,
|
|
|
focus,
|
|
focus,
|
|
|
setCaretLine,
|
|
setCaretLine,
|