From 57fe139e6750f9a7afb8bfa10a134eec6f51e6b2 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Tue, 22 Sep 2026 14:44:17 +0200 Subject: [PATCH] feat(ScheduleView): maintain member order based on team line-up and fallback to alphabetical sorting --- frontend/src/views/ScheduleView.vue | 30 +++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/frontend/src/views/ScheduleView.vue b/frontend/src/views/ScheduleView.vue index 8d57b0e7..3de78619 100755 --- a/frontend/src/views/ScheduleView.vue +++ b/frontend/src/views/ScheduleView.vue @@ -1395,8 +1395,21 @@ export default { ? activeMembers.filter((member) => allowedIds.has(Number(member.id))) : activeMembers; - // Sort members alphabetically by firstName then lastName (case-insensitive) + // Keep the order defined in the team line-up. Members from lower teams + // (which are also eligible) follow afterwards in their own line-up order. + const lineupPositionByMemberId = new Map( + eligibleMemberIds.map((id, index) => [Number(id), index]) + ); const sortedVisibleMembers = (visibleMembers || []).slice().sort((a, b) => { + const positionA = lineupPositionByMemberId.get(Number(a.id)); + const positionB = lineupPositionByMemberId.get(Number(b.id)); + if (positionA != null || positionB != null) { + if (positionA == null) return 1; + if (positionB == null) return -1; + if (positionA !== positionB) return positionA - positionB; + } + + // Fall back to an alphabetical order for members without a line-up position. const fa = (a.firstName || '').toString().toLowerCase(); const fb = (b.firstName || '').toString().toLowerCase(); if (fa < fb) return -1; @@ -1453,11 +1466,16 @@ export default { })); const ids = new Set(); - lineupResponses.flat().forEach((assignment) => { - const memberId = Number(assignment?.memberId); - if (Number.isFinite(memberId)) { - ids.add(memberId); - } + lineupResponses.forEach((assignments) => { + assignments + .slice() + .sort((a, b) => Number(a?.position) - Number(b?.position)) + .forEach((assignment) => { + const memberId = Number(assignment?.memberId); + if (Number.isFinite(memberId)) { + ids.add(memberId); + } + }); }); return Array.from(ids); },