feat(core,nodes): add nodesInitialized event hook

This commit is contained in:
braks
2022-11-06 09:40:55 +01:00
committed by Braks
parent 9530290133
commit fe1ba03eb0
5 changed files with 19 additions and 1 deletions
@@ -17,6 +17,8 @@ const { id, type, name, draggable, selectable, connectable, ...props } = defineP
resizeObserver: ResizeObserver
}>()
const nodeEmits = defineEmits(['ready'])
provide(NodeId, id)
const {
@@ -93,6 +95,7 @@ updatePosition(
onMounted(() => {
props.resizeObserver.observe(nodeElement.value)
nodeEmits('ready')
})
onBeforeUnmount(() => {
@@ -7,7 +7,9 @@ import { warn } from '../../utils'
const slots = inject(Slots)
const { nodesDraggable, elementsSelectable, nodesConnectable, getNodes, getNodeTypes, updateNodeDimensions } = $(useVueFlow())
const { nodesDraggable, elementsSelectable, nodesConnectable, getNodes, getNodeTypes, updateNodeDimensions, emits } = $(
useVueFlow(),
)
const draggable = (d?: boolean) => (typeof d === 'undefined' ? nodesDraggable : d)
const selectable = (s?: boolean) => (typeof s === 'undefined' ? elementsSelectable : s)
@@ -52,6 +54,14 @@ const getType = (type?: string, template?: GraphNode['template']) => {
return slot
}
const readyNodes = []
const isReady = (id: string) => {
readyNodes.push(id)
if (readyNodes.length === getNodes.length) {
emits.nodesInitialized()
}
}
</script>
<script lang="ts">
@@ -74,6 +84,7 @@ export default {
:selectable="selectable(node.selectable)"
:connectable="connectable(node.connectable)"
:node="node"
@ready="isReady(node.id)"
/>
</template>
</div>
@@ -55,6 +55,7 @@ const emit = defineEmits<{
(event: 'nodeDragStart', nodeDragEvent: NodeDragEvent): void
(event: 'nodeDrag', nodeDragEvent: NodeDragEvent): void
(event: 'nodeDragStop', nodeDragEvent: NodeDragEvent): void
(event: 'nodesInitialized'): void
(event: 'miniMapNodeClick', nodeMouseEvent: NodeMouseEvent): void
(event: 'miniMapNodeDoubleClick', nodeMouseEvent: NodeMouseEvent): void
(event: 'miniMapNodeMouseEnter', nodeMouseEvent: NodeMouseEvent): void
+1
View File
@@ -14,6 +14,7 @@ export const createHooks = (): FlowHooks => ({
nodeDragStart: createEventHook(),
nodeDrag: createEventHook(),
nodeDragStop: createEventHook(),
nodesInitialized: createEventHook(),
miniMapNodeClick: createEventHook(),
miniMapNodeDoubleClick: createEventHook(),
miniMapNodeMouseEnter: createEventHook(),
+2
View File
@@ -45,6 +45,7 @@ export interface FlowEvents {
nodeDragStart: NodeDragEvent
nodeDrag: NodeDragEvent
nodeDragStop: NodeDragEvent
nodesInitialized: void
updateNodeInternals: string[]
miniMapNodeClick: NodeMouseEvent
miniMapNodeDoubleClick: NodeMouseEvent
@@ -108,6 +109,7 @@ export interface Emits {
(event: 'nodeDragStart', nodeDragEvent: NodeDragEvent): void
(event: 'nodeDrag', nodeDragEvent: NodeDragEvent): void
(event: 'nodeDragStop', nodeDragEvent: NodeDragEvent): void
(event: 'nodesInitialized'): void
(event: 'miniMapNodeClick', nodeMouseEvent: NodeMouseEvent): void
(event: 'miniMapNodeDoubleClick', nodeMouseEvent: NodeMouseEvent): void
(event: 'miniMapNodeMouseEnter', nodeMouseEvent: NodeMouseEvent): void