From 008a10502b1835a7c47748a8826d8fc2aae62892 Mon Sep 17 00:00:00 2001 From: Christian Vidal Wolf Date: Thu, 14 May 2026 20:15:34 +0200 Subject: [PATCH] feat(history): add user filter dropdown --- src/components/HistoryView.tsx | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/components/HistoryView.tsx b/src/components/HistoryView.tsx index 5b40d71..6416bea 100644 --- a/src/components/HistoryView.tsx +++ b/src/components/HistoryView.tsx @@ -19,6 +19,7 @@ export function HistoryView({ headers, data, onRevert, onEdit }: HistoryViewProp const [loading, setLoading] = useState(true); const [expandedId, setExpandedId] = useState(null); const [search, setSearch] = usePersistentState('history-search', ''); + const [userFilter, setUserFilter] = usePersistentState('history-userFilter', ''); const [isFullscreen, setIsFullscreen] = useState(false); useEffect(() => { @@ -79,10 +80,12 @@ export function HistoryView({ headers, data, onRevert, onEdit }: HistoryViewProp }).format(date); }; + const uniqueUsers = Array.from(new Set(history.map(e => e.changed_by))).sort(); + const filteredHistory = history.filter(entry => { + if (userFilter && entry.changed_by !== userFilter) return false; const terms = search.toLowerCase().split(/\s+/).filter(Boolean); if (terms.length === 0) return true; - const searchableText = `${entry.article_name} ${entry.product_id} ${entry.changed_by}`.toLowerCase(); return terms.every(term => searchableText.includes(term)); }); @@ -119,9 +122,33 @@ export function HistoryView({ headers, data, onRevert, onEdit }: HistoryViewProp

+
+ + + {userFilter && ( + + )} +
-