feat: Add mini map node events

# What's changed?

* Add events for mini map node click & dbl click
* Receives event + node as parameters
This commit is contained in:
Braks
2022-04-13 22:48:23 +02:00
parent dca6960086
commit e178a3ce44
6 changed files with 36 additions and 5 deletions
@@ -1,5 +1,5 @@
<script lang="ts" setup>
import { ShapeRendering, MiniMapNodeFunc } from '../../types'
import { ShapeRendering, MiniMapNodeFunc, GraphNode } from '../../types'
import { useVueFlow, useWindow } from '../../composables'
import { getBoundsofRects, getRectOfNodes } from '../../utils'
import type { MiniMapProps } from '../../types/components'
@@ -70,6 +70,14 @@ const d = computed(() => {
h${-viewBB.value.width}z`
else return ''
})
const onNodeClick = (event: MouseEvent, node: GraphNode) => {
store.hooks.miniMapNodeClick.trigger({ event, node })
}
const onNodeDblClick = (event: MouseEvent, node: GraphNode) => {
store.hooks.miniMapNodeDoubleClick.trigger({ event, node })
}
</script>
<script lang="ts">
export default {
@@ -85,6 +93,7 @@ export default {
>
<template v-for="node of store.getNodes" :key="`mini-map-node-${node.id}`">
<MiniMapNode
:id="node.id"
:position="node.computedPosition"
:dimensions="node.dimensions"
:style="node.style"
@@ -94,13 +103,24 @@ export default {
:stroke-color="nodeStrokeColorFunc(node)"
:stroke-width="props.nodeStrokeWidth"
:shape-rendering="shapeRendering"
@click="(e) => onNodeClick(e, node)"
@dblclick="(e) => onNodeDblClick(e, node)"
>
<slot
:id="node.id"
:name="`node-${node.type}`"
:position="node.computedPosition"
:dimensions="node.dimensions"
:parent-node="node.parentNode"
:selected="node.selected"
:dragging="node.dragging"
:position="node.computedPosition"
:dimensions="node.dimensions"
:style="node.style"
:class="nodeClassNameFunc(node)"
:color="nodeColorFunc(node)"
:border-radius="props.nodeBorderRadius"
:stroke-color="nodeStrokeColorFunc(node)"
:stroke-width="props.nodeStrokeWidth"
:shape-rendering="shapeRendering"
/>
</MiniMapNode>
</template>
@@ -5,7 +5,10 @@ import type { MiniMapNodeProps } from '../../types/components'
const props = withDefaults(defineProps<MiniMapNodeProps>(), {
shapeRendering: 'geometricPrecision',
})
const attrs = useAttrs()
const emit = defineEmits(['click', 'dblClick'])
const attrs: any = useAttrs()
const styles = (attrs.style ?? {}) as CSSProperties
const fill = computed(() => props.color || (styles.background as string) || styles.backgroundColor)
@@ -19,6 +22,7 @@ export default {
<rect
class="vue-flow__minimap-node"
:class="attrs.class"
:style="attrs.style"
:x="props.position.x"
:y="props.position.y"
:rx="props.borderRadius"
@@ -29,6 +33,8 @@ export default {
:stroke="props.strokeColor"
:stroke-width="props.strokeWidth"
:shape-rendering="props.shapeRendering"
@click="emit('click')"
@dblClick="emit('dblClick')"
/>
<slot />
</template>
@@ -1,3 +1,4 @@
export { default as MiniMap } from './MiniMap/MiniMap.vue'
export { default as MiniMapNode } from './MiniMap/MiniMapNode.vue'
export { default as Controls } from './Controls/Controls.vue'
export { default as Background } from './Background/Background.vue'