dify/web/app/components/snippets/hooks/use-snippet-refresh-draft.ts
FFXN 00ac937934
feat: snippet (#37046)
Co-authored-by: JzoNg <jzongcode@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-06-05 09:38:42 +00:00

54 lines
1.8 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 { useSnippetDetailStore } from '../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)
useSnippetDetailStore.setState({
fields: inputFields,
})
setSyncWorkflowDraftHash(response.hash)
setDraftUpdatedAt(response.updated_at)
onSuccess?.(response)
}).finally(() => {
setIsSyncingWorkflowDraft(false)
})
}, [handleUpdateWorkflowCanvas, snippetId, workflowStore])
return {
handleRefreshWorkflowDraft,
}
}