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 -1
View File
@@ -24,7 +24,7 @@
"scripts": {
"prepare": "ts-patch install -s",
"build": "vite build",
"types": "vue-tsc --declaration --emitDeclarationOnly && tsc -p tsconfig.build.json && shx rm -rf tmp && yarn lint:dist",
"types": "yarn prepare && vue-tsc --declaration --emitDeclarationOnly && tsc -p tsconfig.build.json && shx rm -rf tmp && yarn lint:dist",
"typedoc": "typedoc --tsconfig tsconfig.docs.json dist/index.d.ts --out typedocs",
"theme": "postcss src/style.css -o dist/style.css && postcss src/theme-default.css -o dist/theme-default.css",
"lint": "eslint --ext \".js,.jsx,.ts,.tsx\" --fix --ignore-path ../.gitignore .",
@@ -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'
+2
View File
@@ -13,6 +13,8 @@ export const createHooks = (): FlowHooks => ({
nodeDragStart: createEventHook(),
nodeDrag: createEventHook(),
nodeDragStop: createEventHook(),
miniMapNodeClick: createEventHook(),
miniMapNodeDoubleClick: createEventHook(),
connect: createEventHook(),
connectStart: createEventHook(),
connectStop: createEventHook(),
+2
View File
@@ -20,6 +20,8 @@ export interface FlowEvents<NodeData = ElementData, EdgeData = ElementData> {
nodeDragStart: { event: MouseTouchEvent; node: GraphNode<NodeData> }
nodeDrag: { event: MouseTouchEvent; node: GraphNode<NodeData> }
nodeDragStop: { event: MouseTouchEvent; node: GraphNode<NodeData> }
miniMapNodeClick: { event: MouseTouchEvent; node: GraphNode<NodeData> }
miniMapNodeDoubleClick: { event: MouseTouchEvent; node: GraphNode<NodeData> }
connect: Connection
connectStart: {
event: MouseEvent