From 70102b701b633760806692f54ef49bedf570f14a Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 20 Apr 2023 19:07:53 +0200 Subject: [PATCH 1/4] feat(core): allow array of ids as updateNodeInternals arg --- packages/core/src/hooks/useUpdateNodeInternals.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/core/src/hooks/useUpdateNodeInternals.ts b/packages/core/src/hooks/useUpdateNodeInternals.ts index 849d76b6..466ad4ce 100644 --- a/packages/core/src/hooks/useUpdateNodeInternals.ts +++ b/packages/core/src/hooks/useUpdateNodeInternals.ts @@ -6,12 +6,16 @@ import type { UpdateNodeInternals } from '../types'; function useUpdateNodeInternals(): UpdateNodeInternals { const store = useStoreApi(); - return useCallback((id: string) => { + return useCallback((id: string | string[]) => { const { domNode, updateNodeDimensions } = store.getState(); const nodeElement = domNode?.querySelector(`.react-flow__node[data-id="${id}"]`) as HTMLDivElement; if (nodeElement) { - requestAnimationFrame(() => updateNodeDimensions([{ id, nodeElement, forceUpdate: true }])); + const updateIds = Array.isArray(id) ? id : [id]; + + updateIds.forEach((id) => { + requestAnimationFrame(() => updateNodeDimensions([{ id, nodeElement, forceUpdate: true }])); + }); } }, []); } From c80d269b85a0054221f4639c328fc36a3befbe70 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 20 Apr 2023 19:08:42 +0200 Subject: [PATCH 2/4] chore(changeset): add --- .changeset/mighty-seas-hang.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/mighty-seas-hang.md diff --git a/.changeset/mighty-seas-hang.md b/.changeset/mighty-seas-hang.md new file mode 100644 index 00000000..e8384b27 --- /dev/null +++ b/.changeset/mighty-seas-hang.md @@ -0,0 +1,5 @@ +--- +'@reactflow/core': minor +--- + +Add `edgesUpdatable` prop to store state. Allows enabling/disabling edge updating globally. From 80e586fa5e80aa40a317b881578aecb6048ac860 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Tue, 2 May 2023 17:32:44 +0200 Subject: [PATCH 3/4] refactor(core): wrap for-each loop in requestAnimationFrame --- packages/core/src/hooks/useUpdateNodeInternals.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/core/src/hooks/useUpdateNodeInternals.ts b/packages/core/src/hooks/useUpdateNodeInternals.ts index 466ad4ce..6035dc98 100644 --- a/packages/core/src/hooks/useUpdateNodeInternals.ts +++ b/packages/core/src/hooks/useUpdateNodeInternals.ts @@ -13,9 +13,11 @@ function useUpdateNodeInternals(): UpdateNodeInternals { if (nodeElement) { const updateIds = Array.isArray(id) ? id : [id]; - updateIds.forEach((id) => { - requestAnimationFrame(() => updateNodeDimensions([{ id, nodeElement, forceUpdate: true }])); - }); + requestAnimationFrame(() => { + updateIds.forEach((id) => { + updateNodeDimensions([{ id, nodeElement, forceUpdate: true }]); + }); + }) } }, []); } From 6a7a18a394a60abf4a8d971bd567b6b4396912dc Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 11 May 2023 20:10:12 +0200 Subject: [PATCH 4/4] chore(core): query node element in for-each loop to get curr el --- .../core/src/hooks/useUpdateNodeInternals.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/core/src/hooks/useUpdateNodeInternals.ts b/packages/core/src/hooks/useUpdateNodeInternals.ts index 6035dc98..9786c65c 100644 --- a/packages/core/src/hooks/useUpdateNodeInternals.ts +++ b/packages/core/src/hooks/useUpdateNodeInternals.ts @@ -8,17 +8,18 @@ function useUpdateNodeInternals(): UpdateNodeInternals { return useCallback((id: string | string[]) => { const { domNode, updateNodeDimensions } = store.getState(); - const nodeElement = domNode?.querySelector(`.react-flow__node[data-id="${id}"]`) as HTMLDivElement; - if (nodeElement) { - const updateIds = Array.isArray(id) ? id : [id]; + const updateIds = Array.isArray(id) ? id : [id]; - requestAnimationFrame(() => { - updateIds.forEach((id) => { - updateNodeDimensions([{ id, nodeElement, forceUpdate: true }]); - }); - }) - } + requestAnimationFrame(() => { + updateIds.forEach((updateId) => { + const nodeElement = domNode?.querySelector(`.react-flow__node[data-id="${updateId}"]`) as HTMLDivElement; + + if (nodeElement) { + updateNodeDimensions([{ id: updateId, nodeElement, forceUpdate: true }]); + } + }); + }); }, []); }