| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- import Editor, { OnChange, useMonaco } from '@monaco-editor/react'
- import { noop } from 'lodash'
- import { useEffect, useRef } from 'react'
- import { LogoLoader } from 'ui'
- import { formatSql } from '@/lib/formatSql'
- // [Joshen] We should deprecate this and use CodeEditor instead
- interface SqlEditorProps {
- contextmenu?: boolean
- defaultValue?: string
- language?: string
- onInputChange?: OnChange
- queryId?: string
- readOnly?: boolean
- }
- /**
- * @deprecated Use CodeEditor instead
- */
- const SqlEditor = ({
- queryId,
- language = 'pgsql',
- defaultValue = '',
- readOnly = false,
- contextmenu = true,
- onInputChange = noop,
- }: SqlEditorProps) => {
- const monaco = useMonaco()
- const editorRef = useRef<any>(null)
- useEffect(() => {
- if (monaco) {
- // Enable pgsql format
- const formatprovider = monaco.languages.registerDocumentFormattingEditProvider('pgsql', {
- async provideDocumentFormattingEdits(model: any) {
- const value = model.getValue()
- const formatted = formatSql(value)
- return [
- {
- range: model.getFullModelRange(),
- text: formatted,
- },
- ]
- },
- })
- return () => {
- formatprovider.dispose()
- }
- }
- }, [monaco])
- useEffect(() => {
- if (editorRef.current) {
- // add margin above first line
- editorRef.current?.changeViewZones((accessor: any) => {
- accessor.addZone({
- afterLineNumber: 0,
- heightInPx: 4,
- domNode: document.createElement('div'),
- })
- })
- }
- }, [queryId])
- const onMount = (editor: any, _monaco: any) => {
- editorRef.current = editor
- // Add margin above first line
- editor.changeViewZones((accessor: any) => {
- accessor.addZone({
- afterLineNumber: 0,
- heightInPx: 4,
- domNode: document.createElement('div'),
- })
- })
- }
- return (
- <Editor
- className="monaco-editor"
- theme="briven"
- defaultLanguage={language}
- defaultValue={defaultValue}
- path={queryId}
- loading={<LogoLoader />}
- options={{
- readOnly,
- tabSize: 2,
- fontSize: 13,
- minimap: {
- enabled: false,
- },
- wordWrap: 'on',
- fixedOverflowWidgets: true,
- contextmenu: contextmenu,
- }}
- onMount={onMount}
- onChange={onInputChange}
- />
- )
- }
- export default SqlEditor
|