refactor(core): add stub for addEventListener in useWindow

This commit is contained in:
braks
2023-10-30 13:36:07 +01:00
committed by Braks
parent 4ae371afbb
commit 2a407f59e3
4 changed files with 27 additions and 24 deletions
+3 -5
View File
@@ -72,11 +72,9 @@ export function useKeyPress(keyFilter: MaybeRefOrGetter<KeyFilter | null>, onCha
watch( watch(
() => toValue(keyFilter), () => toValue(keyFilter),
(nextKeyFilter, previousKeyFilter) => { (nextKeyFilter, previousKeyFilter) => {
if (window && typeof window.addEventListener !== 'undefined') { useEventListener(window, 'blur', () => {
useEventListener(window, 'blur', () => { isPressed.value = false
isPressed.value = false })
})
}
// if the previous keyFilter was a boolean but is now something else, we need to reset the isPressed value // if the previous keyFilter was a boolean but is now something else, we need to reset the isPressed value
if (isBoolean(previousKeyFilter) && !isBoolean(nextKeyFilter)) { if (isBoolean(previousKeyFilter) && !isBoolean(nextKeyFilter)) {
+6 -1
View File
@@ -4,6 +4,11 @@ export function useWindow(): UseWindow {
if (typeof window !== 'undefined') { if (typeof window !== 'undefined') {
return window as UseWindow return window as UseWindow
} else { } else {
return { chrome: false } as UseWindow return {
chrome: false,
addEventListener(..._: Parameters<Window['addEventListener']>) {
// do nothing
},
} as UseWindow
} }
} }
@@ -2,8 +2,8 @@
import type { D3ZoomEvent, ZoomTransform } from 'd3-zoom' import type { D3ZoomEvent, ZoomTransform } from 'd3-zoom'
import { zoom, zoomIdentity } from 'd3-zoom' import { zoom, zoomIdentity } from 'd3-zoom'
import { pointer, select } from 'd3-selection' import { pointer, select } from 'd3-selection'
import { computed, onMounted, ref, watchEffect } from 'vue' import { onMounted, ref, watchEffect } from 'vue'
import { useEventListener, useResizeObserver } from '@vueuse/core' import { toRef, useEventListener, useResizeObserver } from '@vueuse/core'
import type { CoordinateExtent, D3ZoomHandler, FlowOptions, ViewportTransform } from '../../types' import type { CoordinateExtent, D3ZoomHandler, FlowOptions, ViewportTransform } from '../../types'
import { PanOnScrollMode } from '../../types' import { PanOnScrollMode } from '../../types'
import { useKeyPress, useVueFlow, useWindow } from '../../composables' import { useKeyPress, useVueFlow, useWindow } from '../../composables'
@@ -11,6 +11,8 @@ import { ErrorCode, VueFlowError, clamp, getDimensions, isMacOs } from '../../ut
import Pane from '../Pane/Pane.vue' import Pane from '../Pane/Pane.vue'
import Transform from './Transform.vue' import Transform from './Transform.vue'
const window = useWindow()
const { const {
id, id,
minZoom, minZoom,
@@ -50,7 +52,7 @@ const isZoomingOrPanning = ref(false)
const isPanScrolling = ref(false) const isPanScrolling = ref(false)
const panScrollTimeout = ref<ReturnType<typeof setTimeout>>() let panScrollTimeout: ReturnType<typeof setTimeout> | null = null
let zoomedWithRightMouseButton = false let zoomedWithRightMouseButton = false
@@ -64,19 +66,16 @@ let prevTransform: ViewportTransform = {
const panKeyPressed = useKeyPress(panActivationKeyCode) const panKeyPressed = useKeyPress(panActivationKeyCode)
const shouldPanOnDrag = computed(() => !selectionKeyPressed.value && panOnDrag.value && panKeyPressed.value) const shouldPanOnDrag = toRef(() => !selectionKeyPressed.value && panOnDrag.value && panKeyPressed.value)
const isSelecting = computed( const isSelecting = toRef(
() => () =>
(selectionKeyCode.value !== true && selectionKeyPressed.value) || (selectionKeyCode.value === true && !shouldPanOnDrag.value), (selectionKeyCode.value !== true && selectionKeyPressed.value) || (selectionKeyCode.value === true && !shouldPanOnDrag.value),
) )
onMounted(() => { useResizeObserver(viewportEl, setDimensions)
useResizeObserver(viewportEl, setDimensions)
const window = useWindow() useEventListener(window, 'resize', setDimensions)
useEventListener(window, 'resize', setDimensions)
})
onMounted(() => { onMounted(() => {
const viewportElement = viewportEl.value! const viewportElement = viewportEl.value!
@@ -221,7 +220,9 @@ onMounted(() => {
const nextViewport = eventToFlowTransform(d3Selection.property('__zoom')) const nextViewport = eventToFlowTransform(d3Selection.property('__zoom'))
clearTimeout(panScrollTimeout.value) if (panScrollTimeout) {
clearTimeout(panScrollTimeout)
}
// for pan on scroll we need to handle the event calls on our own // for pan on scroll we need to handle the event calls on our own
// we can't use the start, zoom and end events from d3-zoom // we can't use the start, zoom and end events from d3-zoom
@@ -231,13 +232,11 @@ onMounted(() => {
emits.moveStart({ event, flowTransform: nextViewport }) emits.moveStart({ event, flowTransform: nextViewport })
emits.viewportChangeStart(nextViewport) emits.viewportChangeStart(nextViewport)
} } else {
if (isPanScrolling.value) {
emits.move({ event, flowTransform: nextViewport }) emits.move({ event, flowTransform: nextViewport })
emits.viewportChange(nextViewport) emits.viewportChange(nextViewport)
panScrollTimeout.value = setTimeout(() => { panScrollTimeout = setTimeout(() => {
emits.moveEnd({ event, flowTransform: nextViewport }) emits.moveEnd({ event, flowTransform: nextViewport })
emits.viewportChangeEnd(nextViewport) emits.viewportChangeEnd(nextViewport)
+4 -3
View File
@@ -59,13 +59,14 @@ export function clampPosition(position: XYPosition, extent: CoordinateExtent): X
export function getHostForElement(element: HTMLElement): Document { export function getHostForElement(element: HTMLElement): Document {
const doc = element.getRootNode() as Document const doc = element.getRootNode() as Document
const window = useWindow()
if ('elementFromPoint' in doc) { if ('elementFromPoint' in doc) {
return doc return doc
} else {
return window.document
} }
const window = useWindow()
return window.document
} }
// todo: refactor generic to use MaybeElement // todo: refactor generic to use MaybeElement