| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | 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,  }}
 |