From 0c6d8409c77246529dd68bf336b04a329ea923d4 Mon Sep 17 00:00:00 2001 From: Samir Boulahtit Date: Mon, 30 Mar 2026 20:27:47 +0200 Subject: [PATCH] fix(tenancy): fix table column alignment with flattened row approach The nested tbody approach caused browsers to collapse all cells into one column. Replaced with a single flat x-for loop over flattenedRows (computed property that interleaves member rows and store sub-rows). Each row is a single with 4 proper cells, using x-if to conditionally render member-level or store-level content per column. Sub-rows are hidden/shown via expandedMembers array. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../static/merchant/js/merchant-team.js | 15 ++ .../templates/tenancy/merchant/team.html | 245 ++++++++---------- 2 files changed, 128 insertions(+), 132 deletions(-) diff --git a/app/modules/tenancy/static/merchant/js/merchant-team.js b/app/modules/tenancy/static/merchant/js/merchant-team.js index f02176fa..b7db4dd5 100644 --- a/app/modules/tenancy/static/merchant/js/merchant-team.js +++ b/app/modules/tenancy/static/merchant/js/merchant-team.js @@ -131,6 +131,21 @@ function merchantTeam() { ); }, + /** + * Flatten members + their stores into a single row list for table rendering. + * Each row is either {type:'member', member, key} or {type:'store', member, store, key} + */ + get flattenedRows() { + const rows = []; + for (const member of this.filteredMembers) { + rows.push({ type: 'member', member, key: `m-${member.user_id}` }); + for (const store of member.stores) { + rows.push({ type: 'store', member, store, key: `s-${member.user_id}-${store.store_id}` }); + } + } + return rows; + }, + /** * Toggle expand/collapse for a member's store rows */ diff --git a/app/modules/tenancy/templates/tenancy/merchant/team.html b/app/modules/tenancy/templates/tenancy/merchant/team.html index b5c61c8c..cfed7e6f 100644 --- a/app/modules/tenancy/templates/tenancy/merchant/team.html +++ b/app/modules/tenancy/templates/tenancy/merchant/team.html @@ -87,157 +87,138 @@ -