in seatunnel-ui/src/components/monaco-editor/index.tsx [84:159]
setup(props, ctx) {
let editor = null as monaco.editor.IStandaloneCodeEditor | null
const themeStore = useThemeStore()
const monacoEditorThemeRef = ref(themeStore.darkTheme ? 'vs-dark' : 'vs')
const editorRef = ref()
const getValue = () => editor?.getValue()
const formItem = useFormItem({})
const initMonacoEditor = () => {
const dom = editorRef.value
if (dom) {
editor = monaco.editor.create(dom, {
...props.options,
readOnly: formItem.mergedDisabledRef.value || props.options?.readOnly,
value: props.defaultValue ?? props.value,
language: props.language,
automaticLayout: true,
theme: monacoEditorThemeRef.value
})
editor.onDidChangeModelContent(() => {
const { onUpdateValue, 'onUpdate:value': _onUpdateValue } = props
const value = editor?.getValue() || ''
if (onUpdateValue) call(onUpdateValue as OnUpdateValueImpl, value)
if (_onUpdateValue) call(_onUpdateValue as OnUpdateValueImpl, value)
ctx.emit('change', value)
formItem.nTriggerFormChange()
formItem.nTriggerFormInput()
})
editor.onDidBlurEditorWidget(() => {
ctx.emit('blur')
formItem.nTriggerFormBlur()
})
editor.onDidFocusEditorWidget(() => {
ctx.emit('focus')
formItem.nTriggerFormFocus()
})
}
}
onMounted(() => initMonacoEditor())
onUnmounted(() => {
editor?.dispose()
})
watch(
() => props.value,
(val) => {
if (val !== getValue()) {
editor?.setValue(val)
}
}
)
watch(
() => formItem.mergedDisabledRef.value,
(value) => {
editor?.updateOptions({ readOnly: value })
}
)
watch(
() => themeStore.darkTheme,
() => {
editor?.dispose()
monacoEditorThemeRef.value = themeStore.darkTheme ? 'vs-dark' : 'vs'
initMonacoEditor()
}
)
ctx.expose({ getValue })
return { editorRef }
},