fix(types): use correct edge event types

# What's changed?

* instead of `MouseEvent`, emit `EdgeMouseEvent` type
* fix examples
This commit is contained in:
braks
2022-07-22 16:56:10 +02:00
committed by Braks
parent 3537e6b022
commit d96e944a49
13 changed files with 56 additions and 43 deletions
+1 -1
View File
@@ -43,7 +43,7 @@ export default defineComponent({
}, },
onPaneReady(instance: FlowEvents['paneReady']) { onPaneReady(instance: FlowEvents['paneReady']) {
instance.fitView() instance.fitView()
this.instance = instance this.instance = instance as any
}, },
onConnect(params: FlowEvents['connect']) { onConnect(params: FlowEvents['connect']) {
addEdge(params, this.elements) addEdge(params, this.elements)
@@ -5,6 +5,7 @@ interface CustomConnectionLineProps {
targetX: number targetX: number
targetY: number targetY: number
} }
const props = defineProps<CustomConnectionLineProps>() const props = defineProps<CustomConnectionLineProps>()
</script> </script>
+10 -12
View File
@@ -6,7 +6,7 @@ import Sidebar from './Sidebar.vue'
let id = 0 let id = 0
const getId = () => `dndnode_${id++}` const getId = () => `dndnode_${id++}`
const { instance, onConnect, nodes, edges, addEdges, addNodes } = useVueFlow({ const { onConnect, nodes, edges, addEdges, addNodes, project } = useVueFlow({
nodes: [ nodes: [
{ {
id: '1', id: '1',
@@ -26,17 +26,15 @@ const onDragOver = (event: DragEvent) => {
onConnect((params) => addEdges([params])) onConnect((params) => addEdges([params]))
const onDrop = (event: DragEvent) => { const onDrop = (event: DragEvent) => {
if (instance.value) { const type = event.dataTransfer?.getData('application/vueflow')
const type = event.dataTransfer?.getData('application/vueflow') const position = project({ x: event.clientX, y: event.clientY - 40 })
const position = instance.value.project({ x: event.clientX, y: event.clientY - 40 }) const newNode = {
const newNode = { id: getId(),
id: getId(), type,
type, position,
position, label: `${type} node`,
label: `${type} node`, } as Node
} as Node addNodes([newNode])
addNodes([newNode])
}
} }
</script> </script>
@@ -5,7 +5,7 @@ import { getElements } from './utils'
const onLoad = (flowInstance: VueFlowStore) => { const onLoad = (flowInstance: VueFlowStore) => {
flowInstance.fitView() flowInstance.fitView()
console.log(flowInstance.getElements()) console.log(flowInstance.getElements.value)
} }
const elements = getElements() const elements = getElements()
@@ -1,5 +1,5 @@
<script lang="ts" setup> <script lang="ts" setup>
import { Background, Controls, MarkerType, MiniMap, VueFlow, useVueFlow } from '@braks/vue-flow' import { Background, BackgroundVariant, Controls, MarkerType, MiniMap, VueFlow, useVueFlow } from '@braks/vue-flow'
import FloatingEdge from './FloatingEdge.vue' import FloatingEdge from './FloatingEdge.vue'
import FloatingConnectionLine from './FloatingConnectionLine.vue' import FloatingConnectionLine from './FloatingConnectionLine.vue'
import { createElements } from './floating-edge-utils' import { createElements } from './floating-edge-utils'
@@ -14,7 +14,7 @@ onConnect((params) => addEdges([{ ...params, type: 'floating', markerEnd: Marker
<template> <template>
<div class="floatingedges"> <div class="floatingedges">
<VueFlow> <VueFlow>
<Background variant="lines" :gap="24" /> <Background :variant="BackgroundVariant.Lines" :gap="24" />
<MiniMap /> <MiniMap />
<Controls /> <Controls />
+14 -5
View File
@@ -1,5 +1,15 @@
<script lang="ts" setup> <script lang="ts" setup>
import type { Connection, Edge, Elements, FlowEvents, VueFlowStore, FlowTransform, Node, SnapGrid } from '@braks/vue-flow' import type {
Connection,
Edge,
Elements,
FlowEvents,
Node,
SnapGrid,
Styles,
ViewpaneTransform,
VueFlowStore,
} from '@braks/vue-flow'
import { Background, Controls, MarkerType, MiniMap, VueFlow, addEdge } from '@braks/vue-flow' import { Background, Controls, MarkerType, MiniMap, VueFlow, addEdge } from '@braks/vue-flow'
const onNodeDragStart = (e: FlowEvents['nodeDragStart']) => console.log('drag start', e) const onNodeDragStart = (e: FlowEvents['nodeDragStart']) => console.log('drag start', e)
@@ -18,7 +28,7 @@ const onLoad = (flowInstance: VueFlowStore) => {
flowInstance.fitView() flowInstance.fitView()
} }
const onMoveEnd = (transform?: FlowTransform) => console.log('zoom/move end', transform) const onMoveEnd = (e: FlowEvents['moveEnd']) => console.log('zoom/move end', e.flowTransform)
const onEdgeContextMenu = (e: FlowEvents['edgeContextMenu']) => console.log('edge context menu', e) const onEdgeContextMenu = (e: FlowEvents['edgeContextMenu']) => console.log('edge context menu', e)
const onEdgeMouseEnter = (e: FlowEvents['edgeMouseEnter']) => console.log('edge mouse enter', e) const onEdgeMouseEnter = (e: FlowEvents['edgeMouseEnter']) => console.log('edge mouse enter', e)
const onEdgeMouseMove = (e: FlowEvents['edgeMouseMove']) => console.log('edge mouse move', e) const onEdgeMouseMove = (e: FlowEvents['edgeMouseMove']) => console.log('edge mouse move', e)
@@ -83,7 +93,7 @@ const initialElements: Elements = [
const snapGrid: SnapGrid = [16, 16] const snapGrid: SnapGrid = [16, 16]
const nodeStrokeColor = (n: Node): string => { const nodeStrokeColor = (n: Node): string => {
if (n.style?.background) return n.style.background as string if ((n.style as Styles)?.background) return (n.style as Styles).background as string
if (n.type === 'input') return '#0041d0' if (n.type === 'input') return '#0041d0'
if (n.type === 'output') return '#ff0072' if (n.type === 'output') return '#ff0072'
if (n.type === 'default') return '#1a192b' if (n.type === 'default') return '#1a192b'
@@ -92,7 +102,7 @@ const nodeStrokeColor = (n: Node): string => {
} }
const nodeColor = (n: Node): string => { const nodeColor = (n: Node): string => {
if (n.style?.background) return n.style.background as string if ((n.style as Styles)?.background) return (n.style as Styles).background as string
return '#fff' return '#fff'
} }
@@ -121,7 +131,6 @@ const onConnect = (params: Connection | Edge) => (elements.value = addEdge(param
@selection-drag-stop="onSelectionDragStop" @selection-drag-stop="onSelectionDragStop"
@selection-context-menu="onSelectionContextMenu" @selection-context-menu="onSelectionContextMenu"
@move-end="onMoveEnd" @move-end="onMoveEnd"
@edge-update="onEdgeMouseMove"
@edge-context-menu="onEdgeContextMenu" @edge-context-menu="onEdgeContextMenu"
@edge-mouse-enter="onEdgeMouseEnter" @edge-mouse-enter="onEdgeMouseEnter"
@edge-mouse-move="onEdgeMouseMove" @edge-mouse-move="onEdgeMouseMove"
+2 -2
View File
@@ -13,10 +13,10 @@ const state = useStorage<FlowExportObject>(flowKey, {
const getNodeId = () => `randomnode_${+new Date()}` const getNodeId = () => `randomnode_${+new Date()}`
const { setTransform } = useZoomPanHelper() const { setTransform } = useZoomPanHelper()
const { nodes, edges, addNodes, setNodes, setEdges, instance, dimensions } = useVueFlow() const { nodes, edges, addNodes, setNodes, setEdges, toObject, dimensions } = useVueFlow()
const onSave = () => { const onSave = () => {
state.value = instance.value?.toObject() state.value = toObject()
} }
const onRestore = () => { const onRestore = () => {
+1 -1
View File
@@ -13,7 +13,7 @@ onPaneReady((i) => {
i.fitView({ i.fitView({
padding: 0.2, padding: 0.2,
}) })
console.log(i.getElements()) console.log(i.getElements.value)
}) })
</script> </script>
@@ -25,8 +25,8 @@ const initialElements: Elements = [
const elements = ref(initialElements) const elements = ref(initialElements)
const onLoad = (flowInstance: VueFlowStore) => flowInstance.fitView() const onLoad = (flowInstance: VueFlowStore) => flowInstance.fitView()
const onEdgeUpdateStart = (edge: Edge) => console.log('start update', edge) const onEdgeUpdateStart = ({ edge }: FlowEvents['edgeUpdateStart']) => console.log('start update', edge)
const onEdgeUpdateEnd = (edge: Edge) => console.log('end update', edge) const onEdgeUpdateEnd = ({ edge }: FlowEvents['edgeUpdateEnd']) => console.log('end update', edge)
const onEdgeUpdate = ({ edge, connection }: FlowEvents['edgeUpdate']) => { const onEdgeUpdate = ({ edge, connection }: FlowEvents['edgeUpdate']) => {
elements.value = updateEdge(edge, connection, elements.value) elements.value = updateEdge(edge, connection, elements.value)
} }
@@ -8,6 +8,7 @@ import { Slots } from '../../context'
import type { import type {
Connection, Connection,
EdgeChange, EdgeChange,
EdgeUpdateEvent,
GraphEdge, GraphEdge,
GraphNode, GraphNode,
NodeChange, NodeChange,
@@ -79,13 +80,13 @@ const emit = defineEmits<{
(event: 'paneContextMenu', paneEvent: MouseEvent): void (event: 'paneContextMenu', paneEvent: MouseEvent): void
(event: 'edgeContextMenu', edgeMouseEvent: EdgeMouseEvent): void (event: 'edgeContextMenu', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseEnter', edgeMouseEvent: EdgeMouseEvent): void (event: 'edgeMouseEnter', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseMove', edgeMouseEvent: MouseEvent): void (event: 'edgeMouseMove', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseLeave', edgeMouseEvent: MouseEvent): void (event: 'edgeMouseLeave', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeDoubleClick', edgeMouseEvent: MouseEvent): void (event: 'edgeDoubleClick', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeClick', edgeMouseEvent: MouseEvent): void (event: 'edgeClick', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeUpdateStart', edgeMouseEvent: MouseEvent): void (event: 'edgeUpdateStart', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeUpdate', edgeMouseEvent: MouseEvent): void (event: 'edgeUpdate', edgeMouseEvent: EdgeUpdateEvent): void
(event: 'edgeUpdateEnd', edgeMouseEvent: MouseEvent): void (event: 'edgeUpdateEnd', edgeMouseEvent: EdgeMouseEvent): void
(event: 'updateNodeInternals', id: string): void (event: 'updateNodeInternals', id: string): void
/** v-model event definitions */ /** v-model event definitions */
@@ -10,6 +10,10 @@ type GlobalComponentName = string
/** Node Components can either be a component definition or a string name */ /** Node Components can either be a component definition or a string name */
export type NodeComponent = Component<NodeProps> | DefineComponent<NodeProps, any, any, any, any> | GlobalComponentName export type NodeComponent = Component<NodeProps> | DefineComponent<NodeProps, any, any, any, any> | GlobalComponentName
export type NodeTypesObject = { [key in keyof DefaultNodeTypes]?: NodeComponent } & Record<string, NodeComponent>
export type EdgeTypesObject = { [key in keyof DefaultEdgeTypes]?: EdgeComponent } & Record<string, EdgeComponent>
/** Edge Components can either be a component definition or a string name */ /** Edge Components can either be a component definition or a string name */
export type EdgeComponent = Component<EdgeProps> | DefineComponent<EdgeProps, any, any, any, any, any> | GlobalComponentName export type EdgeComponent = Component<EdgeProps> | DefineComponent<EdgeProps, any, any, any, any, any> | GlobalComponentName
+3 -3
View File
@@ -3,7 +3,7 @@ import type { DefaultEdgeOptions, Edge, GraphEdge } from './edge'
import type { CoordinateExtent, GraphNode, Node } from './node' import type { CoordinateExtent, GraphNode, Node } from './node'
import type { ConnectionLineOptions, ConnectionLineType, ConnectionMode, Connector } from './connection' import type { ConnectionLineOptions, ConnectionLineType, ConnectionMode, Connector } from './connection'
import type { KeyCode, PanOnScrollMode } from './zoom' import type { KeyCode, PanOnScrollMode } from './zoom'
import type { DefaultEdgeTypes, DefaultNodeTypes, EdgeComponent, NodeComponent } from './components' import type { EdgeTypesObject, NodeTypesObject } from './components'
export type ElementData = any export type ElementData = any
@@ -81,9 +81,9 @@ export interface FlowProps {
nodes?: Node[] nodes?: Node[]
edges?: Edge[] edges?: Edge[]
/** either use the edgeTypes prop to define your edge-types or use slots (<template #edge-mySpecialType="props">) */ /** either use the edgeTypes prop to define your edge-types or use slots (<template #edge-mySpecialType="props">) */
edgeTypes?: { [key in keyof DefaultEdgeTypes]?: EdgeComponent } & Record<string, EdgeComponent> edgeTypes?: EdgeTypesObject
/** either use the nodeTypes prop to define your node-types or use slots (<template #node-mySpecialType="props">) */ /** either use the nodeTypes prop to define your node-types or use slots (<template #node-mySpecialType="props">) */
nodeTypes?: { [key in keyof DefaultNodeTypes]?: NodeComponent } & Record<string, NodeComponent> nodeTypes?: NodeTypesObject
connectionMode?: ConnectionMode connectionMode?: ConnectionMode
/** @deprecated use {@link ConnectionLineOptions.type} */ /** @deprecated use {@link ConnectionLineOptions.type} */
connectionLineType?: ConnectionLineType connectionLineType?: ConnectionLineType
+7 -7
View File
@@ -132,13 +132,13 @@ export interface Emits {
(event: 'paneContextMenu', paneEvent: MouseEvent): void (event: 'paneContextMenu', paneEvent: MouseEvent): void
(event: 'edgeContextMenu', edgeMouseEvent: EdgeMouseEvent): void (event: 'edgeContextMenu', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseEnter', edgeMouseEvent: EdgeMouseEvent): void (event: 'edgeMouseEnter', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseMove', edgeMouseEvent: MouseEvent): void (event: 'edgeMouseMove', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseLeave', edgeMouseEvent: MouseEvent): void (event: 'edgeMouseLeave', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeDoubleClick', edgeMouseEvent: MouseEvent): void (event: 'edgeDoubleClick', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeClick', edgeMouseEvent: MouseEvent): void (event: 'edgeClick', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeUpdateStart', edgeMouseEvent: MouseEvent): void (event: 'edgeUpdateStart', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeUpdate', edgeMouseEvent: MouseEvent): void (event: 'edgeUpdate', edgeUpdateEvent: EdgeUpdateEvent): void
(event: 'edgeUpdateEnd', edgeMouseEvent: MouseEvent): void (event: 'edgeUpdateEnd', edgeMouseEvent: EdgeMouseEvent): void
/** v-model event definitions */ /** v-model event definitions */
(event: 'update:modelValue', value: FlowElements): void (event: 'update:modelValue', value: FlowElements): void