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:
braks
2023-01-18 20:47:32 +01:00
committed by Braks
parent 203b4815f8
commit f0fde0ac96
2 changed files with 10 additions and 13 deletions
@@ -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)
+8 -2
View File
@@ -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)
}
} }
} }