fix(wcc-sidebar): sort sidebar items alphabetically and unify grouped and ungrouped items for consistent ordering
This commit is contained in:
@@ -647,27 +647,43 @@ export class WccSidebar extends DeesElement {
|
||||
groupedItems.get(group)!.push(entry);
|
||||
}
|
||||
|
||||
const result: TemplateResult[] = [];
|
||||
// Build a unified list of render items (ungrouped elements and groups)
|
||||
// Each item has a sortKey (element name or first element name of group)
|
||||
type RenderItem =
|
||||
| { type: 'element'; entry: [string, any]; sortKey: string }
|
||||
| { type: 'group'; groupName: string; items: Array<[string, any]>; sortKey: string };
|
||||
|
||||
// Render ungrouped items first
|
||||
const renderItems: RenderItem[] = [];
|
||||
|
||||
// Add ungrouped items
|
||||
const ungrouped = groupedItems.get(null) || [];
|
||||
for (const entry of ungrouped) {
|
||||
result.push(this.renderElementItem(entry, section));
|
||||
renderItems.push({ type: 'element', entry, sortKey: entry[0].toLowerCase() });
|
||||
}
|
||||
|
||||
// Render grouped items
|
||||
// Add groups (sorted by their first element's name)
|
||||
for (const [groupName, items] of groupedItems) {
|
||||
if (groupName === null) continue;
|
||||
|
||||
result.push(html`
|
||||
<div class="item-group">
|
||||
<span class="item-group-legend">${groupName}</span>
|
||||
${items.map((entry) => this.renderElementItem(entry, section))}
|
||||
</div>
|
||||
`);
|
||||
const firstElementName = items[0]?.[0] || '';
|
||||
renderItems.push({ type: 'group', groupName, items, sortKey: firstElementName.toLowerCase() });
|
||||
}
|
||||
|
||||
return result;
|
||||
// Sort all items alphabetically by sortKey
|
||||
renderItems.sort((a, b) => a.sortKey.localeCompare(b.sortKey));
|
||||
|
||||
// Render in sorted order
|
||||
return renderItems.map((item) => {
|
||||
if (item.type === 'element') {
|
||||
return this.renderElementItem(item.entry, section);
|
||||
} else {
|
||||
return html`
|
||||
<div class="item-group">
|
||||
<span class="item-group-legend">${item.groupName}</span>
|
||||
${item.items.map((entry) => this.renderElementItem(entry, section))}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user