mirror of
https://github.com/langgenius/dify.git
synced 2026-03-27 01:00:13 +08:00
Made-with: Cursor # Conflicts: # api/controllers/console/app/workflow_draft_variable.py # api/core/agent/cot_agent_runner.py # api/core/agent/cot_chat_agent_runner.py # api/core/agent/cot_completion_agent_runner.py # api/core/agent/fc_agent_runner.py # api/core/app/apps/advanced_chat/app_generator.py # api/core/app/apps/advanced_chat/app_runner.py # api/core/app/apps/agent_chat/app_runner.py # api/core/app/apps/workflow/app_generator.py # api/core/app/apps/workflow/app_runner.py # api/core/app/entities/app_invoke_entities.py # api/core/app/entities/queue_entities.py # api/core/llm_generator/output_parser/structured_output.py # api/core/workflow/workflow_entry.py # api/dify_graph/context/__init__.py # api/dify_graph/entities/tool_entities.py # api/dify_graph/file/file_manager.py # api/dify_graph/graph_engine/response_coordinator/coordinator.py # api/dify_graph/graph_events/node.py # api/dify_graph/node_events/node.py # api/dify_graph/nodes/agent/agent_node.py # api/dify_graph/nodes/llm/entities.py # api/dify_graph/nodes/llm/llm_utils.py # api/dify_graph/nodes/llm/node.py # api/dify_graph/nodes/question_classifier/question_classifier_node.py # api/dify_graph/runtime/graph_runtime_state.py # api/dify_graph/variables/segments.py # api/factories/variable_factory.py # api/services/variable_truncator.py # api/tests/unit_tests/utils/structured_output_parser/test_structured_output_parser.py # api/uv.lock # web/app/components/app-sidebar/app-info.tsx # web/app/components/app-sidebar/app-sidebar-dropdown.tsx # web/app/components/app/create-app-modal/index.spec.tsx # web/app/components/apps/__tests__/list.spec.tsx # web/app/components/apps/app-card.tsx # web/app/components/apps/list.tsx # web/app/components/header/account-dropdown/compliance.tsx # web/app/components/header/account-dropdown/index.tsx # web/app/components/header/account-dropdown/support.tsx # web/app/components/workflow-app/components/workflow-onboarding-modal/index.tsx # web/app/components/workflow/panel/debug-and-preview/hooks.ts # web/contract/console/apps.ts # web/contract/router.ts # web/eslint-suppressions.json # web/next.config.ts # web/pnpm-lock.yaml
65 lines
2.3 KiB
TypeScript
65 lines
2.3 KiB
TypeScript
import type { WorkflowDataUpdater } from '@/app/components/workflow/types'
|
|
import { useCallback } from 'react'
|
|
import { useWorkflowUpdate } from '@/app/components/workflow/hooks'
|
|
import { useWorkflowStore } from '@/app/components/workflow/store'
|
|
import { fetchWorkflowDraft } from '@/service/workflow'
|
|
|
|
export const useWorkflowRefreshDraft = () => {
|
|
const workflowStore = useWorkflowStore()
|
|
const { handleUpdateWorkflowCanvas } = useWorkflowUpdate()
|
|
|
|
const handleRefreshWorkflowDraft = useCallback((notUpdateCanvas?: boolean) => {
|
|
const {
|
|
appId,
|
|
setSyncWorkflowDraftHash,
|
|
setIsSyncingWorkflowDraft,
|
|
setEnvironmentVariables,
|
|
setEnvSecrets,
|
|
setConversationVariables,
|
|
setIsWorkflowDataLoaded,
|
|
isWorkflowDataLoaded,
|
|
debouncedSyncWorkflowDraft,
|
|
} = workflowStore.getState()
|
|
|
|
const { cancel } = debouncedSyncWorkflowDraft
|
|
if (typeof cancel === 'function')
|
|
cancel()
|
|
|
|
const wasLoaded = isWorkflowDataLoaded
|
|
if (wasLoaded)
|
|
setIsWorkflowDataLoaded(false)
|
|
setIsSyncingWorkflowDraft(true)
|
|
fetchWorkflowDraft(`/apps/${appId}/workflows/draft`)
|
|
.then((response) => {
|
|
// Ensure we have a valid workflow structure with viewport
|
|
if (!notUpdateCanvas) {
|
|
const workflowData: WorkflowDataUpdater = {
|
|
nodes: response.graph?.nodes || [],
|
|
edges: response.graph?.edges || [],
|
|
viewport: response.graph?.viewport || { x: 0, y: 0, zoom: 1 },
|
|
}
|
|
handleUpdateWorkflowCanvas(workflowData)
|
|
}
|
|
setSyncWorkflowDraftHash(response.hash)
|
|
setEnvSecrets((response.environment_variables || []).filter(env => env.value_type === 'secret').reduce((acc, env) => {
|
|
acc[env.id] = env.value
|
|
return acc
|
|
}, {} as Record<string, string>))
|
|
setEnvironmentVariables(response.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || [])
|
|
setConversationVariables(response.conversation_variables || [])
|
|
setIsWorkflowDataLoaded(true)
|
|
})
|
|
.catch(() => {
|
|
if (wasLoaded)
|
|
setIsWorkflowDataLoaded(true)
|
|
})
|
|
.finally(() => {
|
|
setIsSyncingWorkflowDraft(false)
|
|
})
|
|
}, [handleUpdateWorkflowCanvas, workflowStore])
|
|
|
|
return {
|
|
handleRefreshWorkflowDraft,
|
|
}
|
|
}
|