diff --git a/frontend/src/views/ScheduleView.vue b/frontend/src/views/ScheduleView.vue index 82fb440e..d45e347e 100644 --- a/frontend/src/views/ScheduleView.vue +++ b/frontend/src/views/ScheduleView.vue @@ -903,7 +903,7 @@ export default { const eligibleMemberIds = match.isFriendly ? [] : await this.getEligibleMemberIdsForSelectedTeam(lineupHalf); const activeMembers = match.isFriendly ? allMembers : allMembers.filter(member => member.active); const allowedIds = new Set( - [...eligibleMemberIds, ...preselectedIds] + [...eligibleMemberIds] .map((id) => Number(id)) .filter((id) => Number.isFinite(id)) ); @@ -911,7 +911,18 @@ export default { ? activeMembers.filter((member) => allowedIds.has(Number(member.id))) : activeMembers; - this.playerSelectionDialog.members = visibleMembers.map(m => ({ + // Sort members alphabetically by firstName then lastName (case-insensitive) + const sortedVisibleMembers = (visibleMembers || []).slice().sort((a, b) => { + const fa = (a.firstName || '').toString().toLowerCase(); + const fb = (b.firstName || '').toString().toLowerCase(); + if (fa < fb) return -1; + if (fa > fb) return 1; + const la = (a.lastName || '').toString().toLowerCase(); + const lb = (b.lastName || '').toString().toLowerCase(); + return la.localeCompare(lb); + }); + + this.playerSelectionDialog.members = sortedVisibleMembers.map(m => ({ ...m, isReady: readyIds.includes(m.id) || false, isPlanned: plannedIds.includes(m.id) || false, @@ -1172,7 +1183,17 @@ export default { }, async loadFriendlyMembers() { const response = await apiClient.get(`/friendly-matches/${this.currentClub}/members/list`); - this.friendlyMatchDialog.members = response.data || []; + const members = response.data || []; + // Sort members alphabetically by firstName then lastName + this.friendlyMatchDialog.members = members.slice().sort((a, b) => { + const fa = (a.firstName || '').toString().toLowerCase(); + const fb = (b.firstName || '').toString().toLowerCase(); + if (fa < fb) return -1; + if (fa > fb) return 1; + const la = (a.lastName || '').toString().toLowerCase(); + const lb = (b.lastName || '').toString().toLowerCase(); + return la.localeCompare(lb); + }); }, async openFriendlyMatchDialog(match = null) { await this.loadFriendlyMembers(); diff --git a/mobile-app/composeApp/release/composeApp-release.aab b/mobile-app/composeApp/release/composeApp-release.aab index f617e702..275fa63b 100644 Binary files a/mobile-app/composeApp/release/composeApp-release.aab and b/mobile-app/composeApp/release/composeApp-release.aab differ