Selaa lähdekoodia

fix: add isRunning prop to ProcessDocuments and related components for better processing state management

tags/2.0.0-beta.1
twwu 3 kuukautta sitten
vanhempi
commit
405139c377

+ 1
- 0
web/app/components/datasets/documents/create-from-pipeline/index.tsx Näytä tiedosto

<ProcessDocuments <ProcessDocuments
ref={formRef} ref={formRef}
dataSourceNodeId={datasource!.nodeId} dataSourceNodeId={datasource!.nodeId}
isRunning={isPending}
onProcess={onClickProcess} onProcess={onClickProcess}
onPreview={onClickPreview} onPreview={onClickPreview}
onSubmit={handleSubmit} onSubmit={handleSubmit}

+ 3
- 0
web/app/components/datasets/documents/create-from-pipeline/process-documents/form.tsx Näytä tiedosto

onSubmit: (data: Record<string, any>) => void onSubmit: (data: Record<string, any>) => void
onPreview: () => void onPreview: () => void
ref: React.RefObject<any> ref: React.RefObject<any>
isRunning: boolean
} }


const Form = ({ const Form = ({
onSubmit, onSubmit,
onPreview, onPreview,
ref, ref,
isRunning,
}: OptionsProps) => { }: OptionsProps) => {
const form = useAppForm({ const form = useAppForm({
defaultValues: initialData, defaultValues: initialData,
onReset={handleReset} onReset={handleReset}
resetDisabled={!isDirty} resetDisabled={!isDirty}
onPreview={onPreview} onPreview={onPreview}
previewDisabled={isRunning}
/> />
)} )}
/> />

+ 3
- 0
web/app/components/datasets/documents/create-from-pipeline/process-documents/header.tsx Näytä tiedosto

type HeaderProps = { type HeaderProps = {
onReset: () => void onReset: () => void
resetDisabled: boolean resetDisabled: boolean
previewDisabled: boolean
onPreview?: () => void onPreview?: () => void
} }


const Header = ({ const Header = ({
onReset, onReset,
resetDisabled, resetDisabled,
previewDisabled,
onPreview, onPreview,
}: HeaderProps) => { }: HeaderProps) => {
const { t } = useTranslation() const { t } = useTranslation()
variant='secondary-accent' variant='secondary-accent'
onClick={onPreview} onClick={onPreview}
className='gap-x-0.5' className='gap-x-0.5'
disabled={previewDisabled}
> >
<RiSearchEyeLine className='size-4' /> <RiSearchEyeLine className='size-4' />
<span className='px-0.5'>{t('datasetPipeline.addDocuments.stepTwo.previewChunks')}</span> <span className='px-0.5'>{t('datasetPipeline.addDocuments.stepTwo.previewChunks')}</span>

+ 4
- 1
web/app/components/datasets/documents/create-from-pipeline/process-documents/index.tsx Näytä tiedosto

type ProcessDocumentsProps = { type ProcessDocumentsProps = {
dataSourceNodeId: string dataSourceNodeId: string
ref: React.RefObject<any> ref: React.RefObject<any>
isRunning: boolean
onProcess: () => void onProcess: () => void
onPreview: () => void onPreview: () => void
onSubmit: (data: Record<string, any>) => void onSubmit: (data: Record<string, any>) => void


const ProcessDocuments = ({ const ProcessDocuments = ({
dataSourceNodeId, dataSourceNodeId,
isRunning,
onProcess, onProcess,
onPreview, onPreview,
onSubmit, onSubmit,
schema={schema} schema={schema}
onSubmit={onSubmit} onSubmit={onSubmit}
onPreview={onPreview} onPreview={onPreview}
isRunning={isRunning}
/> />
<Actions runDisabled={isFetchingParams} onBack={onBack} onProcess={onProcess} />
<Actions runDisabled={isFetchingParams || isRunning} onBack={onBack} onProcess={onProcess} />
</div> </div>
) )
} }

+ 24
- 5
web/app/components/datasets/documents/detail/settings/pipeline-settings/index.tsx Näytä tiedosto

import ProcessDocuments from './process-documents' import ProcessDocuments from './process-documents'
import LeftHeader from './left-header' import LeftHeader from './left-header'
import { usePipelineExecutionLog, useRunPublishedPipeline } from '@/service/use-pipeline' 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 { noop } from 'lodash-es'
import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail' import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail'
import { useRouter } from 'next/navigation' import { useRouter } from 'next/navigation'
import { useInvalidDocumentDetail, useInvalidDocumentList } from '@/service/knowledge/use-document' import { useInvalidDocumentDetail, useInvalidDocumentList } from '@/service/knowledge/use-document'
import { isFile } from '../../../create-from-pipeline/data-source/online-drive/utils'


type PipelineSettingsProps = { type PipelineSettingsProps = {
datasetId: string datasetId: string
return onlineDocuments return onlineDocuments
}, [lastRunData]) }, [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 { mutateAsync: runPublishedPipeline, isIdle, isPending } = useRunPublishedPipeline()


const handlePreviewChunks = useCallback(async (data: Record<string, any>) => { const handlePreviewChunks = useCallback(async (data: Record<string, any>) => {
onSuccess: () => { onSuccess: () => {
invalidDocumentList() invalidDocumentList()
invalidDocumentDetail() 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(() => { const onClickProcess = useCallback(() => {
isPreview.current = false isPreview.current = false
onProcess={onClickProcess} onProcess={onClickProcess}
onPreview={onClickPreview} onPreview={onClickPreview}
onSubmit={handleSubmit} onSubmit={handleSubmit}
isRunning={isPending}
/> />
</div> </div>
</div> </div>
<div className='flex h-full flex-col pl-2 pt-2'> <div className='flex h-full flex-col pl-2 pt-2'>
<ChunkPreview <ChunkPreview
dataSourceType={lastRunData!.datasource_type} dataSourceType={lastRunData!.datasource_type}
files={files}
localFiles={files}
onlineDocuments={onlineDocuments} onlineDocuments={onlineDocuments}
websitePages={websitePages} websitePages={websitePages}
onlineDriveFiles={onlineDriveFiles}
isIdle={isIdle} isIdle={isIdle}
isPending={isPending && isPreview.current} isPending={isPending && isPreview.current}
estimateData={estimateData} estimateData={estimateData}
handlePreviewFileChange={noop} handlePreviewFileChange={noop}
handlePreviewOnlineDocumentChange={noop} handlePreviewOnlineDocumentChange={noop}
handlePreviewWebsitePageChange={noop} handlePreviewWebsitePageChange={noop}
handlePreviewOnlineDriveFileChange={noop}
/> />
</div> </div>
</div> </div>

+ 4
- 1
web/app/components/datasets/documents/detail/settings/pipeline-settings/process-documents/index.tsx Näytä tiedosto

type ProcessDocumentsProps = { type ProcessDocumentsProps = {
datasourceNodeId: string datasourceNodeId: string
lastRunInputData: Record<string, any> lastRunInputData: Record<string, any>
isRunning: boolean
ref: React.RefObject<any> ref: React.RefObject<any>
onProcess: () => void onProcess: () => void
onPreview: () => void onPreview: () => void
const ProcessDocuments = ({ const ProcessDocuments = ({
datasourceNodeId, datasourceNodeId,
lastRunInputData, lastRunInputData,
isRunning,
onProcess, onProcess,
onPreview, onPreview,
onSubmit, onSubmit,
schema={schema} schema={schema}
onSubmit={onSubmit} onSubmit={onSubmit}
onPreview={onPreview} onPreview={onPreview}
isRunning={isRunning}
/> />
<Actions runDisabled={isFetchingParams} onProcess={onProcess} />
<Actions runDisabled={isFetchingParams || isRunning} onProcess={onProcess} />
</div> </div>
) )
} }

Loading…
Peruuta
Tallenna