feat(core,nodes): add nodesInitialized event hook
This commit is contained in:
@@ -17,6 +17,8 @@ const { id, type, name, draggable, selectable, connectable, ...props } = defineP
|
|||||||
resizeObserver: ResizeObserver
|
resizeObserver: ResizeObserver
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
|
const nodeEmits = defineEmits(['ready'])
|
||||||
|
|
||||||
provide(NodeId, id)
|
provide(NodeId, id)
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@@ -93,6 +95,7 @@ updatePosition(
|
|||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
props.resizeObserver.observe(nodeElement.value)
|
props.resizeObserver.observe(nodeElement.value)
|
||||||
|
nodeEmits('ready')
|
||||||
})
|
})
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
|
|||||||
@@ -7,7 +7,9 @@ import { warn } from '../../utils'
|
|||||||
|
|
||||||
const slots = inject(Slots)
|
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 draggable = (d?: boolean) => (typeof d === 'undefined' ? nodesDraggable : d)
|
||||||
const selectable = (s?: boolean) => (typeof s === 'undefined' ? elementsSelectable : s)
|
const selectable = (s?: boolean) => (typeof s === 'undefined' ? elementsSelectable : s)
|
||||||
@@ -52,6 +54,14 @@ const getType = (type?: string, template?: GraphNode['template']) => {
|
|||||||
|
|
||||||
return slot
|
return slot
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const readyNodes = []
|
||||||
|
const isReady = (id: string) => {
|
||||||
|
readyNodes.push(id)
|
||||||
|
if (readyNodes.length === getNodes.length) {
|
||||||
|
emits.nodesInitialized()
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@@ -74,6 +84,7 @@ export default {
|
|||||||
:selectable="selectable(node.selectable)"
|
:selectable="selectable(node.selectable)"
|
||||||
:connectable="connectable(node.connectable)"
|
:connectable="connectable(node.connectable)"
|
||||||
:node="node"
|
:node="node"
|
||||||
|
@ready="isReady(node.id)"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ const emit = defineEmits<{
|
|||||||
(event: 'nodeDragStart', nodeDragEvent: NodeDragEvent): void
|
(event: 'nodeDragStart', nodeDragEvent: NodeDragEvent): void
|
||||||
(event: 'nodeDrag', nodeDragEvent: NodeDragEvent): void
|
(event: 'nodeDrag', nodeDragEvent: NodeDragEvent): void
|
||||||
(event: 'nodeDragStop', nodeDragEvent: NodeDragEvent): void
|
(event: 'nodeDragStop', nodeDragEvent: NodeDragEvent): void
|
||||||
|
(event: 'nodesInitialized'): void
|
||||||
(event: 'miniMapNodeClick', nodeMouseEvent: NodeMouseEvent): void
|
(event: 'miniMapNodeClick', nodeMouseEvent: NodeMouseEvent): void
|
||||||
(event: 'miniMapNodeDoubleClick', nodeMouseEvent: NodeMouseEvent): void
|
(event: 'miniMapNodeDoubleClick', nodeMouseEvent: NodeMouseEvent): void
|
||||||
(event: 'miniMapNodeMouseEnter', nodeMouseEvent: NodeMouseEvent): void
|
(event: 'miniMapNodeMouseEnter', nodeMouseEvent: NodeMouseEvent): void
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ export const createHooks = (): FlowHooks => ({
|
|||||||
nodeDragStart: createEventHook(),
|
nodeDragStart: createEventHook(),
|
||||||
nodeDrag: createEventHook(),
|
nodeDrag: createEventHook(),
|
||||||
nodeDragStop: createEventHook(),
|
nodeDragStop: createEventHook(),
|
||||||
|
nodesInitialized: createEventHook(),
|
||||||
miniMapNodeClick: createEventHook(),
|
miniMapNodeClick: createEventHook(),
|
||||||
miniMapNodeDoubleClick: createEventHook(),
|
miniMapNodeDoubleClick: createEventHook(),
|
||||||
miniMapNodeMouseEnter: createEventHook(),
|
miniMapNodeMouseEnter: createEventHook(),
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ export interface FlowEvents {
|
|||||||
nodeDragStart: NodeDragEvent
|
nodeDragStart: NodeDragEvent
|
||||||
nodeDrag: NodeDragEvent
|
nodeDrag: NodeDragEvent
|
||||||
nodeDragStop: NodeDragEvent
|
nodeDragStop: NodeDragEvent
|
||||||
|
nodesInitialized: void
|
||||||
updateNodeInternals: string[]
|
updateNodeInternals: string[]
|
||||||
miniMapNodeClick: NodeMouseEvent
|
miniMapNodeClick: NodeMouseEvent
|
||||||
miniMapNodeDoubleClick: NodeMouseEvent
|
miniMapNodeDoubleClick: NodeMouseEvent
|
||||||
@@ -108,6 +109,7 @@ export interface Emits {
|
|||||||
(event: 'nodeDragStart', nodeDragEvent: NodeDragEvent): void
|
(event: 'nodeDragStart', nodeDragEvent: NodeDragEvent): void
|
||||||
(event: 'nodeDrag', nodeDragEvent: NodeDragEvent): void
|
(event: 'nodeDrag', nodeDragEvent: NodeDragEvent): void
|
||||||
(event: 'nodeDragStop', nodeDragEvent: NodeDragEvent): void
|
(event: 'nodeDragStop', nodeDragEvent: NodeDragEvent): void
|
||||||
|
(event: 'nodesInitialized'): void
|
||||||
(event: 'miniMapNodeClick', nodeMouseEvent: NodeMouseEvent): void
|
(event: 'miniMapNodeClick', nodeMouseEvent: NodeMouseEvent): void
|
||||||
(event: 'miniMapNodeDoubleClick', nodeMouseEvent: NodeMouseEvent): void
|
(event: 'miniMapNodeDoubleClick', nodeMouseEvent: NodeMouseEvent): void
|
||||||
(event: 'miniMapNodeMouseEnter', nodeMouseEvent: NodeMouseEvent): void
|
(event: 'miniMapNodeMouseEnter', nodeMouseEvent: NodeMouseEvent): void
|
||||||
|
|||||||
Reference in New Issue
Block a user