Files
Cli-Proxy-API-Management-Ce…/src/components/config/ConfigSourceEditor.tsx
T

64 lines
1.6 KiB
TypeScript

import { useMemo, type Ref } from 'react';
import CodeMirror, { type ReactCodeMirrorRef } from '@uiw/react-codemirror';
import { yaml } from '@codemirror/lang-yaml';
import { search, searchKeymap, highlightSelectionMatches } from '@codemirror/search';
import { keymap } from '@codemirror/view';
type ConfigSourceEditorProps = {
value: string;
onChange: (value: string) => void;
editorRef?: Ref<ReactCodeMirrorRef>;
theme: 'light' | 'dark';
editable: boolean;
placeholder: string;
};
export default function ConfigSourceEditor({
value,
onChange,
editorRef,
theme,
editable,
placeholder,
}: ConfigSourceEditorProps) {
const extensions = useMemo(
() => [yaml(), search(), highlightSelectionMatches(), keymap.of(searchKeymap)],
[]
);
return (
<CodeMirror
ref={editorRef}
value={value}
onChange={onChange}
extensions={extensions}
theme={theme}
editable={editable}
placeholder={placeholder}
height="100%"
style={{ height: '100%' }}
basicSetup={{
lineNumbers: true,
highlightActiveLineGutter: true,
highlightActiveLine: true,
foldGutter: true,
dropCursor: true,
allowMultipleSelections: true,
indentOnInput: true,
bracketMatching: true,
closeBrackets: true,
autocompletion: false,
rectangularSelection: true,
crosshairCursor: false,
highlightSelectionMatches: true,
closeBracketsKeymap: true,
searchKeymap: true,
foldKeymap: true,
completionKeymap: false,
lintKeymap: true,
}}
/>
);
}