fix: store actions blocking main thread

* map function overwriting nodes causes main thread to be blocked
* instead use splice
This commit is contained in:
Braks
2021-10-20 23:46:47 +02:00
parent ff7ee5c7fe
commit 5f500bca18
5 changed files with 91 additions and 113 deletions
+1 -1
View File
@@ -151,7 +151,7 @@ const edgeTypes = createEdgeTypes({ ...defaultEdgeTypes, ...props.edgeTypes })
:multi-selection-key-code="props.multiSelectionKeyCode"
:selection-key-code="props.selectionKeyCode"
>
<NodeRenderer :node-types="nodeTypes">
<NodeRenderer :node-types="nodeTypes" :select-nodes-on-drag="props.selectNodesOnDrag">
<template v-for="nodeName of Object.keys(nodeTypes)" #[`node-${nodeName}`]="nodeProps">
<slot :name="`node-${nodeName}`" v-bind="nodeProps"></slot>
</template>
+5 -5
View File
@@ -6,9 +6,12 @@ import { useStore } from '~/composables'
interface NodeRendererProps {
nodeTypes: Record<string, NodeType>
selectNodesOnDrag?: boolean
}
const props = defineProps<NodeRendererProps>()
const props = withDefaults(defineProps<NodeRendererProps>(), {
selectNodesOnDrag: true,
})
const store = useStore()
@@ -49,12 +52,9 @@ const type = (node: TNode) => {
<Node
:node="node"
:type="type(node)"
:scale="store.transform[2]"
:snap-grid="store.snapToGrid ? store.snapGrid : undefined"
:select-nodes-on-drag="props.selectNodesOnDrag"
:selected="store.selectedElements?.some(({ id }) => id === node.id)"
:selectable="node.selectable || store.elementsSelectable"
:connectable="node.connectable || store.nodesConnectable"
:draggable="node.draggable || store.nodesDraggable"
>
<template #default="nodeProps">
<slot :name="`node-${node.type}`" v-bind="nodeProps"></slot>