@xyflow/svelte
Version:
Svelte Flow - A highly customizable Svelte library for building node-based editors, workflow systems, diagrams and more.
37 lines (36 loc) • 1.3 kB
JavaScript
import { shallowNodeData } from '@xyflow/system';
import { useStore } from '../store';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function useNodesData(nodeIds) {
const { nodes, nodeLookup } = $derived(useStore());
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let prevNodesData = [];
let initialRun = true;
const nodeData = $derived.by(() => {
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
nodes;
const nextNodesData = [];
const isArrayOfIds = Array.isArray(nodeIds);
const _nodeIds = isArrayOfIds ? nodeIds : [nodeIds];
for (const nodeId of _nodeIds) {
const node = nodeLookup.get(nodeId)?.internals.userNode;
if (node) {
nextNodesData.push({
id: node.id,
type: node.type,
data: node.data
});
}
}
if (!shallowNodeData(nextNodesData, prevNodesData) || initialRun) {
prevNodesData = nextNodesData;
initialRun = false;
}
return isArrayOfIds ? prevNodesData : (prevNodesData[0] ?? null);
});
return {
get current() {
return nodeData;
}
};
}