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:
@@ -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'
|
||||
|
||||
@@ -13,6 +13,8 @@ export const createHooks = (): FlowHooks => ({
|
||||
nodeDragStart: createEventHook(),
|
||||
nodeDrag: createEventHook(),
|
||||
nodeDragStop: createEventHook(),
|
||||
miniMapNodeClick: createEventHook(),
|
||||
miniMapNodeDoubleClick: createEventHook(),
|
||||
connect: createEventHook(),
|
||||
connectStart: createEventHook(),
|
||||
connectStop: createEventHook(),
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user