From 95e50c718d2fec23b89cf7acb98bf255912237b6 Mon Sep 17 00:00:00 2001 From: Jurgis Sakalauskas Date: Sat, 18 Oct 2025 10:59:19 +0300 Subject: [PATCH] Sort project items alphabetically with rejected last --- .../project-detail/project-items-section.tsx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/client/src/pages/project-detail/project-items-section.tsx b/client/src/pages/project-detail/project-items-section.tsx index 6bfc882..f509ad5 100644 --- a/client/src/pages/project-detail/project-items-section.tsx +++ b/client/src/pages/project-detail/project-items-section.tsx @@ -45,10 +45,21 @@ export function ProjectItemsSection({ const [showActiveOnly, setShowActiveOnly] = useState(false); const displayItems = useMemo(() => { - if (!showActiveOnly) { - return items; - } - return items.filter((item) => item.status === 'active'); + const filtered = showActiveOnly + ? items.filter((item) => item.status === 'active') + : items; + + const createDisplayName = (item: Item) => + item.manufacturer ? `${item.manufacturer} ${item.model}` : item.model; + + return [...filtered].sort((first, second) => { + if (first.status !== second.status) { + return first.status === 'active' ? -1 : 1; + } + return createDisplayName(first).localeCompare(createDisplayName(second), undefined, { + sensitivity: 'base' + }); + }); }, [items, showActiveOnly]); const mismatchedAttributes = useMemo(() => {