From b5998ee301be42cc1dff0201ec497a5892f2aa33 Mon Sep 17 00:00:00 2001 From: bcakmakoglu <78412429+bcakmakoglu@users.noreply.github.com> Date: Wed, 22 Jun 2022 13:40:58 +0200 Subject: [PATCH] feat(nodes,types): update node event types # What's changed? * accept initial event handlers as `NodeEventHandlers` * pass contextual events (custom component) as `NodeEventsOn` Type * forward custom node events as is (not an event hook) --- packages/vue-flow/src/types/hooks.ts | 36 +++++++++++++++------------- packages/vue-flow/src/types/node.ts | 10 ++++---- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/packages/vue-flow/src/types/hooks.ts b/packages/vue-flow/src/types/hooks.ts index 619140a7..bd290cc1 100644 --- a/packages/vue-flow/src/types/hooks.ts +++ b/packages/vue-flow/src/types/hooks.ts @@ -152,22 +152,26 @@ export interface Emits { */ export type CustomEvent = (...args: Args) => Return -export interface DefaultNodeEvents { - doubleClick: NodeMouseEvent - click: NodeMouseEvent - mouseEnter: NodeMouseEvent - mouseMove: NodeMouseEvent - mouseLeave: NodeMouseEvent - contextMenu: NodeMouseEvent - dragStart: NodeDragEvent - drag: NodeDragEvent - dragStop: NodeDragEvent +type CustomEventHandlers = { + [key in keyof CustomEvents]: CustomEvents[key] } -export type NodeEventsOn = Readonly<{ - [key in keyof DefaultNodeEvents]: EventHookOn -}> +export type NodeEventsHandler = { + doubleClick: (event: NodeMouseEvent) => any + click: (event: NodeMouseEvent) => any + mouseEnter: (event: NodeMouseEvent) => any + mouseMove: (event: NodeMouseEvent) => any + mouseLeave: (event: NodeMouseEvent) => any + contextMenu: (event: NodeMouseEvent) => any + dragStart: (event: NodeDragEvent) => any + drag: (event: NodeDragEvent) => any + dragStop: (event: NodeDragEvent) => any +} & CustomEventHandlers -export type NodeEvents> = { - [key in keyof DefaultNodeEvents]: (event: DefaultNodeEvents[key]) => void -} & CustomEvents +export type NodeEventsOn = { + [key in keyof NodeEventsHandler]: EventHookOn any ? Event : never> +} & CustomEventHandlers + +export type NodeEventsEmit = { + [key in keyof NodeEventsHandler]: EventHookTrigger any ? Event : never> +} & CustomEventHandlers diff --git a/packages/vue-flow/src/types/node.ts b/packages/vue-flow/src/types/node.ts index 1ec24173..382fce2a 100644 --- a/packages/vue-flow/src/types/node.ts +++ b/packages/vue-flow/src/types/node.ts @@ -2,7 +2,7 @@ import type { Component, VNode } from 'vue' import type { ClassFunc, Dimensions, ElementData, Position, SnapGrid, StyleFunc, Styles, XYPosition, XYZPosition } from './flow' import type { DefaultNodeTypes, NodeComponent } from './components' import type { HandleElement, ValidConnectionFunc } from './handle' -import type { CustomEvent, NodeEvents, NodeEventsOn } from "./hooks"; +import type { CustomEvent, NodeEventsHandler, NodeEventsOn } from './hooks' /** Defined as [[x-from, y-from], [x-to, y-to]] **/ export type CoordinateExtent = [[number, number], [number, number]] @@ -17,7 +17,7 @@ type WidthFunc = (node: GraphNode) => number | string // eslint-disable-next-line no-use-before-define type HeightFunc = (node: GraphNode) => number | string | void -export interface Node = {}> { +export interface Node = any> { /** Unique node id */ id: string /** A node label */ @@ -72,7 +72,7 @@ export interface Node + events?: Partial> } export interface GraphNode extends Node { @@ -86,7 +86,7 @@ export interface GraphNode extends Node { } /** these props are passed to node components */ -export interface NodeProps = {}> { +export interface NodeProps { /** unique node id */ id: string /** node type */ @@ -129,5 +129,5 @@ export interface NodeProps + events?: Partial> }