Browse Source

fix(json-schema-editor): Add container reference for resize observer in CodeEditor; Update language hook and help doc URL in JsonSchemaConfig (#20488)

tags/1.4.2
Wu Tianwei 5 months ago
parent
commit
9b47f9f786
No account linked to committer's email address

+ 18
- 3
web/app/components/workflow/nodes/llm/components/json-schema-config-modal/code-editor.tsx View File

const { theme } = useTheme() const { theme } = useTheme()
const monacoRef = useRef<any>(null) const monacoRef = useRef<any>(null)
const editorRef = useRef<any>(null) const editorRef = useRef<any>(null)
const containerRef = useRef<HTMLDivElement>(null)


useEffect(() => { useEffect(() => {
if (monacoRef.current) { if (monacoRef.current) {
onUpdate?.(value) onUpdate?.(value)
}, [onUpdate]) }, [onUpdate])


useEffect(() => {
const resizeObserver = new ResizeObserver(() => {
editorRef.current?.layout()
})

if (containerRef.current)
resizeObserver.observe(containerRef.current)

return () => {
resizeObserver.disconnect()
}
}, [])

return ( return (
<div className={classNames('flex flex-col h-full bg-components-input-bg-normal overflow-hidden', className)}> <div className={classNames('flex flex-col h-full bg-components-input-bg-normal overflow-hidden', className)}>
<div className='flex items-center justify-between pl-2 pr-1 pt-1'> <div className='flex items-center justify-between pl-2 pr-1 pt-1'>
</Tooltip> </Tooltip>
</div> </div>
</div> </div>
<div className={classNames('relative', editorWrapperClassName)}>
<div
ref={containerRef}
className={classNames('relative overflow-hidden', editorWrapperClassName)}
>
<Editor <Editor
height='100%'
defaultLanguage='json' defaultLanguage='json'
value={value} value={value}
onChange={handleEditorChange} onChange={handleEditorChange}
scrollBeyondLastLine: false, scrollBeyondLastLine: false,
wordWrap: 'on', wordWrap: 'on',
wrappingIndent: 'same', wrappingIndent: 'same',
// Add these options
overviewRulerBorder: false, overviewRulerBorder: false,
hideCursorInOverviewRuler: true, hideCursorInOverviewRuler: true,
renderLineHighlightOnlyWhenFocus: false, renderLineHighlightOnlyWhenFocus: false,

+ 3
- 11
web/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-config.tsx View File

import ErrorMessage from './error-message' import ErrorMessage from './error-message'
import { useVisualEditorStore } from './visual-editor/store' import { useVisualEditorStore } from './visual-editor/store'
import Toast from '@/app/components/base/toast' import Toast from '@/app/components/base/toast'
import { useGetLanguage } from '@/context/i18n'
import { useGetDocLanguage } from '@/context/i18n'
import { JSON_SCHEMA_MAX_DEPTH } from '@/config' import { JSON_SCHEMA_MAX_DEPTH } from '@/config'


type JsonSchemaConfigProps = { type JsonSchemaConfigProps = {
additionalProperties: false, additionalProperties: false,
} }


const HELP_DOC_URL = {
zh_Hans: 'https://docs.dify.ai/zh-hans/guides/workflow/structured-outputs',
en_US: 'https://docs.dify.ai/en/guides/workflow/structured-outputs',
ja_JP: 'https://docs.dify.ai/ja-jp/guides/workflow/structured-outputs',
}

type LocaleKey = keyof typeof HELP_DOC_URL

const JsonSchemaConfig: FC<JsonSchemaConfigProps> = ({ const JsonSchemaConfig: FC<JsonSchemaConfigProps> = ({
defaultSchema, defaultSchema,
onSave, onSave,
onClose, onClose,
}) => { }) => {
const { t } = useTranslation() const { t } = useTranslation()
const locale = useGetLanguage() as LocaleKey
const docLanguage = useGetDocLanguage()
const [currentTab, setCurrentTab] = useState(SchemaView.VisualEditor) const [currentTab, setCurrentTab] = useState(SchemaView.VisualEditor)
const [jsonSchema, setJsonSchema] = useState(defaultSchema || DEFAULT_SCHEMA) const [jsonSchema, setJsonSchema] = useState(defaultSchema || DEFAULT_SCHEMA)
const [json, setJson] = useState(JSON.stringify(jsonSchema, null, 2)) const [json, setJson] = useState(JSON.stringify(jsonSchema, null, 2))
<div className='flex items-center gap-x-2 p-6 pt-5'> <div className='flex items-center gap-x-2 p-6 pt-5'>
<a <a
className='flex grow items-center gap-x-1 text-text-accent' className='flex grow items-center gap-x-1 text-text-accent'
href={HELP_DOC_URL[locale]}
href={`https://docs.dify.ai/${docLanguage}/guides/workflow/structured-outputs`}
target='_blank' target='_blank'
rel='noopener noreferrer' rel='noopener noreferrer'
> >

+ 1
- 1
web/app/components/workflow/nodes/llm/components/json-schema-config-modal/schema-editor.tsx View File

}) => { }) => {
return ( return (
<CodeEditor <CodeEditor
className='rounded-xl'
className='grow rounded-xl'
editorWrapperClassName='grow' editorWrapperClassName='grow'
value={schema} value={schema}
onUpdate={onUpdate} onUpdate={onUpdate}

Loading…
Cancel
Save