diff --git a/components/ideas/idea-list.tsx b/components/ideas/idea-list.tsx index 871d72d..a890170 100644 --- a/components/ideas/idea-list.tsx +++ b/components/ideas/idea-list.tsx @@ -12,6 +12,10 @@ import { useMemo, useState, useTransition } from 'react' import { useRouter } from 'next/navigation' import { Plus, ArrowUp, ArrowDown, ArrowUpDown } from 'lucide-react' import { toast } from 'sonner' +import { useShallow } from 'zustand/react/shallow' + +import { useUserSettingsStore } from '@/stores/user-settings/store' +import { IdeasFilterPopover } from '@/components/ideas/ideas-filter-popover' import { cn } from '@/lib/utils' import { Button } from '@/components/ui/button' @@ -122,7 +126,11 @@ export function IdeaList({ ideas, products, isDemo }: IdeaListProps) { // Filter state const [search, setSearch] = useState('') const [productFilter, setProductFilter] = useState('all') - const [statusFilter, setStatusFilter] = useState>(new Set()) + const filterStatuses = useUserSettingsStore(useShallow( + (s) => s.entities.settings.views?.ideasList?.filterStatuses ?? [])) + const setPref = useUserSettingsStore((s) => s.setPref) + const statusFilter = useMemo(() => new Set(filterStatuses), [filterStatuses]) + const [filterPopoverOpen, setFilterPopoverOpen] = useState(false) // Sort state const [sortKey, setSortKey] = useState('code') @@ -197,12 +205,14 @@ export function IdeaList({ ideas, products, isDemo }: IdeaListProps) { } function toggleStatus(s: IdeaStatusApi) { - setStatusFilter((prev) => { - const next = new Set(prev) - if (next.has(s)) next.delete(s) - else next.add(s) - return next - }) + const next = filterStatuses.includes(s) + ? filterStatuses.filter((v) => v !== s) + : [...filterStatuses, s] + void setPref(['views', 'ideasList', 'filterStatuses'], next) + } + + function clearStatusFilter() { + void setPref(['views', 'ideasList', 'filterStatuses'], []) } function handleCreate() { @@ -289,6 +299,15 @@ export function IdeaList({ ideas, products, isDemo }: IdeaListProps) { ))}
+
- {/* Status-chips als multi-select filter */} -
- {STATUS_FILTERS.map((s) => { - const active = statusFilter.has(s.value) - return ( - - ) - })} -
- {/* Snel idee form — geen product-dropdown */} {showQuick && (