| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 | 
                        - import type { FC } from 'react'
 - import {
 -   useMemo,
 - } 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 StructureOutputItem from '@/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/show'
 - 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,
 - } from './constants'
 - import { useStore } from '@/app/components/workflow/store'
 - import { toolParametersToFormSchemas } from '@/app/components/tools/utils/to-form-schema'
 - import ToolForm from '../tool/components/tool-form'
 - import { wrapStructuredVarItem } from '@/app/components/workflow/utils/tool'
 - import useMatchSchemaType, { getMatchedSchemaType } from '../_base/components/variable/use-match-schema-type'
 - 
 - const Panel: FC<NodePanelProps<DataSourceNodeType>> = ({ 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,
 -     outputSchema,
 -     hasObjectOutput,
 -   } = useConfig(id, dataSourceList)
 -   const isLocalFile = provider_type === DataSourceClassification.localFile
 -   const currentDataSource = dataSourceList?.find(ds => ds.plugin_id === plugin_id)
 -   const currentDataSourceItem: any = currentDataSource?.tools?.find((tool: any) => tool.name === data.datasource_name)
 -   const formSchemas = useMemo(() => {
 -     return currentDataSourceItem ? toolParametersToFormSchemas(currentDataSourceItem.parameters) : []
 -   }, [currentDataSourceItem])
 - 
 -   const pipelineId = useStore(s => s.pipelineId)
 -   const setShowInputFieldPanel = useStore(s => s.setShowInputFieldPanel)
 -   const { schemaTypeDefinitions } = useMatchSchemaType()
 -   return (
 -     <div >
 -       {
 -         currentDataSource?.is_authorized && !isLocalFile && !!formSchemas?.length && (
 -           <BoxGroupField
 -             boxGroupProps={{
 -               boxProps: { withBorderBottom: true },
 -             }}
 -             fieldProps={{
 -               fieldTitleProps: {
 -                 title: t('workflow.nodes.tool.inputVars'),
 -               },
 -               supportCollapse: true,
 -             }}
 -           >
 -             {formSchemas.length > 0 && (
 -               <ToolForm
 -                 readOnly={nodesReadOnly}
 -                 nodeId={id}
 -                 schema={formSchemas as any}
 -                 value={datasource_parameters}
 -                 onChange={handleParametersChange}
 -                 currentProvider={currentDataSource}
 -                 currentTool={currentDataSourceItem}
 -                 showManageInputField={!!pipelineId}
 -                 onManageInputField={() => setShowInputFieldPanel?.(true)}
 -               />
 -             )}
 -           </BoxGroupField>
 -         )
 -       }
 -       {
 -         isLocalFile && (
 -           <BoxGroupField
 -             boxGroupProps={{
 -               boxProps: { withBorderBottom: true },
 -             }}
 -             fieldProps={{
 -               fieldTitleProps: {
 -                 title: t('workflow.nodes.dataSource.supportedFileFormats'),
 -               },
 -             }}
 -           >
 -             <div className='rounded-lg bg-components-input-bg-normal p-1 pt-0'>
 -               <TagInput
 -                 items={fileExtensions}
 -                 onChange={handleFileExtensionsChange}
 -                 placeholder={t('workflow.nodes.dataSource.supportedFileFormatsPlaceholder')}
 -                 inputClassName='bg-transparent'
 -                 disableAdd={nodesReadOnly}
 -                 disableRemove={nodesReadOnly}
 -               />
 -             </div>
 -           </BoxGroupField>
 -         )
 -       }
 -       <OutputVars>
 -         {
 -           COMMON_OUTPUT.map((item, index) => (
 -             <VarItem
 -               key={index}
 -               name={item.name}
 -               type={item.type}
 -               description={item.description}
 -               isIndent={hasObjectOutput}
 -             />
 -           ))
 -         }
 -         {
 -           isLocalFile && LOCAL_FILE_OUTPUT.map((item, index) => (
 -             <VarItem
 -               key={index}
 -               name={item.name}
 -               type={item.type}
 -               description={item.description}
 -               subItems={item.subItems.map(item => ({
 -                 name: item.name,
 -                 type: item.type,
 -                 description: item.description,
 -               }))}
 -             />
 -           ))
 -         }
 -         {outputSchema.map((outputItem) => {
 -           const schemaType = getMatchedSchemaType(outputItem.value, schemaTypeDefinitions)
 - 
 -           return (
 -             <div key={outputItem.name}>
 -               {outputItem.value?.type === 'object' ? (
 -                 <StructureOutputItem
 -                   rootClassName='code-sm-semibold text-text-secondary'
 -                   payload={wrapStructuredVarItem(outputItem, schemaType)}
 -                 />
 -               ) : (
 -                 <VarItem
 -                   name={outputItem.name}
 -                   // eslint-disable-next-line sonarjs/no-nested-template-literals
 -                   type={`${outputItem.type.toLocaleLowerCase()}${schemaType ? ` (${schemaType})` : ''}`}
 -                   description={outputItem.description}
 -                   isIndent={hasObjectOutput}
 -                 />
 -               )}
 -             </div>
 -           )
 -         })}
 -       </OutputVars>
 -     </div>
 -   )
 - }
 - 
 - export default memo(Panel)
 
 
  |