From e0d2fccf508d3cae8bf398c2b8b59873628b3e53 Mon Sep 17 00:00:00 2001 From: BOHA Date: Sat, 6 Jun 2026 14:24:41 +0200 Subject: [PATCH] fix(projects): edit-page responsible picker shows only active users (keeps current assignee) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirror the create-modal fix on ProjectDetail: filter the 'Zodpovědná osoba' select to active users (already scoped to projects.view), but keep the project's currently-assigned user selectable even if inactive, labelled '(neaktivní)', so the saved value still shows. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/admin/pages/ProjectDetail.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/admin/pages/ProjectDetail.tsx b/src/admin/pages/ProjectDetail.tsx index cb06c9f..b2f6b71 100644 --- a/src/admin/pages/ProjectDetail.tsx +++ b/src/admin/pages/ProjectDetail.tsx @@ -81,10 +81,18 @@ export default function ProjectDetail() { const notes: ProjectNote[] = project?.project_notes || []; const { data: usersData } = useQuery(userListOptions("projects.view")); - const users: User[] = (usersData ?? []).map((u: ApiUser) => ({ - id: u.id, - name: `${u.first_name || ""} ${u.last_name || ""}`.trim() || u.username, - })); + // Only active users with projects.view — but keep the project's CURRENT + // assignee in the list even if they're now inactive, so the select still + // reflects the saved value (marked "(neaktivní)" so it's clear). + const assignedUserId = project?.responsible_user_id || ""; + const users: User[] = (usersData ?? []) + .filter((u: ApiUser) => u.is_active || String(u.id) === assignedUserId) + .map((u: ApiUser) => ({ + id: u.id, + name: + (`${u.first_name || ""} ${u.last_name || ""}`.trim() || u.username) + + (u.is_active ? "" : " (neaktivní)"), + })); // Reset form sync when navigating to a different project const formInitialized = useRef(false);