initial version of middlewares

This commit is contained in:
peterkogo
2025-08-28 10:44:54 +02:00
parent 04055c9625
commit cec7da54df
7 changed files with 172 additions and 5 deletions
@@ -28,7 +28,15 @@ export function BatchProvider<NodeType extends Node = Node, EdgeType extends Edg
const store = useStoreApi<NodeType, EdgeType>();
const nodeQueueHandler = useCallback((queueItems: QueueItem<NodeType>[]) => {
const { nodes = [], setNodes, hasDefaultNodes, onNodesChange, nodeLookup, fitViewQueued } = store.getState();
const {
nodes = [],
setNodes,
hasDefaultNodes,
onNodesChange,
nodeLookup,
fitViewQueued,
nodeChangeMiddleware,
} = store.getState();
/*
* This is essentially an `Array.reduce` in imperative clothing. Processing
@@ -40,11 +48,23 @@ export function BatchProvider<NodeType extends Node = Node, EdgeType extends Edg
next = typeof payload === 'function' ? payload(next) : payload;
}
const changes = getElementsDiffChanges({
let changes = getElementsDiffChanges({
items: next,
lookup: nodeLookup,
}) as NodeChange<NodeType>[];
console.log('this workds');
for (const middleware of nodeChangeMiddleware.values()) {
changes = middleware(changes);
}
// for (const middleware of nodeSyncMiddleware.values()) {
// changes = middleware(changes);
// }
// Do we always want to setNodes(next) or only when there are changes?
if (hasDefaultNodes) {
setNodes(next);
}