mirror of
https://github.com/langgenius/dify.git
synced 2026-05-05 18:08:07 +08:00
fix: enchance code editor syle
This commit is contained in:
@ -1,9 +1,10 @@
|
|||||||
'use client'
|
'use client'
|
||||||
import type { FC } from 'react'
|
import type { FC } from 'react'
|
||||||
import Editor from '@monaco-editor/react'
|
import Editor from '@monaco-editor/react'
|
||||||
import React from 'react'
|
import React, { useRef } from 'react'
|
||||||
import Base from './base'
|
import Base from '../base'
|
||||||
import { CodeLanguage } from '@/app/components/workflow/nodes/code/types'
|
import { CodeLanguage } from '@/app/components/workflow/nodes/code/types'
|
||||||
|
import './style.css'
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
value: string
|
value: string
|
||||||
@ -11,6 +12,7 @@ type Props = {
|
|||||||
title: JSX.Element
|
title: JSX.Element
|
||||||
language: CodeLanguage
|
language: CodeLanguage
|
||||||
headerRight?: JSX.Element
|
headerRight?: JSX.Element
|
||||||
|
readOnly?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
const CodeEditor: FC<Props> = ({
|
const CodeEditor: FC<Props> = ({
|
||||||
@ -19,12 +21,43 @@ const CodeEditor: FC<Props> = ({
|
|||||||
title,
|
title,
|
||||||
headerRight,
|
headerRight,
|
||||||
language,
|
language,
|
||||||
|
readOnly,
|
||||||
}) => {
|
}) => {
|
||||||
const [isFocus, setIsFocus] = React.useState(false)
|
const [isFocus, setIsFocus] = React.useState(false)
|
||||||
|
|
||||||
const handleEditorChange = (value: string | undefined) => {
|
const handleEditorChange = (value: string | undefined) => {
|
||||||
onChange(value || '')
|
onChange(value || '')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const editorRef = useRef(null)
|
||||||
|
const handleEditorDidMount = (editor: any, monaco: any) => {
|
||||||
|
editorRef.current = editor
|
||||||
|
editor.onDidFocusEditorText(() => {
|
||||||
|
setIsFocus(true)
|
||||||
|
})
|
||||||
|
editor.onDidBlurEditorText(() => {
|
||||||
|
setIsFocus(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
monaco.editor.defineTheme('blur-theme', {
|
||||||
|
base: 'vs',
|
||||||
|
inherit: true,
|
||||||
|
rules: [],
|
||||||
|
colors: {
|
||||||
|
'editor.background': '#F2F4F7',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
monaco.editor.defineTheme('focus-theme', {
|
||||||
|
base: 'vs',
|
||||||
|
inherit: true,
|
||||||
|
rules: [],
|
||||||
|
colors: {
|
||||||
|
'editor.background': '#ffffff',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Base
|
<Base
|
||||||
@ -38,18 +71,21 @@ const CodeEditor: FC<Props> = ({
|
|||||||
<Editor
|
<Editor
|
||||||
className='h-full'
|
className='h-full'
|
||||||
defaultLanguage={language === CodeLanguage.javascript ? 'javascript' : 'python'}
|
defaultLanguage={language === CodeLanguage.javascript ? 'javascript' : 'python'}
|
||||||
|
theme={isFocus ? 'focus-theme' : 'blur-theme'}
|
||||||
value={value}
|
value={value}
|
||||||
onChange={handleEditorChange}
|
onChange={handleEditorChange}
|
||||||
// https://microsoft.github.io/monaco-editor/typedoc/interfaces/editor.IEditorOptions.html
|
// https://microsoft.github.io/monaco-editor/typedoc/interfaces/editor.IEditorOptions.html
|
||||||
options={{
|
options={{
|
||||||
|
readOnly,
|
||||||
quickSuggestions: false,
|
quickSuggestions: false,
|
||||||
minimap: { enabled: false },
|
minimap: { enabled: false },
|
||||||
|
lineNumbersMinChars: 1, // would change line num width
|
||||||
// lineNumbers: (num) => {
|
// lineNumbers: (num) => {
|
||||||
// return <div>{num}</div>
|
// return <div>{num}</div>
|
||||||
// }
|
// }
|
||||||
}}
|
}}
|
||||||
|
onMount={handleEditorDidMount}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
</Base>
|
</Base>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
.margin-view-overlays {
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
@ -59,6 +59,7 @@ const Panel: FC<NodePanelProps<CodeNodeType>> = ({
|
|||||||
<Split />
|
<Split />
|
||||||
{inputs.code_language}
|
{inputs.code_language}
|
||||||
<CodeEditor
|
<CodeEditor
|
||||||
|
readOnly={readOnly}
|
||||||
title={
|
title={
|
||||||
<TypeSelector
|
<TypeSelector
|
||||||
options={codeLanguages}
|
options={codeLanguages}
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import useKeyValueList from '../../hooks/use-key-value-list'
|
|||||||
import KeyValue from '../key-value'
|
import KeyValue from '../key-value'
|
||||||
import TextEditor from '../../../_base/components/editor/text-editor'
|
import TextEditor from '../../../_base/components/editor/text-editor'
|
||||||
import CodeEditor from '../../../_base/components/editor/code-editor'
|
import CodeEditor from '../../../_base/components/editor/code-editor'
|
||||||
|
import { CodeLanguage } from '../../../code/types'
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
readonly: boolean
|
readonly: boolean
|
||||||
@ -123,8 +124,10 @@ const EditBody: FC<Props> = ({
|
|||||||
|
|
||||||
{type === BodyType.json && (
|
{type === BodyType.json && (
|
||||||
<CodeEditor
|
<CodeEditor
|
||||||
|
readOnly={readonly}
|
||||||
title={<div className='uppercase'>JSON</div>}
|
title={<div className='uppercase'>JSON</div>}
|
||||||
value={payload.data} onChange={handleBodyValueChange}
|
value={payload.data} onChange={handleBodyValueChange}
|
||||||
|
language={CodeLanguage.javascript}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import type { FC } from 'react'
|
import type { FC } from 'react'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
|
import { CodeLanguage } from '../code/types'
|
||||||
import useConfig from './use-config'
|
import useConfig from './use-config'
|
||||||
import type { TemplateTransformNodeType } from './types'
|
import type { TemplateTransformNodeType } from './types'
|
||||||
import VarList from '@/app/components/workflow/nodes/_base/components/variable/var-list'
|
import VarList from '@/app/components/workflow/nodes/_base/components/variable/var-list'
|
||||||
@ -46,6 +47,8 @@ const Panel: FC<NodePanelProps<TemplateTransformNodeType>> = ({
|
|||||||
</Field>
|
</Field>
|
||||||
<Split />
|
<Split />
|
||||||
<CodeEditor
|
<CodeEditor
|
||||||
|
readOnly={readOnly}
|
||||||
|
language={CodeLanguage.python3}
|
||||||
title={
|
title={
|
||||||
<div className='uppercase'>{t(`${i18nPrefix}.code`)}</div>
|
<div className='uppercase'>{t(`${i18nPrefix}.code`)}</div>
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user