From 60f0069e00aa8e11a8d7b2d480898d083e74eb74 Mon Sep 17 00:00:00 2001 From: Madhura68 Date: Wed, 29 Apr 2026 17:28:40 +0200 Subject: [PATCH] feat(ST-1109.11): persist backlog filters in localStorage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Filters reset op reload was verwarrend. Nu net als sortMode: - scrum4me:pbi_filter_priority — 'all' | '1' | '2' | '3' | '4' - scrum4me:pbi_filter_status — 'all' | 'ready' | 'blocked' | 'done' useState-init met SSR-guard; ongeldige waarden vallen terug op 'all'. Wis filters reset alle drie de keys correct (sortMode -> 'priority', beide filters -> 'all'), waardoor de localStorage-staat consistent wordt. Co-Authored-By: Claude Opus 4.7 (1M context) --- components/backlog/pbi-list.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/components/backlog/pbi-list.tsx b/components/backlog/pbi-list.tsx index 538dcaa..9586fd8 100644 --- a/components/backlog/pbi-list.tsx +++ b/components/backlog/pbi-list.tsx @@ -190,8 +190,18 @@ function SortablePbiRow({ export function PbiList({ productId, pbis, isDemo }: PbiListProps) { const { selectedPbiId, selectPbi } = useSelectionStore() const { pbiOrder, pbiPriority, initPbis, reorderPbis, rollbackPbis, updatePbiPriority } = usePlannerStore() - const [filterPriority, setFilterPriority] = useState('all') - const [filterStatus, setFilterStatus] = useState('all') + const [filterPriority, setFilterPriority] = useState(() => { + if (typeof window === 'undefined') return 'all' + const saved = localStorage.getItem('scrum4me:pbi_filter_priority') + if (!saved || saved === 'all') return 'all' + const n = parseInt(saved, 10) + return Number.isInteger(n) && n >= 1 && n <= 4 ? n : 'all' + }) + const [filterStatus, setFilterStatus] = useState(() => { + if (typeof window === 'undefined') return 'all' + const saved = localStorage.getItem('scrum4me:pbi_filter_status') + return saved === 'ready' || saved === 'blocked' || saved === 'done' ? saved : 'all' + }) const [sortMode, setSortMode] = useState(() => { const saved = typeof window !== 'undefined' ? localStorage.getItem('scrum4me:pbi_sort') : null return (saved === 'priority' || saved === 'code' || saved === 'date') ? saved : 'priority' @@ -201,6 +211,8 @@ export function PbiList({ productId, pbis, isDemo }: PbiListProps) { const [, startTransition] = useTransition() useEffect(() => { localStorage.setItem('scrum4me:pbi_sort', sortMode) }, [sortMode]) + useEffect(() => { localStorage.setItem('scrum4me:pbi_filter_priority', String(filterPriority)) }, [filterPriority]) + useEffect(() => { localStorage.setItem('scrum4me:pbi_filter_status', filterStatus) }, [filterStatus]) // Sync server data into store — use stable string dep to avoid infinite loop const pbiIdKey = pbis.map(p => p.id).join(',')