mirror of
https://github.com/langgenius/dify.git
synced 2025-11-16 11:23:44 +00:00
refactor: streamline data source type handling and improve FieldList props
This commit is contained in:
parent
b320ebe2ba
commit
dd0cf6fadc
@ -1,12 +1,11 @@
|
|||||||
import React, { useMemo, useState } from 'react'
|
import React, { useState } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { PreviewContainer } from '../../../preview/container'
|
import { PreviewContainer } from '../../../preview/container'
|
||||||
import { PreviewHeader } from '../../../preview/header'
|
import { PreviewHeader } from '../../../preview/header'
|
||||||
import type { Datasource } from '@/app/components/rag-pipeline/components/panel/test-run/types'
|
import type { Datasource } from '@/app/components/rag-pipeline/components/panel/test-run/types'
|
||||||
import type { CrawlResultItem, CustomFile, DocumentItem, FileIndexingEstimateResponse } from '@/models/datasets'
|
import type { CrawlResultItem, CustomFile, DocumentItem, FileIndexingEstimateResponse } from '@/models/datasets'
|
||||||
import { ChunkingMode, DataSourceType } from '@/models/datasets'
|
import { ChunkingMode } from '@/models/datasets'
|
||||||
import type { NotionPage } from '@/models/common'
|
import type { NotionPage } from '@/models/common'
|
||||||
import { DataSourceProvider } from '@/models/common'
|
|
||||||
import PreviewDocumentPicker from '../../../common/document-picker/preview-document-picker'
|
import PreviewDocumentPicker from '../../../common/document-picker/preview-document-picker'
|
||||||
import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail'
|
import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail'
|
||||||
import { ChunkContainer, QAPreview } from '../../../chunk'
|
import { ChunkContainer, QAPreview } from '../../../chunk'
|
||||||
@ -16,6 +15,7 @@ import { SkeletonContainer, SkeletonPoint, SkeletonRectangle, SkeletonRow } from
|
|||||||
import { RiSearchEyeLine } from '@remixicon/react'
|
import { RiSearchEyeLine } from '@remixicon/react'
|
||||||
import Badge from '@/app/components/base/badge'
|
import Badge from '@/app/components/base/badge'
|
||||||
import Button from '@/app/components/base/button'
|
import Button from '@/app/components/base/button'
|
||||||
|
import { DatasourceType } from '@/models/pipeline'
|
||||||
|
|
||||||
type ChunkPreviewProps = {
|
type ChunkPreviewProps = {
|
||||||
datasource: Datasource
|
datasource: Datasource
|
||||||
@ -45,12 +45,7 @@ const ChunkPreview = ({
|
|||||||
const [previewNotionPage, setPreviewNotionPage] = useState<NotionPage>(notionPages[0])
|
const [previewNotionPage, setPreviewNotionPage] = useState<NotionPage>(notionPages[0])
|
||||||
const [previewWebsitePage, setPreviewWebsitePage] = useState<CrawlResultItem>(websitePages[0])
|
const [previewWebsitePage, setPreviewWebsitePage] = useState<CrawlResultItem>(websitePages[0])
|
||||||
|
|
||||||
const dataSourceType = useMemo(() => {
|
const dataSourceType = datasource?.type
|
||||||
const type = datasource.type
|
|
||||||
if (type === DataSourceProvider.fireCrawl || type === DataSourceProvider.jinaReader || type === DataSourceProvider.waterCrawl)
|
|
||||||
return DataSourceType.WEB
|
|
||||||
return type
|
|
||||||
}, [datasource.type])
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PreviewContainer
|
<PreviewContainer
|
||||||
@ -58,7 +53,7 @@ const ChunkPreview = ({
|
|||||||
title={t('datasetCreation.stepTwo.preview')}
|
title={t('datasetCreation.stepTwo.preview')}
|
||||||
>
|
>
|
||||||
<div className='flex items-center gap-1'>
|
<div className='flex items-center gap-1'>
|
||||||
{dataSourceType === DataSourceType.FILE
|
{dataSourceType === DatasourceType.localFile
|
||||||
&& <PreviewDocumentPicker
|
&& <PreviewDocumentPicker
|
||||||
files={files as Array<Required<CustomFile>>}
|
files={files as Array<Required<CustomFile>>}
|
||||||
onChange={(selected) => {
|
onChange={(selected) => {
|
||||||
@ -67,7 +62,7 @@ const ChunkPreview = ({
|
|||||||
value={previewFile}
|
value={previewFile}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
{dataSourceType === DataSourceType.NOTION
|
{dataSourceType === DatasourceType.onlineDocument
|
||||||
&& <PreviewDocumentPicker
|
&& <PreviewDocumentPicker
|
||||||
files={
|
files={
|
||||||
notionPages.map(page => ({
|
notionPages.map(page => ({
|
||||||
@ -87,7 +82,7 @@ const ChunkPreview = ({
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
{dataSourceType === DataSourceType.WEB
|
{dataSourceType === DatasourceType.websiteCrawl
|
||||||
&& <PreviewDocumentPicker
|
&& <PreviewDocumentPicker
|
||||||
files={
|
files={
|
||||||
websitePages.map(page => ({
|
websitePages.map(page => ({
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import React, { useCallback } from 'react'
|
||||||
import { RiAddLine } from '@remixicon/react'
|
import { RiAddLine } from '@remixicon/react'
|
||||||
import cn from '@/utils/classnames'
|
import cn from '@/utils/classnames'
|
||||||
import InputFieldEditor from '../editor'
|
import InputFieldEditor from '../editor'
|
||||||
@ -7,20 +8,26 @@ import { useFieldList } from './hooks'
|
|||||||
import FieldListContainer from './field-list-container'
|
import FieldListContainer from './field-list-container'
|
||||||
|
|
||||||
type FieldListProps = {
|
type FieldListProps = {
|
||||||
|
nodeId: string
|
||||||
LabelRightContent: React.ReactNode
|
LabelRightContent: React.ReactNode
|
||||||
inputFields: InputVar[]
|
inputFields: InputVar[]
|
||||||
handleInputFieldsChange: (value: InputVar[]) => void
|
handleInputFieldsChange: (key: string, value: InputVar[]) => void
|
||||||
readonly?: boolean
|
readonly?: boolean
|
||||||
labelClassName?: string
|
labelClassName?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const FieldList = ({
|
const FieldList = ({
|
||||||
|
nodeId,
|
||||||
LabelRightContent,
|
LabelRightContent,
|
||||||
inputFields: initialInputFields,
|
inputFields: initialInputFields,
|
||||||
handleInputFieldsChange: onInputFieldsChange,
|
handleInputFieldsChange,
|
||||||
readonly,
|
readonly,
|
||||||
labelClassName,
|
labelClassName,
|
||||||
}: FieldListProps) => {
|
}: FieldListProps) => {
|
||||||
|
const onInputFieldsChange = useCallback((value: InputVar[]) => {
|
||||||
|
handleInputFieldsChange(nodeId, value)
|
||||||
|
}, [handleInputFieldsChange, nodeId])
|
||||||
|
|
||||||
const {
|
const {
|
||||||
inputFields,
|
inputFields,
|
||||||
handleSubmitField,
|
handleSubmitField,
|
||||||
@ -67,4 +74,4 @@ const FieldList = ({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default FieldList
|
export default React.memo(FieldList)
|
||||||
|
|||||||
@ -107,22 +107,24 @@ const InputFieldDialog = ({
|
|||||||
return (
|
return (
|
||||||
<FieldList
|
<FieldList
|
||||||
key={key}
|
key={key}
|
||||||
|
nodeId={key}
|
||||||
LabelRightContent={<Datasource nodeData={datasourceNodeDataMap[key]} />}
|
LabelRightContent={<Datasource nodeData={datasourceNodeDataMap[key]} />}
|
||||||
inputFields={inputFields}
|
inputFields={inputFields}
|
||||||
readonly={readonly}
|
readonly={readonly}
|
||||||
labelClassName='pt-2 pb-1'
|
labelClassName='pt-2 pb-1'
|
||||||
handleInputFieldsChange={updateInputFields.bind(null, key)}
|
handleInputFieldsChange={updateInputFields}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
{/* Shared Inputs */}
|
{/* Shared Inputs */}
|
||||||
<FieldList
|
<FieldList
|
||||||
|
nodeId='shared'
|
||||||
LabelRightContent={<SharedInputs />}
|
LabelRightContent={<SharedInputs />}
|
||||||
inputFields={inputFieldsMap.shared || []}
|
inputFields={inputFieldsMap.shared || []}
|
||||||
readonly={readonly}
|
readonly={readonly}
|
||||||
labelClassName='pt-1 pb-2'
|
labelClassName='pt-1 pb-2'
|
||||||
handleInputFieldsChange={updateInputFields.bind(null, 'shared')}
|
handleInputFieldsChange={updateInputFields}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<FooterTip />
|
<FooterTip />
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user