| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | 
							- import {
 -   useCallback,
 -   useEffect,
 -   useState,
 - } from 'react'
 - import {
 -   useStore,
 -   useWorkflowStore,
 - } from '@/app/components/workflow/store'
 - import { useWorkflowTemplate } from './use-workflow-template'
 - import { useStore as useAppStore } from '@/app/components/app/store'
 - import {
 -   fetchNodesDefaultConfigs,
 -   fetchPublishedWorkflow,
 -   fetchWorkflowDraft,
 -   syncWorkflowDraft,
 - } from '@/service/workflow'
 - import type { FetchWorkflowDraftResponse } from '@/types/workflow'
 - import { useWorkflowConfig } from '@/service/use-workflow'
 - 
 - export const useWorkflowInit = () => {
 -   const workflowStore = useWorkflowStore()
 -   const {
 -     nodes: nodesTemplate,
 -     edges: edgesTemplate,
 -   } = useWorkflowTemplate()
 -   const appDetail = useAppStore(state => state.appDetail)!
 -   const setSyncWorkflowDraftHash = useStore(s => s.setSyncWorkflowDraftHash)
 -   const [data, setData] = useState<FetchWorkflowDraftResponse>()
 -   const [isLoading, setIsLoading] = useState(true)
 -   useEffect(() => {
 -     workflowStore.setState({ appId: appDetail.id })
 -   }, [appDetail.id, workflowStore])
 - 
 -   const handleUpdateWorkflowConfig = useCallback((config: Record<string, any>) => {
 -     const { setWorkflowConfig } = workflowStore.getState()
 - 
 -     setWorkflowConfig(config)
 -   }, [workflowStore])
 -   useWorkflowConfig(appDetail.id, handleUpdateWorkflowConfig)
 - 
 -   const handleGetInitialWorkflowData = useCallback(async () => {
 -     try {
 -       const res = await fetchWorkflowDraft(`/apps/${appDetail.id}/workflows/draft`)
 -       setData(res)
 -       workflowStore.setState({
 -         envSecrets: (res.environment_variables || []).filter(env => env.value_type === 'secret').reduce((acc, env) => {
 -           acc[env.id] = env.value
 -           return acc
 -         }, {} as Record<string, string>),
 -         environmentVariables: res.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || [],
 -         conversationVariables: res.conversation_variables || [],
 -       })
 -       setSyncWorkflowDraftHash(res.hash)
 -       setIsLoading(false)
 -     }
 -     catch (error: any) {
 -       if (error && error.json && !error.bodyUsed && appDetail) {
 -         error.json().then((err: any) => {
 -           if (err.code === 'draft_workflow_not_exist') {
 -             workflowStore.setState({ notInitialWorkflow: true })
 -             syncWorkflowDraft({
 -               url: `/apps/${appDetail.id}/workflows/draft`,
 -               params: {
 -                 graph: {
 -                   nodes: nodesTemplate,
 -                   edges: edgesTemplate,
 -                 },
 -                 features: {
 -                   retriever_resource: { enabled: true },
 -                 },
 -                 environment_variables: [],
 -                 conversation_variables: [],
 -               },
 -             }).then((res) => {
 -               workflowStore.getState().setDraftUpdatedAt(res.updated_at)
 -               handleGetInitialWorkflowData()
 -             })
 -           }
 -         })
 -       }
 -     }
 -   }, [appDetail, nodesTemplate, edgesTemplate, workflowStore, setSyncWorkflowDraftHash])
 - 
 -   useEffect(() => {
 -     handleGetInitialWorkflowData()
 -     // eslint-disable-next-line react-hooks/exhaustive-deps
 -   }, [])
 - 
 -   const handleFetchPreloadData = useCallback(async () => {
 -     try {
 -       const nodesDefaultConfigsData = await fetchNodesDefaultConfigs(`/apps/${appDetail?.id}/workflows/default-workflow-block-configs`)
 -       const publishedWorkflow = await fetchPublishedWorkflow(`/apps/${appDetail?.id}/workflows/publish`)
 -       workflowStore.setState({
 -         nodesDefaultConfigs: nodesDefaultConfigsData.reduce((acc, block) => {
 -           if (!acc[block.type])
 -             acc[block.type] = { ...block.config }
 -           return acc
 -         }, {} as Record<string, any>),
 -       })
 -       workflowStore.getState().setPublishedAt(publishedWorkflow?.created_at)
 -     }
 -     catch (e) {
 -       console.error(e)
 -     }
 -   }, [workflowStore, appDetail])
 - 
 -   useEffect(() => {
 -     handleFetchPreloadData()
 -   }, [handleFetchPreloadData])
 - 
 -   useEffect(() => {
 -     if (data) {
 -       workflowStore.getState().setDraftUpdatedAt(data.updated_at)
 -       workflowStore.getState().setToolPublished(data.tool_published)
 -     }
 -   }, [data, workflowStore])
 - 
 -   return {
 -     data,
 -     isLoading,
 -   }
 - }
 
 
  |