import type { Ref } from 'vue' import type { FlowHooks } from '~/types' // flow event hooks export const createHooks = (): FlowHooks => ({ edgesChange: createExtendedEventHook(), nodesChange: createExtendedEventHook(), nodeDoubleClick: createExtendedEventHook(), nodeClick: createExtendedEventHook(), nodeMouseEnter: createExtendedEventHook(), nodeMouseMove: createExtendedEventHook(), nodeMouseLeave: createExtendedEventHook(), nodeContextMenu: createExtendedEventHook(), nodeDragStart: createExtendedEventHook(), nodeDrag: createExtendedEventHook(), nodeDragStop: createExtendedEventHook(), nodesInitialized: createExtendedEventHook(), miniMapNodeClick: createExtendedEventHook(), miniMapNodeDoubleClick: createExtendedEventHook(), miniMapNodeMouseEnter: createExtendedEventHook(), miniMapNodeMouseMove: createExtendedEventHook(), miniMapNodeMouseLeave: createExtendedEventHook(), connect: createExtendedEventHook(), connectStart: createExtendedEventHook(), connectEnd: createExtendedEventHook(), paneReady: createExtendedEventHook(), move: createExtendedEventHook(), moveStart: createExtendedEventHook(), moveEnd: createExtendedEventHook(), selectionDragStart: createExtendedEventHook(), selectionDrag: createExtendedEventHook(), selectionDragStop: createExtendedEventHook(), selectionContextMenu: createExtendedEventHook(), selectionStart: createExtendedEventHook(), selectionEnd: createExtendedEventHook(), viewportChangeStart: createExtendedEventHook(), viewportChange: createExtendedEventHook(), viewportChangeEnd: createExtendedEventHook(), paneScroll: createExtendedEventHook(), paneClick: createExtendedEventHook(), paneContextMenu: createExtendedEventHook(), paneMouseEnter: createExtendedEventHook(), paneMouseMove: createExtendedEventHook(), paneMouseLeave: createExtendedEventHook(), edgeContextMenu: createExtendedEventHook(), edgeMouseEnter: createExtendedEventHook(), edgeMouseMove: createExtendedEventHook(), edgeMouseLeave: createExtendedEventHook(), edgeDoubleClick: createExtendedEventHook(), edgeClick: createExtendedEventHook(), edgeUpdateStart: createExtendedEventHook(), edgeUpdate: createExtendedEventHook(), edgeUpdateEnd: createExtendedEventHook(), updateNodeInternals: createExtendedEventHook(), error: createExtendedEventHook((err) => warn(err.message)), }) export function useHooks(emit: (...args: any[]) => void, hooks: Ref) { onBeforeMount(() => { for (const [key, value] of Object.entries(hooks.value)) { const listener = (data: any) => { emit(key, data) } value.on(listener) tryOnScopeDispose(() => { value.off(listener) }) } }) }