Skip to content

Commit c5f192d

Browse files
committed
feat(Masonry): [tower] fixed iteration through nested and stacked children in a tower
1 parent 5a240a5 commit c5f192d

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

modules/masonry/playground/pages/workspace/WorkspaceCanvas.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,12 +259,18 @@ export default function WorkspaceCanvas(): JSX.Element {
259259
tower.addNestedBrick(nestedCompound.uuid, nestedChild, { x: 0, y: 0 });
260260

261261
const nestedChild2 = createSimpleBrick({ label: 'Nested Simple' });
262-
tower.addNestedBrick(nestedCompound.uuid, nestedChild2, { x: 0, y: 0 });
262+
tower.addBrick(nestedChild.uuid, nestedChild2, { x: 0, y: 0 });
263+
264+
const nestedChild3 = createSimpleBrick({ label: 'Nested Simple' });
265+
tower.addBrick(nestedChild2.uuid, nestedChild3, { x: 0, y: 0 });
263266

264267
// Add a simple nested brick directly to root
265268
const simpleNested = createSimpleBrick({ label: 'Simple Nested' });
266269
tower.addBrick(nestedCompound.uuid, simpleNested, { x: 0, y: 0 });
267270

271+
const simpleNested2 = createSimpleBrick({ label: 'Simple Nested' });
272+
tower.addBrick(simpleNested.uuid, simpleNested2, { x: 0, y: 0 });
273+
268274
// Add stacked bricks
269275
let lastUuid = root.uuid;
270276
for (let i = 1; i <= 2; i++) {

modules/masonry/src/tower/utils/towerUtils.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,22 +79,11 @@ export function calculateNestedAreaDimensions(
7979
let totalNestedHeight = 0;
8080
let totalNestedWidth = 0;
8181

82-
// Recursively process all nested children and their descendants
83-
const processNestedChain = (nodeId: string) => {
84-
const node = allNodes.get(nodeId);
85-
if (!node) return;
86-
87-
const { h, w } = calculateCompleteSubtreeDimensions(nodeId, allNodes, memoMap);
82+
// Process only nested children and their full subtrees
83+
children.nested.forEach(nestedChild => {
84+
const { h, w } = calculateCompleteSubtreeDimensions(nestedChild.brick.uuid, allNodes, memoMap);
8885
totalNestedHeight += h;
8986
totalNestedWidth = Math.max(totalNestedWidth, w);
90-
91-
const childChildren = getNodeChildren(nodeId, allNodes);
92-
childChildren.nested.forEach(child => processNestedChain(child.brick.uuid));
93-
childChildren.stacked.forEach(child => processNestedChain(child.brick.uuid)); // Include stacked chains as part of nested area
94-
};
95-
96-
children.nested.forEach(nestedChild => {
97-
processNestedChain(nestedChild.brick.uuid);
9887
});
9988

10089
const result = { w: totalNestedWidth, h: totalNestedHeight };
@@ -245,6 +234,17 @@ export function debugBoundingBoxCalculation(
245234
console.log(` Original: ${childOriginal.w}×${childOriginal.h}`);
246235
console.log(` Calculated: ${childBB?.w || 0}×${childBB?.h || 0}`);
247236
});
237+
238+
// Additional debug for stacked children affecting nested area
239+
console.log(` Stacked children affecting nested area:`);
240+
children.stacked.forEach((child, index) => {
241+
const childBB = bbMap.get(child.brick.uuid);
242+
const childLabel = child.brick.name || child.brick.type || 'Unknown';
243+
const childOriginal = child.brick.boundingBox;
244+
console.log(` ${index + 1}. "${childLabel}":`);
245+
console.log(` Original: ${childOriginal.w}×${childOriginal.h}`);
246+
console.log(` Calculated: ${childBB?.w || 0}×${childBB?.h || 0}`);
247+
});
248248
});
249249

250250
console.log('\n=== END DETAILED DEBUG ===\n');

0 commit comments

Comments
 (0)