mirror of
https://github.com/langgenius/dify.git
synced 2025-12-05 15:26:11 +00:00
fix: add isRunning prop to ProcessDocuments and related components for better processing state management
This commit is contained in:
parent
a919e3e135
commit
405139c377
@ -416,6 +416,7 @@ const CreateFormPipeline = () => {
|
||||
<ProcessDocuments
|
||||
ref={formRef}
|
||||
dataSourceNodeId={datasource!.nodeId}
|
||||
isRunning={isPending}
|
||||
onProcess={onClickProcess}
|
||||
onPreview={onClickPreview}
|
||||
onSubmit={handleSubmit}
|
||||
|
||||
@ -13,6 +13,7 @@ type OptionsProps = {
|
||||
onSubmit: (data: Record<string, any>) => void
|
||||
onPreview: () => void
|
||||
ref: React.RefObject<any>
|
||||
isRunning: boolean
|
||||
}
|
||||
|
||||
const Form = ({
|
||||
@ -22,6 +23,7 @@ const Form = ({
|
||||
onSubmit,
|
||||
onPreview,
|
||||
ref,
|
||||
isRunning,
|
||||
}: OptionsProps) => {
|
||||
const form = useAppForm({
|
||||
defaultValues: initialData,
|
||||
@ -74,6 +76,7 @@ const Form = ({
|
||||
onReset={handleReset}
|
||||
resetDisabled={!isDirty}
|
||||
onPreview={onPreview}
|
||||
previewDisabled={isRunning}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@ -6,12 +6,14 @@ import { RiSearchEyeLine } from '@remixicon/react'
|
||||
type HeaderProps = {
|
||||
onReset: () => void
|
||||
resetDisabled: boolean
|
||||
previewDisabled: boolean
|
||||
onPreview?: () => void
|
||||
}
|
||||
|
||||
const Header = ({
|
||||
onReset,
|
||||
resetDisabled,
|
||||
previewDisabled,
|
||||
onPreview,
|
||||
}: HeaderProps) => {
|
||||
const { t } = useTranslation()
|
||||
@ -28,6 +30,7 @@ const Header = ({
|
||||
variant='secondary-accent'
|
||||
onClick={onPreview}
|
||||
className='gap-x-0.5'
|
||||
disabled={previewDisabled}
|
||||
>
|
||||
<RiSearchEyeLine className='size-4' />
|
||||
<span className='px-0.5'>{t('datasetPipeline.addDocuments.stepTwo.previewChunks')}</span>
|
||||
|
||||
@ -8,6 +8,7 @@ import { useConfigurations, useInitialData } from '@/app/components/rag-pipeline
|
||||
type ProcessDocumentsProps = {
|
||||
dataSourceNodeId: string
|
||||
ref: React.RefObject<any>
|
||||
isRunning: boolean
|
||||
onProcess: () => void
|
||||
onPreview: () => void
|
||||
onSubmit: (data: Record<string, any>) => void
|
||||
@ -16,6 +17,7 @@ type ProcessDocumentsProps = {
|
||||
|
||||
const ProcessDocuments = ({
|
||||
dataSourceNodeId,
|
||||
isRunning,
|
||||
onProcess,
|
||||
onPreview,
|
||||
onSubmit,
|
||||
@ -36,8 +38,9 @@ const ProcessDocuments = ({
|
||||
schema={schema}
|
||||
onSubmit={onSubmit}
|
||||
onPreview={onPreview}
|
||||
isRunning={isRunning}
|
||||
/>
|
||||
<Actions runDisabled={isFetchingParams} onBack={onBack} onProcess={onProcess} />
|
||||
<Actions runDisabled={isFetchingParams || isRunning} onBack={onBack} onProcess={onProcess} />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@ -8,12 +8,13 @@ import Loading from '@/app/components/base/loading'
|
||||
import ProcessDocuments from './process-documents'
|
||||
import LeftHeader from './left-header'
|
||||
import { usePipelineExecutionLog, useRunPublishedPipeline } from '@/service/use-pipeline'
|
||||
import type { PublishedPipelineRunPreviewResponse } from '@/models/pipeline'
|
||||
import { DatasourceType } from '@/models/pipeline'
|
||||
import type { OnlineDriveFile, PublishedPipelineRunPreviewResponse } from '@/models/pipeline'
|
||||
import { DatasourceType, OnlineDriveFileType } from '@/models/pipeline'
|
||||
import { noop } from 'lodash-es'
|
||||
import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail'
|
||||
import { useRouter } from 'next/navigation'
|
||||
import { useInvalidDocumentDetail, useInvalidDocumentList } from '@/service/knowledge/use-document'
|
||||
import { isFile } from '../../../create-from-pipeline/data-source/online-drive/utils'
|
||||
|
||||
type PipelineSettingsProps = {
|
||||
datasetId: string
|
||||
@ -76,6 +77,21 @@ const PipelineSettings = ({
|
||||
return onlineDocuments
|
||||
}, [lastRunData])
|
||||
|
||||
const onlineDriveFiles = useMemo(() => {
|
||||
const onlineDriveFiles: OnlineDriveFile[] = []
|
||||
if (lastRunData?.datasource_type === DatasourceType.onlineDrive) {
|
||||
const { key } = lastRunData.datasource_info
|
||||
const isFileType = isFile(key)
|
||||
const filePathList = key.split('/')
|
||||
onlineDriveFiles.push({
|
||||
key,
|
||||
displayName: `${isFileType ? filePathList.pop() : filePathList[filePathList.length - 2]}${isFileType ? '' : '/'}`,
|
||||
type: isFileType ? OnlineDriveFileType.file : OnlineDriveFileType.folder,
|
||||
})
|
||||
}
|
||||
return onlineDriveFiles
|
||||
}, [lastRunData])
|
||||
|
||||
const { mutateAsync: runPublishedPipeline, isIdle, isPending } = useRunPublishedPipeline()
|
||||
|
||||
const handlePreviewChunks = useCallback(async (data: Record<string, any>) => {
|
||||
@ -117,10 +133,10 @@ const PipelineSettings = ({
|
||||
onSuccess: () => {
|
||||
invalidDocumentList()
|
||||
invalidDocumentDetail()
|
||||
push(`/datasets/${datasetId}/documents/${documentId}`)
|
||||
push(`/datasets/${datasetId}/documents`)
|
||||
},
|
||||
})
|
||||
}, [datasetId, documentId, invalidDocumentDetail, invalidDocumentList, lastRunData, pipelineId, push, runPublishedPipeline])
|
||||
}, [datasetId, invalidDocumentDetail, invalidDocumentList, lastRunData, pipelineId, push, runPublishedPipeline])
|
||||
|
||||
const onClickProcess = useCallback(() => {
|
||||
isPreview.current = false
|
||||
@ -160,6 +176,7 @@ const PipelineSettings = ({
|
||||
onProcess={onClickProcess}
|
||||
onPreview={onClickPreview}
|
||||
onSubmit={handleSubmit}
|
||||
isRunning={isPending}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@ -169,9 +186,10 @@ const PipelineSettings = ({
|
||||
<div className='flex h-full flex-col pl-2 pt-2'>
|
||||
<ChunkPreview
|
||||
dataSourceType={lastRunData!.datasource_type}
|
||||
files={files}
|
||||
localFiles={files}
|
||||
onlineDocuments={onlineDocuments}
|
||||
websitePages={websitePages}
|
||||
onlineDriveFiles={onlineDriveFiles}
|
||||
isIdle={isIdle}
|
||||
isPending={isPending && isPreview.current}
|
||||
estimateData={estimateData}
|
||||
@ -179,6 +197,7 @@ const PipelineSettings = ({
|
||||
handlePreviewFileChange={noop}
|
||||
handlePreviewOnlineDocumentChange={noop}
|
||||
handlePreviewWebsitePageChange={noop}
|
||||
handlePreviewOnlineDriveFileChange={noop}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -7,6 +7,7 @@ import { useConfigurations, useInitialData } from '@/app/components/rag-pipeline
|
||||
type ProcessDocumentsProps = {
|
||||
datasourceNodeId: string
|
||||
lastRunInputData: Record<string, any>
|
||||
isRunning: boolean
|
||||
ref: React.RefObject<any>
|
||||
onProcess: () => void
|
||||
onPreview: () => void
|
||||
@ -16,6 +17,7 @@ type ProcessDocumentsProps = {
|
||||
const ProcessDocuments = ({
|
||||
datasourceNodeId,
|
||||
lastRunInputData,
|
||||
isRunning,
|
||||
onProcess,
|
||||
onPreview,
|
||||
onSubmit,
|
||||
@ -35,8 +37,9 @@ const ProcessDocuments = ({
|
||||
schema={schema}
|
||||
onSubmit={onSubmit}
|
||||
onPreview={onPreview}
|
||||
isRunning={isRunning}
|
||||
/>
|
||||
<Actions runDisabled={isFetchingParams} onProcess={onProcess} />
|
||||
<Actions runDisabled={isFetchingParams || isRunning} onProcess={onProcess} />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user