mirror of
https://github.com/langgenius/dify.git
synced 2026-07-23 20:18:40 +08:00
54 lines
1.9 KiB
TypeScript
54 lines
1.9 KiB
TypeScript
import type { WorkflowDataUpdater } from '@/app/components/workflow/types'
|
|
import type { SnippetInputField } from '@/models/snippet'
|
|
import type { SnippetWorkflow } from '@/types/snippet'
|
|
import { useCallback } from 'react'
|
|
import { useWorkflowUpdate } from '@/app/components/workflow/hooks'
|
|
import { useWorkflowStore } from '@/app/components/workflow/store'
|
|
import { fetchSnippetDraftWorkflow } from '@/service/use-snippet-workflows'
|
|
import { useSnippetDraftStore } from '../draft-store'
|
|
|
|
export const useSnippetRefreshDraft = (snippetId: string) => {
|
|
const workflowStore = useWorkflowStore()
|
|
const { handleUpdateWorkflowCanvas } = useWorkflowUpdate()
|
|
|
|
const handleRefreshWorkflowDraft = useCallback(
|
|
(onSuccess?: (draftWorkflow: SnippetWorkflow) => void) => {
|
|
const { setDraftUpdatedAt, setIsSyncingWorkflowDraft, setSyncWorkflowDraftHash } =
|
|
workflowStore.getState()
|
|
|
|
if (!snippetId) return
|
|
|
|
setIsSyncingWorkflowDraft(true)
|
|
fetchSnippetDraftWorkflow(snippetId)
|
|
.then((response) => {
|
|
if (!response) return
|
|
|
|
const inputFields = Array.isArray(response.input_fields)
|
|
? (response.input_fields as SnippetInputField[])
|
|
: []
|
|
|
|
handleUpdateWorkflowCanvas({
|
|
...response.graph,
|
|
nodes: response.graph?.nodes || [],
|
|
edges: response.graph?.edges || [],
|
|
viewport: response.graph?.viewport || { x: 0, y: 0, zoom: 1 },
|
|
} as WorkflowDataUpdater)
|
|
useSnippetDraftStore.setState({
|
|
inputFields,
|
|
})
|
|
setSyncWorkflowDraftHash(response.hash)
|
|
setDraftUpdatedAt(response.updated_at)
|
|
onSuccess?.(response)
|
|
})
|
|
.finally(() => {
|
|
setIsSyncingWorkflowDraft(false)
|
|
})
|
|
},
|
|
[handleUpdateWorkflowCanvas, snippetId, workflowStore],
|
|
)
|
|
|
|
return {
|
|
handleRefreshWorkflowDraft,
|
|
}
|
|
}
|