feat(vue-flow,components): add mouseover events for minimap nodes

This commit is contained in:
bcakmakoglu
2022-05-27 23:36:01 +02:00
committed by Braks
parent 7c360bb5c1
commit d519eba430
3 changed files with 29 additions and 14 deletions
@@ -16,6 +16,8 @@ const {
maskColor = 'rgb(240, 242, 243, 0.7)', maskColor = 'rgb(240, 242, 243, 0.7)',
} = defineProps<MiniMapProps>() } = defineProps<MiniMapProps>()
const emit = defineEmits(['nodeClick', 'nodeDblclick', 'nodeMouseenter', 'nodeMousemove', 'nodeMouseleave'])
const attrs: Record<string, any> = useAttrs() const attrs: Record<string, any> = useAttrs()
const window = useWindow() const window = useWindow()
@@ -85,23 +87,33 @@ const d = controlledComputed($$(viewBox), () => {
}) })
const onNodeClick = (event: MouseEvent, node: GraphNode) => { const onNodeClick = (event: MouseEvent, node: GraphNode) => {
emits.miniMapNodeClick({ event, node }) const param = { event, node, connectedEdges: getConnectedEdges([node], edges) }
emits.miniMapNodeClick(param)
emit('nodeClick', param)
} }
const onNodeDblClick = (event: MouseEvent, node: GraphNode) => { const onNodeDblClick = (event: MouseEvent, node: GraphNode) => {
emits.miniMapNodeDoubleClick({ event, node }) const param = { event, node, connectedEdges: getConnectedEdges([node], edges) }
emits.miniMapNodeDoubleClick(param)
emit('nodeDblclick', param)
} }
const onNodeMouseEnter = (event: MouseEvent, node: GraphNode) => { const onNodeMouseEnter = (event: MouseEvent, node: GraphNode) => {
emits.miniMapNodeDoubleClick({ event, node }) const param = { event, node, connectedEdges: getConnectedEdges([node], edges) }
emits.miniMapNodeMouseEnter(param)
emit('nodeMouseenter', param)
} }
const onNodeMouseMove = (event: MouseEvent, node: GraphNode) => { const onNodeMouseMove = (event: MouseEvent, node: GraphNode) => {
emits.miniMapNodeDoubleClick({ event, node }) const param = { event, node, connectedEdges: getConnectedEdges([node], edges) }
emits.miniMapNodeMouseMove(param)
emit('nodeMousemove', param)
} }
const onNodeMouseLeave = (event: MouseEvent, node: GraphNode) => { const onNodeMouseLeave = (event: MouseEvent, node: GraphNode) => {
emits.miniMapNodeDoubleClick({ event, node }) const param = { event, node, connectedEdges: getConnectedEdges([node], edges) }
emits.miniMapNodeMouseLeave(param)
emit('nodeMouseleave', param)
} }
</script> </script>
@@ -131,11 +143,11 @@ export default {
:stroke-color="nodeStrokeColorFunc(node)" :stroke-color="nodeStrokeColorFunc(node)"
:stroke-width="nodeStrokeWidth" :stroke-width="nodeStrokeWidth"
:shape-rendering="shapeRendering" :shape-rendering="shapeRendering"
@click="(e: MouseEvent) => onNodeClick(e, node)" @click="onNodeClick($event, node)"
@dblclick="(e: MouseEvent) => onNodeDblClick(e, node)" @dblclick="onNodeDblClick($event, node)"
@mouseenter="(e: MouseEvent) => onNodeMouseEnter(e, node)" @mouseenter="onNodeMouseEnter($event, node)"
@mousemove="(e: MouseEvent) => onNodeMouseMove(e, node)" @mousemove="onNodeMouseMove($event, node)"
@mouseleave="(e: MouseEvent) => onNodeMouseLeave(e, node)" @mouseleave="onNodeMouseLeave($event, node)"
> >
<slot <slot
:id="node.id" :id="node.id"
@@ -31,6 +31,9 @@ const MiniMapNode: FunctionalComponent<MiniMapNodeProps> = function (
shapeRendering, shapeRendering,
onClick: (e: MouseEvent) => emit('click', e), onClick: (e: MouseEvent) => emit('click', e),
onDblClick: (e: MouseEvent) => emit('dblclick', e), onDblClick: (e: MouseEvent) => emit('dblclick', e),
onMouseenter: (e: MouseEvent) => emit('mouseenter', e),
onMousemove: (e: MouseEvent) => emit('mousemove', e),
onMouseleave: (e: MouseEvent) => emit('mouseleave', e),
}), }),
slots?.default?.(), slots?.default?.(),
] ]
@@ -38,6 +41,6 @@ const MiniMapNode: FunctionalComponent<MiniMapNodeProps> = function (
MiniMapNode.props = ['position', 'dimensions', 'strokeWidth', 'strokeColor', 'borderRadius', 'color', 'shapeRendering'] MiniMapNode.props = ['position', 'dimensions', 'strokeWidth', 'strokeColor', 'borderRadius', 'color', 'shapeRendering']
MiniMapNode.emits = ['click', 'dbl-click', 'mouseenter', 'mousemove', 'mouseleave'] MiniMapNode.emits = ['click', 'dblclick', 'mouseenter', 'mousemove', 'mouseleave']
export default MiniMapNode export default MiniMapNode
+3 -3
View File
@@ -38,9 +38,9 @@ export interface FlowEvents {
nodeDragStop: NodeMouseEvent nodeDragStop: NodeMouseEvent
miniMapNodeClick: NodeMouseEvent miniMapNodeClick: NodeMouseEvent
miniMapNodeDoubleClick: NodeMouseEvent miniMapNodeDoubleClick: NodeMouseEvent
miniMapNodeMouseEnter: { event: MouseEvent; node: GraphNode } miniMapNodeMouseEnter: NodeMouseEvent
miniMapNodeMouseMove: { event: MouseEvent; node: GraphNode } miniMapNodeMouseMove: NodeMouseEvent
miniMapNodeMouseLeave: { event: MouseEvent; node: GraphNode } miniMapNodeMouseLeave: NodeMouseEvent
connect: Connection connect: Connection
connectStart: { connectStart: {
event: MouseEvent event: MouseEvent