refactor(core,viewport): use useResizeHandler composable

This commit is contained in:
braks
2024-01-29 21:56:44 +01:00
committed by Braks
parent b65f43c5d8
commit a5091b9b0c
2 changed files with 51 additions and 22 deletions
@@ -0,0 +1,44 @@
import type { Ref } from 'vue'
import { watchEffect } from 'vue'
import { ErrorCode, VueFlowError, getDimensions } from '../utils'
import { useVueFlow } from './useVueFlow'
export function useResizeHandler(viewportEl: Ref<HTMLDivElement | null>): void {
const { emits, dimensions } = useVueFlow()
let resizeObserver: ResizeObserver
watchEffect((onCleanup) => {
const rendererNode = viewportEl.value
const updateDimensions = () => {
if (!rendererNode) {
return
}
const size = getDimensions(rendererNode)
if (size.width === 0 || size.height === 0) {
emits.error(new VueFlowError(ErrorCode.MISSING_VIEWPORT_DIMENSIONS))
}
dimensions.value = size
}
updateDimensions()
window.addEventListener('resize', updateDimensions)
if (rendererNode) {
resizeObserver = new ResizeObserver(() => updateDimensions())
resizeObserver.observe(rendererNode)
}
onCleanup(() => {
window.removeEventListener('resize', updateDimensions)
if (resizeObserver && rendererNode) {
resizeObserver.unobserve(rendererNode!)
}
})
})
}