refactor(core): wait for next tick to expand parent if parent is not initialized yet
Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
@@ -141,18 +141,13 @@ watch(
|
|||||||
watch([() => node.extent, () => nodeExtent], ([nodeExtent, globalExtent], [oldNodeExtent, oldGlobalExtent]) => {
|
watch([() => node.extent, () => nodeExtent], ([nodeExtent, globalExtent], [oldNodeExtent, oldGlobalExtent]) => {
|
||||||
// update position if extent has actually changed
|
// update position if extent has actually changed
|
||||||
if (nodeExtent !== oldNodeExtent || globalExtent !== oldGlobalExtent) {
|
if (nodeExtent !== oldNodeExtent || globalExtent !== oldGlobalExtent) {
|
||||||
if (isParentExtent()) {
|
clampPosition()
|
||||||
// todo: can we solve this without a timeout? Without the timeout the initial extent is not properly calculated
|
|
||||||
setTimeout(clampPosition, 1)
|
|
||||||
} else {
|
|
||||||
clampPosition()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// clamp initial position to nodes' extent
|
// clamp initial position to nodes' extent
|
||||||
// if extent is parent, we need dimensions to properly clamp the position
|
// if extent is parent, we need dimensions to properly clamp the position
|
||||||
if (isParentExtent()) {
|
if (node.extent === 'parent' || (typeof node.extent === 'object' && 'range' in node.extent && node.extent.range === 'parent')) {
|
||||||
until(() => node.initialized)
|
until(() => node.initialized)
|
||||||
.toBe(true)
|
.toBe(true)
|
||||||
.then(clampPosition)
|
.then(clampPosition)
|
||||||
@@ -162,10 +157,6 @@ else {
|
|||||||
clampPosition()
|
clampPosition()
|
||||||
}
|
}
|
||||||
|
|
||||||
function isParentExtent() {
|
|
||||||
return node.extent === 'parent' || (typeof node.extent === 'object' && 'range' in node.extent && node.extent.range === 'parent')
|
|
||||||
}
|
|
||||||
|
|
||||||
/** this re-calculates the current position, necessary for clamping by a node's extent */
|
/** this re-calculates the current position, necessary for clamping by a node's extent */
|
||||||
function clampPosition() {
|
function clampPosition() {
|
||||||
const { computedPosition, position } = calcNextPosition(node, node.computedPosition, nodeExtent, parentNode)
|
const { computedPosition, position } = calcNextPosition(node, node.computedPosition, nodeExtent, parentNode)
|
||||||
|
|||||||
@@ -160,13 +160,19 @@ export const applyChanges = <
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof currentChange.resizing === 'boolean') element.resizing = currentChange.resizing
|
if (typeof currentChange.resizing !== 'undefined') element.resizing = currentChange.resizing
|
||||||
|
|
||||||
if (element.expandParent && element.parentNode) {
|
if (element.expandParent && element.parentNode) {
|
||||||
const parent = elements[elementIds.indexOf(element.parentNode)]
|
const parent = elements[elementIds.indexOf(element.parentNode)]
|
||||||
|
|
||||||
if (parent && isGraphNode(parent)) {
|
if (parent && isGraphNode(parent)) {
|
||||||
handleParentExpand(element, parent)
|
if (!parent.initialized) {
|
||||||
|
nextTick(() => {
|
||||||
|
handleParentExpand(element, parent)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
handleParentExpand(element, parent)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user