From 8b0d9efebbcf4efd66214bedcabe50a065dee4f8 Mon Sep 17 00:00:00 2001 From: Chris Kehayias Date: Mon, 20 Apr 2026 15:26:08 -0400 Subject: [PATCH] fix(field-management): sort groups by name on load Groups were previously ordered by the minimum View_Order of their fields, which made load order depend on field data rather than the group label itself. Switch to natural-alphabetical sort on the group name (numeric-aware via localeCompare) so prefixed groups like "2 - Contact" sort before "10 - Other". "99 - Other Fields" remains pinned last. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../field-management/use-field-order-state.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/components/field-management/use-field-order-state.ts b/src/components/field-management/use-field-order-state.ts index dc1441b..e198891 100644 --- a/src/components/field-management/use-field-order-state.ts +++ b/src/components/field-management/use-field-order-state.ts @@ -263,20 +263,15 @@ function initializeGroupOrder(fields: PageField[]): string[] { if (!hasGroups) return [FLAT_GROUP]; - // Group names sorted by the minimum View_Order of their fields - const groupMinOrder = new Map(); + const groupNames = new Set(); for (const field of fields) { - const groupName = field.Group_Name ?? OTHER_FIELDS_GROUP; - const current = groupMinOrder.get(groupName); - if (current === undefined || field.View_Order < current) { - groupMinOrder.set(groupName, field.View_Order); - } + groupNames.add(field.Group_Name ?? OTHER_FIELDS_GROUP); } - const order = [...groupMinOrder.keys()].sort((a, b) => { + const order = [...groupNames].sort((a, b) => { if (a === OTHER_FIELDS_GROUP) return 1; if (b === OTHER_FIELDS_GROUP) return -1; - return groupMinOrder.get(a)! - groupMinOrder.get(b)!; + return a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }); }); return order;