UNPKG

@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
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; } }; }