fix(core): skip resize handler if node not visible (#1936)
* fix(core): skip resize handler if node not visible Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> * chore(changeset): add Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> --------- Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@vue-flow/core": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Skip resize handler if node is not visible.
|
||||||
@@ -15,14 +15,12 @@ export function useResizeHandler(viewportEl: Ref<HTMLDivElement | null>): void {
|
|||||||
let resizeObserver: ResizeObserver
|
let resizeObserver: ResizeObserver
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
const rendererNode = viewportEl.value
|
|
||||||
|
|
||||||
const updateDimensions = () => {
|
const updateDimensions = () => {
|
||||||
if (!rendererNode) {
|
if (!viewportEl.value || !(viewportEl.value.checkVisibility() ?? true)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const size = getDimensions(rendererNode)
|
const size = getDimensions(viewportEl.value)
|
||||||
|
|
||||||
if (size.width === 0 || size.height === 0) {
|
if (size.width === 0 || size.height === 0) {
|
||||||
emits.error(new VueFlowError(ErrorCode.MISSING_VIEWPORT_DIMENSIONS))
|
emits.error(new VueFlowError(ErrorCode.MISSING_VIEWPORT_DIMENSIONS))
|
||||||
@@ -34,16 +32,16 @@ export function useResizeHandler(viewportEl: Ref<HTMLDivElement | null>): void {
|
|||||||
updateDimensions()
|
updateDimensions()
|
||||||
window.addEventListener('resize', updateDimensions)
|
window.addEventListener('resize', updateDimensions)
|
||||||
|
|
||||||
if (rendererNode) {
|
if (viewportEl.value) {
|
||||||
resizeObserver = new ResizeObserver(() => updateDimensions())
|
resizeObserver = new ResizeObserver(() => updateDimensions())
|
||||||
resizeObserver.observe(rendererNode)
|
resizeObserver.observe(viewportEl.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
window.removeEventListener('resize', updateDimensions)
|
window.removeEventListener('resize', updateDimensions)
|
||||||
|
|
||||||
if (resizeObserver && rendererNode) {
|
if (resizeObserver && viewportEl.value) {
|
||||||
resizeObserver.unobserve(rendererNode!)
|
resizeObserver.unobserve(viewportEl.value!)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user