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 && (
+
+ )}
+
-