From c7f62885aacdf17499c3ee38f77f12030689f467 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 20 Sep 2023 15:34:19 +0200 Subject: [PATCH] fix(svelte) removed the need to search through all nodes when moving mouse over node --- .../components/NodeWrapper/NodeWrapper.svelte | 16 ++++++---------- .../src/lib/components/NodeWrapper/types.ts | 1 + .../container/NodeRenderer/NodeRenderer.svelte | 1 + 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte index 17c8e4ce..3d14c4a6 100644 --- a/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte +++ b/packages/svelte/src/lib/components/NodeWrapper/NodeWrapper.svelte @@ -17,6 +17,7 @@ interface $$Props extends NodeWrapperProps {} + export let node: NodeWrapperProps['node']; export let id: NodeWrapperProps['id']; export let data: NodeWrapperProps['data'] = {}; export let selected: NodeWrapperProps['selected'] = false; @@ -39,7 +40,7 @@ export { className as class }; const store = useStore(); - const { nodes, nodeTypes, addSelectedNodes } = store; + const { nodeTypes, addSelectedNodes } = store; let nodeRef: HTMLDivElement; const nodeTypeValid = !!$nodeTypes[type!]; @@ -69,11 +70,6 @@ }; }); - function dispatchEvent(eventName: string, event?: MouseEvent | TouchEvent) { - const node = $nodes.find((n) => n.id === id); - dispatch(eventName, { node, event }); - } - function onSelectNodeHandler(event: MouseEvent | TouchEvent) { if (selectable && (!selectNodesOnDrag || !draggable)) { // this handler gets called within the drag start event when selectNodesOnDrag=true @@ -81,7 +77,7 @@ } // @todo: support multiselection - dispatchEvent('nodeclick', event); + dispatch('nodeclick', { node, event }); } // @todo: add selectable state @@ -112,9 +108,9 @@ style:transform="translate({positionOrigin?.x ?? 0}px, {positionOrigin?.y ?? 0}px)" {style} on:click={onSelectNodeHandler} - on:mouseenter={(event) => dispatchEvent('nodemouseenter', event)} - on:mouseleave={(event) => dispatchEvent('nodemouseleave', event)} - on:mousemove={(event) => dispatchEvent('nodemousemove', event)} + on:mouseenter={(event) => dispatch('nodemouseenter', { node, event })} + on:mouseleave={(event) => dispatch('nodemouseleave', { node, event })} + on:mousemove={(event) => dispatch('nodemousemove', { node, event })} >