refactor: pass props to edge/nodewrapper separately

Signed-off-by: Braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
Braks
2021-11-22 01:22:27 +01:00
parent a03f658794
commit c35673c622
18 changed files with 204 additions and 148 deletions
+22 -1
View File
@@ -40,9 +40,30 @@ export default {
<g :transform="transform">
<Edge
v-for="(edge, i) of store.getEdges"
:id="edge.id"
:key="`${edge.id}-${i}`"
:edge="edge"
:marker-end-id="props.markerEndId"
:type="edge.type"
:source="edge.source"
:target="edge.target"
:source-handle="edge.sourceHandle"
:target-handle="edge.targetHandle"
:selected="edge.selected"
:source-position="edge.sourcePosition"
:target-position="edge.targetPosition"
:label="edge.label"
:label-tyle="edge.labelStyle"
:label-show-bg="edge.labelShowBg"
:label-bg-style="edge.labelBgStyle"
:label-bg-padding="edge.labelBgPadding"
:label-bg-border-radius="edge.labelBgBorderRadius"
:style="edge.style"
:animated="edge.animated"
:arrow-head-type="edge.arrowHeadType"
:data="edge.data"
:class="edge.class"
:is-hidden="edge.isHidden"
:marker-end-id="edge.markerEndId ?? props.markerEndId"
:edge-updater-radius="props.edgeUpdaterRadius"
>
<template #default="edgeProps">
+16 -2
View File
@@ -1,7 +1,7 @@
<script lang="ts" setup>
import { useStore } from '../../composables'
import Node from '../../components/Nodes/NodeWrapper.vue'
import { SnapGrid } from '../../types'
import Node from '../../components/Nodes/NodeWrapper.vue'
interface NodeRendererProps {
selectNodesOnDrag?: boolean
@@ -20,15 +20,29 @@ const snapGrid = computed(() => (props.snapToGrid || store.snapToGrid ? props.sn
</script>
<script lang="ts">
export default {
name: 'Nodes',
name: 'Node',
}
</script>
<template>
<div class="vue-flow__nodes" :style="{ transform }">
<Node
v-for="node of store.getNodes"
:id="node.id"
:key="node.id"
:node="node"
:vf="node.__vf"
:position="node.position"
:type="node.type"
:class="node.class"
:style="node.style"
:data="node.data"
:target-position="node.targetPosition"
:source-position="node.sourcePosition"
:is-hidden="node.isHidden"
:draggable="node.draggable"
:selectable="node.selectable"
:connectable="node.connectable"
:drag-handle="node.dragHandle"
:snap-grid="snapGrid"
:select-nodes-on-drag="props.selectNodesOnDrag"
>
+6 -8
View File
@@ -116,15 +116,16 @@ const options = Object.assign({}, store.$state, props)
const init = async (state: FlowState) => {
// set state variables
const skip = ['modelValue', 'd3Zoom', 'd3Selection', 'd3ZoomHandler', 'minZoom', 'maxZoom', 'translateExtent', 'nodeExtent']
for (const opt of Object.keys(state)) {
const val = state[opt as keyof FlowState]
if (typeof val !== 'undefined' && opt !== 'modelValue' && opt !== 'elements') {
if (typeof val !== 'undefined' && !skip.includes(opt)) {
if (typeof val === 'object' && !Array.isArray(val)) {
;(store as any)[opt] = { ...(store as any)[opt], ...val }
} else (store as any)[opt] = val
}
}
await until(() => store.d3Zoom).not.toBeUndefined()
if (!store.isReady) await until(() => store.d3Zoom).not.toBeUndefined()
store.setMinZoom(state.minZoom)
store.setMaxZoom(state.maxZoom)
store.setTranslateExtent(state.translateExtent)
@@ -155,12 +156,6 @@ invoke(async () => {
}
store.hooks.load.trigger(instance)
store.instance = instance
})
throttledWatch(elements, store.setElements, { flush: 'post', deep: true, throttle: 10 })
throttledWatch(store.elements, (val) => (elements.value = val), { flush: 'post', deep: true, throttle: 10 })
onMounted(() => {
watch(
() => props,
() => init({ ...store.$state, ...props } as FlowState),
@@ -168,6 +163,9 @@ onMounted(() => {
)
})
throttledWatch(elements, store.setElements, { flush: 'post', deep: true, throttle: 10 })
throttledWatch(store.elements, (val) => (elements.value = val), { flush: 'post', deep: true, throttle: 10 })
const transitionName = computed(() => {
let name = ''
if (typeof store.loading === 'object' && store.loading.transition) {