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