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-20 18:26:49 +02:00
committed by Braks
parent 3537e6b022
commit d96e944a49
13 changed files with 56 additions and 43 deletions

View File

@@ -43,7 +43,7 @@ export default defineComponent({
},
onPaneReady(instance: FlowEvents['paneReady']) {
instance.fitView()
this.instance = instance
this.instance = instance as any
},
onConnect(params: FlowEvents['connect']) {
addEdge(params, this.elements)

View File

@@ -5,6 +5,7 @@ interface CustomConnectionLineProps {
targetX: number
targetY: number
}
const props = defineProps<CustomConnectionLineProps>()
</script>

View File

@@ -6,7 +6,7 @@ import Sidebar from './Sidebar.vue'
let id = 0
const getId = () => `dndnode_${id++}`
const { instance, onConnect, nodes, edges, addEdges, addNodes } = useVueFlow({
const { onConnect, nodes, edges, addEdges, addNodes, project } = useVueFlow({
nodes: [
{
id: '1',
@@ -26,17 +26,15 @@ const onDragOver = (event: DragEvent) => {
onConnect((params) => addEdges([params]))
const onDrop = (event: DragEvent) => {
if (instance.value) {
const type = event.dataTransfer?.getData('application/vueflow')
const position = instance.value.project({ x: event.clientX, y: event.clientY - 40 })
const newNode = {
id: getId(),
type,
position,
label: `${type} node`,
} as Node
addNodes([newNode])
}
const type = event.dataTransfer?.getData('application/vueflow')
const position = project({ x: event.clientX, y: event.clientY - 40 })
const newNode = {
id: getId(),
type,
position,
label: `${type} node`,
} as Node
addNodes([newNode])
}
</script>

View File

@@ -5,7 +5,7 @@ import { getElements } from './utils'
const onLoad = (flowInstance: VueFlowStore) => {
flowInstance.fitView()
console.log(flowInstance.getElements())
console.log(flowInstance.getElements.value)
}
const elements = getElements()

View File

@@ -1,5 +1,5 @@
<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 FloatingConnectionLine from './FloatingConnectionLine.vue'
import { createElements } from './floating-edge-utils'
@@ -14,7 +14,7 @@ onConnect((params) => addEdges([{ ...params, type: 'floating', markerEnd: Marker
<template>
<div class="floatingedges">
<VueFlow>
<Background variant="lines" :gap="24" />
<Background :variant="BackgroundVariant.Lines" :gap="24" />
<MiniMap />
<Controls />

View File

@@ -1,5 +1,15 @@
<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'
const onNodeDragStart = (e: FlowEvents['nodeDragStart']) => console.log('drag start', e)
@@ -18,7 +28,7 @@ const onLoad = (flowInstance: VueFlowStore) => {
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 onEdgeMouseEnter = (e: FlowEvents['edgeMouseEnter']) => console.log('edge mouse enter', 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 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 === 'output') return '#ff0072'
if (n.type === 'default') return '#1a192b'
@@ -92,7 +102,7 @@ const nodeStrokeColor = (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'
}
@@ -121,7 +131,6 @@ const onConnect = (params: Connection | Edge) => (elements.value = addEdge(param
@selection-drag-stop="onSelectionDragStop"
@selection-context-menu="onSelectionContextMenu"
@move-end="onMoveEnd"
@edge-update="onEdgeMouseMove"
@edge-context-menu="onEdgeContextMenu"
@edge-mouse-enter="onEdgeMouseEnter"
@edge-mouse-move="onEdgeMouseMove"

View File

@@ -13,10 +13,10 @@ const state = useStorage<FlowExportObject>(flowKey, {
const getNodeId = () => `randomnode_${+new Date()}`
const { setTransform } = useZoomPanHelper()
const { nodes, edges, addNodes, setNodes, setEdges, instance, dimensions } = useVueFlow()
const { nodes, edges, addNodes, setNodes, setEdges, toObject, dimensions } = useVueFlow()
const onSave = () => {
state.value = instance.value?.toObject()
state.value = toObject()
}
const onRestore = () => {

View File

@@ -13,7 +13,7 @@ onPaneReady((i) => {
i.fitView({
padding: 0.2,
})
console.log(i.getElements())
console.log(i.getElements.value)
})
</script>

View File

@@ -25,8 +25,8 @@ const initialElements: Elements = [
const elements = ref(initialElements)
const onLoad = (flowInstance: VueFlowStore) => flowInstance.fitView()
const onEdgeUpdateStart = (edge: Edge) => console.log('start update', edge)
const onEdgeUpdateEnd = (edge: Edge) => console.log('end update', edge)
const onEdgeUpdateStart = ({ edge }: FlowEvents['edgeUpdateStart']) => console.log('start update', edge)
const onEdgeUpdateEnd = ({ edge }: FlowEvents['edgeUpdateEnd']) => console.log('end update', edge)
const onEdgeUpdate = ({ edge, connection }: FlowEvents['edgeUpdate']) => {
elements.value = updateEdge(edge, connection, elements.value)
}

View File

@@ -8,6 +8,7 @@ import { Slots } from '../../context'
import type {
Connection,
EdgeChange,
EdgeUpdateEvent,
GraphEdge,
GraphNode,
NodeChange,
@@ -79,13 +80,13 @@ const emit = defineEmits<{
(event: 'paneContextMenu', paneEvent: MouseEvent): void
(event: 'edgeContextMenu', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseEnter', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseMove', edgeMouseEvent: MouseEvent): void
(event: 'edgeMouseLeave', edgeMouseEvent: MouseEvent): void
(event: 'edgeDoubleClick', edgeMouseEvent: MouseEvent): void
(event: 'edgeClick', edgeMouseEvent: MouseEvent): void
(event: 'edgeUpdateStart', edgeMouseEvent: MouseEvent): void
(event: 'edgeUpdate', edgeMouseEvent: MouseEvent): void
(event: 'edgeUpdateEnd', edgeMouseEvent: MouseEvent): void
(event: 'edgeMouseMove', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseLeave', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeDoubleClick', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeClick', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeUpdateStart', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeUpdate', edgeMouseEvent: EdgeUpdateEvent): void
(event: 'edgeUpdateEnd', edgeMouseEvent: EdgeMouseEvent): void
(event: 'updateNodeInternals', id: string): void
/** v-model event definitions */

View File

@@ -10,6 +10,10 @@ type GlobalComponentName = string
/** 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 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 */
export type EdgeComponent = Component<EdgeProps> | DefineComponent<EdgeProps, any, any, any, any, any> | GlobalComponentName

View File

@@ -3,7 +3,7 @@ import type { DefaultEdgeOptions, Edge, GraphEdge } from './edge'
import type { CoordinateExtent, GraphNode, Node } from './node'
import type { ConnectionLineOptions, ConnectionLineType, ConnectionMode, Connector } from './connection'
import type { KeyCode, PanOnScrollMode } from './zoom'
import type { DefaultEdgeTypes, DefaultNodeTypes, EdgeComponent, NodeComponent } from './components'
import type { EdgeTypesObject, NodeTypesObject } from './components'
export type ElementData = any
@@ -81,9 +81,9 @@ export interface FlowProps {
nodes?: Node[]
edges?: Edge[]
/** 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">) */
nodeTypes?: { [key in keyof DefaultNodeTypes]?: NodeComponent } & Record<string, NodeComponent>
nodeTypes?: NodeTypesObject
connectionMode?: ConnectionMode
/** @deprecated use {@link ConnectionLineOptions.type} */
connectionLineType?: ConnectionLineType

View File

@@ -132,13 +132,13 @@ export interface Emits {
(event: 'paneContextMenu', paneEvent: MouseEvent): void
(event: 'edgeContextMenu', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseEnter', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseMove', edgeMouseEvent: MouseEvent): void
(event: 'edgeMouseLeave', edgeMouseEvent: MouseEvent): void
(event: 'edgeDoubleClick', edgeMouseEvent: MouseEvent): void
(event: 'edgeClick', edgeMouseEvent: MouseEvent): void
(event: 'edgeUpdateStart', edgeMouseEvent: MouseEvent): void
(event: 'edgeUpdate', edgeMouseEvent: MouseEvent): void
(event: 'edgeUpdateEnd', edgeMouseEvent: MouseEvent): void
(event: 'edgeMouseMove', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeMouseLeave', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeDoubleClick', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeClick', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeUpdateStart', edgeMouseEvent: EdgeMouseEvent): void
(event: 'edgeUpdate', edgeUpdateEvent: EdgeUpdateEvent): void
(event: 'edgeUpdateEnd', edgeMouseEvent: EdgeMouseEvent): void
/** v-model event definitions */
(event: 'update:modelValue', value: FlowElements): void