From ee033e50445016133e996fe9eb45de4986e1b327 Mon Sep 17 00:00:00 2001 From: Xisheng-Zhao Date: Fri, 19 Jun 2026 19:47:51 +0800 Subject: [PATCH] Show squads first in issue assignee picker --- .../ai/multica/app/ComposePilotActivity.kt | 14 +++++++++-- app/src/main/java/ai/multica/app/Models.java | 25 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/ai/multica/app/ComposePilotActivity.kt b/app/src/main/java/ai/multica/app/ComposePilotActivity.kt index ff3ce5f..7ad688b 100644 --- a/app/src/main/java/ai/multica/app/ComposePilotActivity.kt +++ b/app/src/main/java/ai/multica/app/ComposePilotActivity.kt @@ -453,6 +453,17 @@ private fun pilotMentionOptions( .map { PilotMentionOption(it.id, it.type, it.name) } } +private fun pilotIssueFormAssigneeOptions( + emptyLabel: String, + currentUser: Models.User?, + members: List, + agents: List, + squads: List, +): List { + return Models.issueFormAssigneeOptions(emptyLabel, currentUser, members, agents, squads) + .map { PilotMentionOption(it.id, it.type, it.name) } +} + private fun pilotMentionTypeLabel(type: String?, zh: Boolean): String = when (type) { "member" -> if (zh) "人" else "Person" "agent" -> "Agent" @@ -6877,8 +6888,7 @@ private fun PilotIssueForm( ) else -> { val options = loaded.getOrThrow() - val assignees = pilotMentionOptions( - true, + val assignees = pilotIssueFormAssigneeOptions( if (zh) "未分配" else "Unassigned", session.user, options.members, diff --git a/app/src/main/java/ai/multica/app/Models.java b/app/src/main/java/ai/multica/app/Models.java index a8b7e88..fa7f23d 100644 --- a/app/src/main/java/ai/multica/app/Models.java +++ b/app/src/main/java/ai/multica/app/Models.java @@ -230,6 +230,31 @@ final class Models { return list; } + static List issueFormAssigneeOptions(String emptyLabel, User currentUser, + List members, List agents, List squads) { + List list = new ArrayList<>(); + list.add(new Assignee(null, null, emptyLabel)); + for (Squad squad : squads) { + if (squad.id == null || squad.id.isEmpty()) continue; + list.add(new Assignee(squad.id, "squad", squad.name)); + } + for (Agent agent : agents) { + if (agent.id == null || agent.id.isEmpty()) continue; + list.add(new Assignee(agent.id, "agent", agent.name)); + } + List seenMemberIds = new ArrayList<>(); + if (currentUser != null && currentUser.id != null && !currentUser.id.isEmpty()) { + list.add(new Assignee(currentUser.id, "member", currentUser.name)); + seenMemberIds.add(currentUser.id); + } + for (Member member : members) { + if (member.id == null || member.id.isEmpty() || seenMemberIds.contains(member.id)) continue; + list.add(new Assignee(member.id, "member", member.displayName)); + seenMemberIds.add(member.id); + } + return list; + } + static final class Page { final List items; final boolean hasMore;