chore(core): emit nodesInitialized after next tick
This commit is contained in:
@@ -17,8 +17,6 @@ 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 {
|
||||||
@@ -95,7 +93,6 @@ updatePosition(
|
|||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
props.resizeObserver.observe(nodeElement.value)
|
props.resizeObserver.observe(nodeElement.value)
|
||||||
nodeEmits('ready')
|
|
||||||
})
|
})
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
|
|||||||
@@ -18,12 +18,32 @@ const connectable = (c?: HandleConnectable) => (typeof c === 'undefined' ? nodes
|
|||||||
const resizeObserver = ref<ResizeObserver>()
|
const resizeObserver = ref<ResizeObserver>()
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
const readyNodes = []
|
||||||
|
let initialized = false
|
||||||
|
|
||||||
|
const isReady = (id: string) => {
|
||||||
|
readyNodes.push(id)
|
||||||
|
|
||||||
|
if (readyNodes.length === getNodes.length) {
|
||||||
|
nextTick(() => {
|
||||||
|
initialized = true
|
||||||
|
emits.nodesInitialized()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
resizeObserver.value = new ResizeObserver((entries) => {
|
resizeObserver.value = new ResizeObserver((entries) => {
|
||||||
const updates = entries.map((entry: ResizeObserverEntry) => ({
|
const updates = entries.map((entry: ResizeObserverEntry) => {
|
||||||
id: entry.target.getAttribute('data-id') as string,
|
const id = entry.target.getAttribute('data-id') as string
|
||||||
nodeElement: entry.target as HTMLDivElement,
|
// if nodes initialized hasn't been emitted yet, add the node to the readyNodes array
|
||||||
forceUpdate: true,
|
if (!initialized) isReady(id)
|
||||||
}))
|
|
||||||
|
return {
|
||||||
|
id,
|
||||||
|
nodeElement: entry.target as HTMLDivElement,
|
||||||
|
forceUpdate: true,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
updateNodeDimensions(updates)
|
updateNodeDimensions(updates)
|
||||||
})
|
})
|
||||||
@@ -54,14 +74,6 @@ 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">
|
||||||
@@ -84,7 +96,6 @@ 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>
|
||||||
|
|||||||
Reference in New Issue
Block a user