mirror of
https://github.com/langgenius/dify.git
synced 2025-07-07 01:00:48 +00:00
43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
![]() |
import { useCallback } from 'react'
|
||
|
import produce from 'immer'
|
||
|
import { useStoreApi } from 'reactflow'
|
||
|
import { useNodesSyncDraft } from './use-nodes-sync-draft'
|
||
|
import { useNodesReadOnly } from './use-workflow'
|
||
|
|
||
|
type NodeDataUpdatePayload = {
|
||
|
id: string
|
||
|
data: Record<string, any>
|
||
|
}
|
||
|
|
||
|
export const useNodeDataUpdate = () => {
|
||
|
const store = useStoreApi()
|
||
|
const { handleSyncWorkflowDraft } = useNodesSyncDraft()
|
||
|
const { getNodesReadOnly } = useNodesReadOnly()
|
||
|
|
||
|
const handleNodeDataUpdate = useCallback(({ id, data }: NodeDataUpdatePayload) => {
|
||
|
const {
|
||
|
getNodes,
|
||
|
setNodes,
|
||
|
} = store.getState()
|
||
|
const newNodes = produce(getNodes(), (draft) => {
|
||
|
const currentNode = draft.find(node => node.id === id)!
|
||
|
|
||
|
currentNode.data = { ...currentNode.data, ...data }
|
||
|
})
|
||
|
setNodes(newNodes)
|
||
|
}, [store])
|
||
|
|
||
|
const handleNodeDataUpdateWithSyncDraft = useCallback((payload: NodeDataUpdatePayload) => {
|
||
|
if (getNodesReadOnly())
|
||
|
return
|
||
|
|
||
|
handleNodeDataUpdate(payload)
|
||
|
handleSyncWorkflowDraft()
|
||
|
}, [handleSyncWorkflowDraft, handleNodeDataUpdate, getNodesReadOnly])
|
||
|
|
||
|
return {
|
||
|
handleNodeDataUpdate,
|
||
|
handleNodeDataUpdateWithSyncDraft,
|
||
|
}
|
||
|
}
|