diff --git a/packages/core/src/types/hooks.ts b/packages/core/src/types/hooks.ts index d2a1d6e4..2246c8f3 100644 --- a/packages/core/src/types/hooks.ts +++ b/packages/core/src/types/hooks.ts @@ -1,4 +1,4 @@ -import type { EventHook, EventHookOn, EventHookTrigger } from '@vueuse/core' +import type { EventHookOn, EventHookTrigger } from '@vueuse/core' import type { D3ZoomEvent } from 'd3-zoom' import type { GraphEdge } from './edge' import type { GraphNode } from './node' @@ -7,6 +7,7 @@ import type { ViewportTransform } from './zoom' import type { EdgeChange, NodeChange } from './changes' import type { VueFlowStore } from './store' import type { VueFlowError } from '~/utils/errors' +import type { EventHookExtended } from '~/utils' export type MouseTouchEvent = MouseEvent | TouchEvent @@ -94,7 +95,7 @@ export interface FlowEvents { } export type FlowHooks = Readonly<{ - [key in keyof FlowEvents]: EventHook + [key in keyof FlowEvents]: EventHookExtended }> export type FlowHooksOn = Readonly<{ diff --git a/packages/core/src/utils/createExtendedEventHook.ts b/packages/core/src/utils/createExtendedEventHook.ts index 2b5dfab0..15af9d07 100644 --- a/packages/core/src/utils/createExtendedEventHook.ts +++ b/packages/core/src/utils/createExtendedEventHook.ts @@ -1,5 +1,3 @@ -import type { Ref } from 'vue' -import { ref } from 'vue' import type { EventHook } from '@vueuse/core' import { tryOnScopeDispose } from '@vueuse/core' @@ -9,26 +7,28 @@ import { tryOnScopeDispose } from '@vueuse/core' * Modified to be able to check if there are any event listeners */ export interface EventHookExtended extends EventHook { - fns: Ref void>> + hasListeners: () => boolean } export function createExtendedEventHook(defaultHandler: (param: T) => void = () => {}): EventHookExtended { - const fns = ref(new Set<(param: T) => void>()) + const fns = new Set<(param: T) => void>() + + const hasListeners = () => fns.size > 0 if (defaultHandler) { - fns.value.add(defaultHandler) + fns.add(defaultHandler) } const off = (fn: (param: T) => void) => { - fns.value.delete(fn) + fns.delete(fn) } const on = (fn: (param: T) => void) => { - if (fns.value.has(defaultHandler)) { - fns.value.delete(defaultHandler) + if (fns.has(defaultHandler)) { + fns.delete(defaultHandler) } - fns.value.add(fn) + fns.add(fn) const offFn = () => off(fn) tryOnScopeDispose(offFn) @@ -39,13 +39,13 @@ export function createExtendedEventHook(defaultHandler: (param: T) => v } const trigger = (param: T) => { - return Promise.all(Array.from(fns.value).map((fn) => fn(param))) + return Promise.all(Array.from(fns).map((fn) => fn(param))) } return { on, off, trigger, - fns, + hasListeners, } }