mirror of
https://github.com/langgenius/dify.git
synced 2026-07-16 09:58:42 +08:00
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import type { SyncCallback } from './use-nodes-sync-draft'
|
|
import { produce } from 'immer'
|
|
import { useCallback } from 'react'
|
|
import { useCollaborativeWorkflow } from './use-collaborative-workflow'
|
|
import { useNodesSyncDraft } from './use-nodes-sync-draft'
|
|
import { useNodesReadOnly } from './use-workflow'
|
|
|
|
type NodeDataUpdatePayload = {
|
|
id: string
|
|
data: Record<string, unknown>
|
|
}
|
|
|
|
export const useNodeDataUpdate = () => {
|
|
const { handleSyncWorkflowDraft } = useNodesSyncDraft()
|
|
const { getNodesReadOnly } = useNodesReadOnly()
|
|
const collaborativeWorkflow = useCollaborativeWorkflow()
|
|
|
|
const handleNodeDataUpdate = useCallback(
|
|
({ id, data }: NodeDataUpdatePayload) => {
|
|
const { nodes, setNodes } = collaborativeWorkflow.getState()
|
|
const newNodes = produce(nodes, (draft) => {
|
|
const currentNode = draft.find((node) => node.id === id)!
|
|
|
|
if (currentNode) currentNode.data = { ...currentNode.data, ...data }
|
|
})
|
|
setNodes(newNodes)
|
|
},
|
|
[collaborativeWorkflow],
|
|
)
|
|
|
|
const handleNodeDataUpdateWithSyncDraft = useCallback(
|
|
(
|
|
payload: NodeDataUpdatePayload,
|
|
options?: {
|
|
sync?: boolean
|
|
notRefreshWhenSyncError?: boolean
|
|
callback?: SyncCallback
|
|
},
|
|
) => {
|
|
if (getNodesReadOnly()) return
|
|
|
|
handleNodeDataUpdate(payload)
|
|
handleSyncWorkflowDraft(options?.sync, options?.notRefreshWhenSyncError, options?.callback)
|
|
},
|
|
[handleSyncWorkflowDraft, handleNodeDataUpdate, getNodesReadOnly],
|
|
)
|
|
|
|
return {
|
|
handleNodeDataUpdate,
|
|
handleNodeDataUpdateWithSyncDraft,
|
|
}
|
|
}
|