mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			44 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)!
 | |
| 
 | |
|       if (currentNode)
 | |
|         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,
 | |
|   }
 | |
| }
 | 
