Spaces:
Paused
Paused
| 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, | |
| } | |
| } | |