fix(viewpane,nodes): move resize observer to mounted hooks
This commit is contained in:
@@ -23,19 +23,21 @@ const draggable = (d?: boolean) => (typeof d === 'undefined' ? nodesDraggable :
|
|||||||
const selectable = (s?: boolean) => (typeof s === 'undefined' ? elementsSelectable : s)
|
const selectable = (s?: boolean) => (typeof s === 'undefined' ? elementsSelectable : s)
|
||||||
const connectable = (c?: boolean) => (typeof c === 'undefined' ? nodesConnectable : c)
|
const connectable = (c?: boolean) => (typeof c === 'undefined' ? nodesConnectable : c)
|
||||||
|
|
||||||
const resizeObserver = new ResizeObserver((entries) => {
|
const resizeObserver = ref<ResizeObserver>()
|
||||||
const updates = entries.map((entry: ResizeObserverEntry) => ({
|
|
||||||
id: entry.target.getAttribute('data-id') as string,
|
|
||||||
nodeElement: entry.target as HTMLDivElement,
|
|
||||||
forceUpdate: true,
|
|
||||||
}))
|
|
||||||
|
|
||||||
updateNodeDimensions(updates)
|
onMounted(() => {
|
||||||
|
resizeObserver.value = new ResizeObserver((entries) => {
|
||||||
|
const updates = entries.map((entry: ResizeObserverEntry) => ({
|
||||||
|
id: entry.target.getAttribute('data-id') as string,
|
||||||
|
nodeElement: entry.target as HTMLDivElement,
|
||||||
|
forceUpdate: true,
|
||||||
|
}))
|
||||||
|
|
||||||
|
updateNodeDimensions(updates)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => resizeObserver.value?.disconnect())
|
||||||
resizeObserver.disconnect()
|
|
||||||
})
|
|
||||||
|
|
||||||
const getType = (type?: string, template?: GraphNode['template']) => {
|
const getType = (type?: string, template?: GraphNode['template']) => {
|
||||||
const name = type || 'default'
|
const name = type || 'default'
|
||||||
@@ -70,17 +72,19 @@ export default {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="vue-flow__nodes vue-flow__container">
|
<div class="vue-flow__nodes vue-flow__container">
|
||||||
<NodeWrapper
|
<template v-if="resizeObserver">
|
||||||
v-for="node of getNodes"
|
<NodeWrapper
|
||||||
:id="node.id"
|
v-for="node of getNodes"
|
||||||
:key="node.id"
|
:id="node.id"
|
||||||
:resize-observer="resizeObserver"
|
:key="node.id"
|
||||||
:type="getType(node.type, node.template)"
|
:resize-observer="resizeObserver"
|
||||||
:name="node.type || 'default'"
|
:type="getType(node.type, node.template)"
|
||||||
:draggable="draggable(node.draggable)"
|
:name="node.type || 'default'"
|
||||||
:selectable="selectable(node.selectable)"
|
:draggable="draggable(node.draggable)"
|
||||||
:connectable="connectable(node.connectable)"
|
:selectable="selectable(node.selectable)"
|
||||||
:node="node"
|
:connectable="connectable(node.connectable)"
|
||||||
/>
|
:node="node"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -57,21 +57,23 @@ let transform = $ref({
|
|||||||
zoom: clampedZoom,
|
zoom: clampedZoom,
|
||||||
})
|
})
|
||||||
|
|
||||||
useResizeObserver(viewportEl, (ev) => {
|
onMounted(() => {
|
||||||
if (!ev[0].target) return
|
useResizeObserver(viewportEl, () => {
|
||||||
|
if (!viewportEl.value) return
|
||||||
|
|
||||||
const { width, height } = getDimensions(ev[0].target as HTMLDivElement)
|
const { width, height } = getDimensions(viewportEl.value)
|
||||||
dimensions.width = width
|
dimensions.width = width
|
||||||
dimensions.height = height
|
dimensions.height = height
|
||||||
})
|
})
|
||||||
|
|
||||||
const window = useWindow()
|
const window = useWindow()
|
||||||
useEventListener(window, 'resize', () => {
|
useEventListener(window, 'resize', () => {
|
||||||
if (!viewportEl.value) return
|
if (!viewportEl.value) return
|
||||||
|
|
||||||
const { width, height } = getDimensions(viewportEl.value)
|
const { width, height } = getDimensions(viewportEl.value)
|
||||||
dimensions.width = width
|
dimensions.width = width
|
||||||
dimensions.height = height
|
dimensions.height = height
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user