From f05ef2df948cf3855debf139b56d94dd9fbed5e9 Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 20 May 2026 23:32:47 +0200 Subject: [PATCH] feat(sharing): sort team members by display name in UI and by ID in API (#2784) --- frontend/src/views/teams/EditTeam.vue | 9 ++++++++- pkg/models/teams.go | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/frontend/src/views/teams/EditTeam.vue b/frontend/src/views/teams/EditTeam.vue index f1079f9df..b1174f463 100644 --- a/frontend/src/views/teams/EditTeam.vue +++ b/frontend/src/views/teams/EditTeam.vue @@ -113,7 +113,7 @@
@@ -243,6 +243,7 @@ import FormField from '@/components/input/FormField.vue' import Multiselect from '@/components/input/Multiselect.vue' import User from '@/components/misc/User.vue' +import {getDisplayName} from '@/models/user' import TeamService from '@/services/team' import TeamMemberService from '@/services/teamMember' import UserService from '@/services/user' @@ -273,6 +274,12 @@ const userIsAdmin = computed(() => { }) const userInfo = computed(() => authStore.info) +const sortedMembers = computed(() => { + return [...(team.value?.members ?? [])].sort((a, b) => + getDisplayName(a).localeCompare(getDisplayName(b), undefined, {sensitivity: 'base'}), + ) +}) + const teamService = ref(new TeamService()) const teamMemberService = ref(new TeamMemberService()) const userService = ref(new UserService()) diff --git a/pkg/models/teams.go b/pkg/models/teams.go index 719459569..1ed143590 100644 --- a/pkg/models/teams.go +++ b/pkg/models/teams.go @@ -17,6 +17,7 @@ package models import ( + "sort" "time" "code.vikunja.io/api/pkg/config" @@ -178,6 +179,9 @@ func addMoreInfoToTeams(s *xorm.Session, teams []*Team) (err error) { if teamUser, has := users[team.CreatedByID]; has { team.CreatedBy = &teamUser.User } + sort.Slice(team.Members, func(i, j int) bool { + return team.Members[i].ID < team.Members[j].ID + }) } return }