feat(ST-1109.11): persist backlog filters in localStorage
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) <noreply@anthropic.com>
This commit is contained in:
parent
e632e043cf
commit
60f0069e00
1 changed files with 14 additions and 2 deletions
|
|
@ -190,8 +190,18 @@ function SortablePbiRow({
|
||||||
export function PbiList({ productId, pbis, isDemo }: PbiListProps) {
|
export function PbiList({ productId, pbis, isDemo }: PbiListProps) {
|
||||||
const { selectedPbiId, selectPbi } = useSelectionStore()
|
const { selectedPbiId, selectPbi } = useSelectionStore()
|
||||||
const { pbiOrder, pbiPriority, initPbis, reorderPbis, rollbackPbis, updatePbiPriority } = usePlannerStore()
|
const { pbiOrder, pbiPriority, initPbis, reorderPbis, rollbackPbis, updatePbiPriority } = usePlannerStore()
|
||||||
const [filterPriority, setFilterPriority] = useState<number | 'all'>('all')
|
const [filterPriority, setFilterPriority] = useState<number | 'all'>(() => {
|
||||||
const [filterStatus, setFilterStatus] = useState<PbiStatusApi | 'all'>('all')
|
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<PbiStatusApi | 'all'>(() => {
|
||||||
|
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<SortMode>(() => {
|
const [sortMode, setSortMode] = useState<SortMode>(() => {
|
||||||
const saved = typeof window !== 'undefined' ? localStorage.getItem('scrum4me:pbi_sort') : null
|
const saved = typeof window !== 'undefined' ? localStorage.getItem('scrum4me:pbi_sort') : null
|
||||||
return (saved === 'priority' || saved === 'code' || saved === 'date') ? saved : 'priority'
|
return (saved === 'priority' || saved === 'code' || saved === 'date') ? saved : 'priority'
|
||||||
|
|
@ -201,6 +211,8 @@ export function PbiList({ productId, pbis, isDemo }: PbiListProps) {
|
||||||
const [, startTransition] = useTransition()
|
const [, startTransition] = useTransition()
|
||||||
|
|
||||||
useEffect(() => { localStorage.setItem('scrum4me:pbi_sort', sortMode) }, [sortMode])
|
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
|
// Sync server data into store — use stable string dep to avoid infinite loop
|
||||||
const pbiIdKey = pbis.map(p => p.id).join(',')
|
const pbiIdKey = pbis.map(p => p.id).join(',')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue