dify/web/app/components/rag-pipeline/hooks/use-pipeline-init.ts
-LAN- 85cda47c70
feat: knowledge pipeline (#25360)
Signed-off-by: -LAN- <laipz8200@outlook.com>
Co-authored-by: twwu <twwu@dify.ai>
Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com>
Co-authored-by: jyong <718720800@qq.com>
Co-authored-by: Wu Tianwei <30284043+WTW0313@users.noreply.github.com>
Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com>
Co-authored-by: lyzno1 <yuanyouhuilyz@gmail.com>
Co-authored-by: quicksand <quicksandzn@gmail.com>
Co-authored-by: Jyong <76649700+JohnJyong@users.noreply.github.com>
Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com>
Co-authored-by: zxhlyh <jasonapring2015@outlook.com>
Co-authored-by: Yongtao Huang <yongtaoh2022@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Joel <iamjoel007@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: nite-knite <nkCoding@gmail.com>
Co-authored-by: Hanqing Zhao <sherry9277@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Harry <xh001x@hotmail.com>
2025-09-18 12:49:10 +08:00

93 lines
3.1 KiB
TypeScript

import {
useCallback,
useEffect,
useState,
} from 'react'
import {
useWorkflowStore,
} from '@/app/components/workflow/store'
import { usePipelineTemplate } from './use-pipeline-template'
import {
fetchWorkflowDraft,
syncWorkflowDraft,
} from '@/service/workflow'
import type { FetchWorkflowDraftResponse } from '@/types/workflow'
import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail'
import { usePipelineConfig } from './use-pipeline-config'
export const usePipelineInit = () => {
const workflowStore = useWorkflowStore()
const {
nodes: nodesTemplate,
edges: edgesTemplate,
} = usePipelineTemplate()
const [data, setData] = useState<FetchWorkflowDraftResponse>()
const [isLoading, setIsLoading] = useState(true)
const datasetId = useDatasetDetailContextWithSelector(s => s.dataset)?.pipeline_id
const knowledgeName = useDatasetDetailContextWithSelector(s => s.dataset)?.name
const knowledgeIcon = useDatasetDetailContextWithSelector(s => s.dataset)?.icon_info
useEffect(() => {
workflowStore.setState({ pipelineId: datasetId, knowledgeName, knowledgeIcon })
}, [datasetId, workflowStore, knowledgeName, knowledgeIcon])
usePipelineConfig()
const handleGetInitialWorkflowData = useCallback(async () => {
const {
setEnvSecrets,
setEnvironmentVariables,
setSyncWorkflowDraftHash,
setDraftUpdatedAt,
setToolPublished,
setRagPipelineVariables,
} = workflowStore.getState()
try {
const res = await fetchWorkflowDraft(`/rag/pipelines/${datasetId}/workflows/draft`)
setData(res)
setDraftUpdatedAt(res.updated_at)
setToolPublished(res.tool_published)
setEnvSecrets((res.environment_variables || []).filter(env => env.value_type === 'secret').reduce((acc, env) => {
acc[env.id] = env.value
return acc
}, {} as Record<string, string>))
setEnvironmentVariables(res.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || [])
setSyncWorkflowDraftHash(res.hash)
setRagPipelineVariables?.(res.rag_pipeline_variables || [])
setIsLoading(false)
}
catch (error: any) {
if (error && error.json && !error.bodyUsed && datasetId) {
error.json().then((err: any) => {
if (err.code === 'draft_workflow_not_exist') {
workflowStore.setState({ notInitialWorkflow: true })
syncWorkflowDraft({
url: `/rag/pipelines/${datasetId}/workflows/draft`,
params: {
graph: {
nodes: nodesTemplate,
edges: edgesTemplate,
},
environment_variables: [],
},
}).then((res) => {
const { setDraftUpdatedAt } = workflowStore.getState()
setDraftUpdatedAt(res.updated_at)
handleGetInitialWorkflowData()
})
}
})
}
}
}, [nodesTemplate, edgesTemplate, workflowStore, datasetId])
useEffect(() => {
handleGetInitialWorkflowData()
}, [])
return {
data,
isLoading,
}
}