From fba54e669de4c222a9f126addd326c0e160ef8a5 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Tue, 8 Oct 2024 11:41:25 +0200 Subject: [PATCH 1/2] fix useNodesData returning undefined in svelte flow --- examples/react/src/examples/UseNodesData/index.tsx | 2 +- .../svelte/src/routes/examples/usenodesdata/+page.svelte | 2 +- packages/svelte/src/lib/hooks/useNodesData.ts | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/react/src/examples/UseNodesData/index.tsx b/examples/react/src/examples/UseNodesData/index.tsx index dabc1d4d..c00e26a1 100644 --- a/examples/react/src/examples/UseNodesData/index.tsx +++ b/examples/react/src/examples/UseNodesData/index.tsx @@ -21,7 +21,7 @@ export type UppercaseNode = Node<{ text: string }, 'uppercase'>; export type MyNode = TextNode | ResultNode | UppercaseNode; export function isTextNode(node: any): node is TextNode | UppercaseNode { - return node.type === 'text' || node.type === 'uppercase'; + return !node || !node.type ? false : node.type === 'text' || node.type === 'uppercase'; } const nodeTypes = { diff --git a/examples/svelte/src/routes/examples/usenodesdata/+page.svelte b/examples/svelte/src/routes/examples/usenodesdata/+page.svelte index 91fd8432..8f041b0a 100644 --- a/examples/svelte/src/routes/examples/usenodesdata/+page.svelte +++ b/examples/svelte/src/routes/examples/usenodesdata/+page.svelte @@ -6,7 +6,7 @@ type ResultNodeType = Node<{}, 'result'>; export function isTextNode(node: any): node is TextNodeType | UppercaseNode { - return node.type === 'text' || node.type === 'uppercase'; + return !node || !node.type ? false : node.type === 'text' || node.type === 'uppercase'; } export type MyNode = TextNodeType | UppercaseNodeType | ResultNodeType; diff --git a/packages/svelte/src/lib/hooks/useNodesData.ts b/packages/svelte/src/lib/hooks/useNodesData.ts index a13bdb65..e4d8dd36 100644 --- a/packages/svelte/src/lib/hooks/useNodesData.ts +++ b/packages/svelte/src/lib/hooks/useNodesData.ts @@ -22,6 +22,7 @@ export function useNodesData(nodeIds: any): any { const { nodes, nodeLookup } = useStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any let prevNodesData: any[] = []; + let initialRun = true; return derived([nodes, nodeLookup], ([, nodeLookup], set) => { const nextNodesData = []; @@ -39,9 +40,10 @@ export function useNodesData(nodeIds: any): any { } } - if (!shallowNodeData(nextNodesData, prevNodesData)) { - prevNodesData = nextNodesData; + if (!shallowNodeData(nextNodesData, prevNodesData) || initialRun) { + prevNodesData = [...nextNodesData]; set(isArrayOfIds ? nextNodesData : nextNodesData[0] ?? null); + initialRun = false; } }); } From 51f08aaca5ddfbaa3259f666005d687d0a83f3db Mon Sep 17 00:00:00 2001 From: peterkogo Date: Tue, 8 Oct 2024 12:03:22 +0200 Subject: [PATCH 2/2] added changelog --- .changeset/brave-worms-study.md | 5 +++++ packages/svelte/src/lib/hooks/useNodesData.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/brave-worms-study.md diff --git a/.changeset/brave-worms-study.md b/.changeset/brave-worms-study.md new file mode 100644 index 00000000..123459fe --- /dev/null +++ b/.changeset/brave-worms-study.md @@ -0,0 +1,5 @@ +--- +'@xyflow/svelte': patch +--- + +Fixed hook useNodesData unexpectedly returning undefined diff --git a/packages/svelte/src/lib/hooks/useNodesData.ts b/packages/svelte/src/lib/hooks/useNodesData.ts index e4d8dd36..2e8fba50 100644 --- a/packages/svelte/src/lib/hooks/useNodesData.ts +++ b/packages/svelte/src/lib/hooks/useNodesData.ts @@ -41,7 +41,7 @@ export function useNodesData(nodeIds: any): any { } if (!shallowNodeData(nextNodesData, prevNodesData) || initialRun) { - prevNodesData = [...nextNodesData]; + prevNodesData = nextNodesData; set(isArrayOfIds ? nextNodesData : nextNodesData[0] ?? null); initialRun = false; }