import type { FC } from 'react' import { useMemo, } from 'react' import { useTranslation } from 'react-i18next' import { memo } from 'react' import type { DataSourceNodeType } from './types' import { CollectionType } from '@/app/components/tools/types' import type { NodePanelProps } from '@/app/components/workflow/types' import { Field, GroupWithBox, } from '@/app/components/workflow/nodes/_base/components/layout' import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars' import StructureOutputItem from '@/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/show' import TagInput from '@/app/components/base/tag-input' import { Type } from '../llm/types' import { useConfig } from './hooks/use-config' const Panel: FC> = ({ id, data }) => { const { t } = useTranslation() const { output_schema = {}, provider_id, provider_type, fileExtensions = [], } = data const { handleFileExtensionsChange } = useConfig(id) const outputSchema = useMemo(() => { const res: any[] = [] if (!output_schema) return [] Object.keys(output_schema.properties).forEach((outputKey) => { const output = output_schema.properties[outputKey] const type = output.type if (type === 'object') { res.push({ name: outputKey, value: output, }) } else { res.push({ name: outputKey, type: output.type === 'array' ? `Array[${output.items?.type.slice(0, 1).toLocaleUpperCase()}${output.items?.type.slice(1)}]` : `${output.type.slice(0, 1).toLocaleUpperCase()}${output.type.slice(1)}`, description: output.description, }) } }) return res }, [output_schema]) const hasObjectOutput = useMemo(() => { if (!output_schema) return false const properties = output_schema.properties return Object.keys(properties).some(key => properties[key].type === 'object') }, [output_schema]) return (
{ provider_id === 'langgenius/file/file' && provider_type === CollectionType.datasource && ( ) } {outputSchema.map((outputItem: any) => (
{outputItem.value?.type === 'object' ? ( ) : ( )}
))}
) } export default memo(Panel)