refactor(core): call fitViewOnInit when node dimensions are initially set
This commit is contained in:
@@ -199,10 +199,10 @@ const NodeWrapper = defineComponent({
|
|||||||
getClass.value,
|
getClass.value,
|
||||||
],
|
],
|
||||||
'style': {
|
'style': {
|
||||||
|
visibility: node.value.initialized ? 'visible' : 'hidden',
|
||||||
zIndex: node.value.computedPosition.z ?? zIndex(),
|
zIndex: node.value.computedPosition.z ?? zIndex(),
|
||||||
transform: `translate(${node.value.computedPosition.x}px,${node.value.computedPosition.y}px)`,
|
transform: `translate(${node.value.computedPosition.x}px,${node.value.computedPosition.y}px)`,
|
||||||
pointerEvents: props.selectable || props.draggable ? 'all' : 'none',
|
pointerEvents: props.selectable || props.draggable ? 'all' : 'none',
|
||||||
visibility: node.value.initialized ? 'visible' : 'hidden',
|
|
||||||
...getStyle.value,
|
...getStyle.value,
|
||||||
},
|
},
|
||||||
'tabIndex': props.focusable ? 0 : undefined,
|
'tabIndex': props.focusable ? 0 : undefined,
|
||||||
|
|||||||
@@ -9,24 +9,6 @@ export function useOnInitHandler() {
|
|||||||
(isInitialized) => {
|
(isInitialized) => {
|
||||||
if (isInitialized) {
|
if (isInitialized) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
// todo: call these when *nodes* are initialized instead of the viewport
|
|
||||||
// currently doesn't work quite right because the viewport dimensions are not yet available when the nodes are initialized
|
|
||||||
if (!vfInstance.fitViewOnInitDone.value && vfInstance.fitViewOnInit.value) {
|
|
||||||
vfInstance.fitView()
|
|
||||||
}
|
|
||||||
|
|
||||||
vfInstance.fitViewOnInitDone.value = true
|
|
||||||
|
|
||||||
// Here, we are making all nodes visible once we have the dimensions.
|
|
||||||
if (!document.querySelector('#vue-flow__initialized-styles')) {
|
|
||||||
const style = document.createElement('style')
|
|
||||||
style.id = 'vue-flow__initialized-styles'
|
|
||||||
document.head.appendChild(style)
|
|
||||||
|
|
||||||
const css = `.vue-flow__node { visibility: visible !important; }`
|
|
||||||
style.appendChild(document.createTextNode(css))
|
|
||||||
}
|
|
||||||
|
|
||||||
vfInstance.emits.init(vfInstance)
|
vfInstance.emits.init(vfInstance)
|
||||||
vfInstance.emits.paneReady(vfInstance)
|
vfInstance.emits.paneReady(vfInstance)
|
||||||
}, 1)
|
}, 1)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { zoomIdentity } from 'd3-zoom'
|
import { zoomIdentity } from 'd3-zoom'
|
||||||
import type { ComputedRef } from 'vue'
|
import type { ComputedRef } from 'vue'
|
||||||
|
import { nextTick } from 'vue'
|
||||||
import { until } from '@vueuse/core'
|
import { until } from '@vueuse/core'
|
||||||
import type {
|
import type {
|
||||||
Actions,
|
Actions,
|
||||||
@@ -180,6 +181,13 @@ export function useActions(
|
|||||||
return res
|
return res
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
|
if (!state.fitViewOnInitDone && state.fitViewOnInit) {
|
||||||
|
nextTick(() => {
|
||||||
|
viewportHelper.value.fitView()
|
||||||
|
state.fitViewOnInitDone = true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
if (changes.length) {
|
if (changes.length) {
|
||||||
state.hooks.nodesChange.trigger(changes)
|
state.hooks.nodesChange.trigger(changes)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user