import type { FC } from 'react' import { useCallback, useMemo, useState, } from 'react' import { useTranslation } from 'react-i18next' import { memo } from 'react' import type { DataSourceNodeType } from './types' import { DataSourceClassification } from './types' import type { NodePanelProps } from '@/app/components/workflow/types' import { BoxGroupField, } from '@/app/components/workflow/nodes/_base/components/layout' import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars' import TagInput from '@/app/components/base/tag-input' import { useNodesReadOnly } from '@/app/components/workflow/hooks' import { useConfig } from './hooks/use-config' import { COMMON_OUTPUT, LOCAL_FILE_OUTPUT, ONLINE_DOCUMENT_OUTPUT, ONLINE_DRIVE_OUTPUT, WEBSITE_CRAWL_OUTPUT, } from './constants' import { useStore } from '@/app/components/workflow/store' import InputVarList from '@/app/components/workflow/nodes/tool/components/input-var-list' import { toolParametersToFormSchemas } from '@/app/components/tools/utils/to-form-schema' import type { Var } from '@/app/components/workflow/types' import { VarType } from '@/app/components/workflow/types' const Panel: FC> = ({ id, data }) => { const { t } = useTranslation() const { nodesReadOnly } = useNodesReadOnly() const dataSourceList = useStore(s => s.dataSourceList) const { provider_type, plugin_id, fileExtensions = [], datasource_parameters, } = data const { handleFileExtensionsChange, handleParametersChange, } = useConfig(id) const isLocalFile = provider_type === DataSourceClassification.localFile const isWebsiteCrawl = provider_type === DataSourceClassification.websiteCrawl const isOnlineDocument = provider_type === DataSourceClassification.onlineDocument const isOnlineDrive = provider_type === DataSourceClassification.onlineDrive const currentDataSource = dataSourceList?.find(ds => ds.plugin_id === plugin_id) const currentDataSourceItem: any = currentDataSource?.tools.find(tool => tool.name === data.datasource_name) const formSchemas = useMemo(() => { return currentDataSourceItem ? toolParametersToFormSchemas(currentDataSourceItem.parameters) : [] }, [currentDataSourceItem]) const [currVarIndex, setCurrVarIndex] = useState(-1) const currVarType = formSchemas[currVarIndex]?._type const handleOnVarOpen = useCallback((index: number) => { setCurrVarIndex(index) }, []) const filterVar = useCallback((varPayload: Var) => { if (currVarType) return varPayload.type === currVarType return varPayload.type !== VarType.arrayFile }, [currVarType]) return (
{ currentDataSource?.is_authorized && !isLocalFile && !!formSchemas?.length && ( ) } { isLocalFile && (
) } { COMMON_OUTPUT.map((item, index) => ( )) } { isLocalFile && LOCAL_FILE_OUTPUT.map((item, index) => ( ({ name: item.name, type: item.type, description: item.description, }))} /> )) } { isWebsiteCrawl && WEBSITE_CRAWL_OUTPUT.map((item, index) => ( )) } { isOnlineDocument && ONLINE_DOCUMENT_OUTPUT.map((item, index) => ( )) } { isOnlineDrive && ONLINE_DRIVE_OUTPUT.map((item, index) => ( ({ name: item.name, type: item.type, description: item.description, }))} /> )) }
) } export default memo(Panel)