diff --git a/src/app/queries/projects.ts b/src/app/queries/projects.ts index 2033391..2682aa3 100644 --- a/src/app/queries/projects.ts +++ b/src/app/queries/projects.ts @@ -38,6 +38,7 @@ export function useProjects( yearId: string, kind?: 'project' | 'idea', group?: string, + category?: string, search?: string, hasVideo?: boolean, cursor?: string, @@ -48,11 +49,21 @@ export function useProjects( }); if (kind) query.set('kind', kind); if (group) query.set('group', group); + if (category) query.set('category', category); if (search) query.set('q', search); if (hasVideo) query.set('hasVideo', 'true'); if (cursor) query.set('cursor', cursor); return useQuery({ - queryKey: ['projects', yearId, kind, group, search, hasVideo, cursor ?? null], + queryKey: [ + 'projects', + yearId, + kind, + group, + category, + search, + hasVideo, + cursor ?? null, + ], queryFn: () => apiRequest(`/projects?${query}`), placeholderData: keepPreviousData, }); diff --git a/src/app/routes/ProjectsPage.tsx b/src/app/routes/ProjectsPage.tsx index 87ab73c..c68770c 100644 --- a/src/app/routes/ProjectsPage.tsx +++ b/src/app/routes/ProjectsPage.tsx @@ -38,6 +38,7 @@ export function ProjectsPage({isAdmin = false}: {isAdmin?: boolean}) { const [searchParams, setSearchParams] = useSearchParams(); const [kind, setKind] = useState<'project' | 'idea'>('project'); const group = searchParams.get('group') ?? ''; + const [category, setCategory] = useState(''); const [hasVideoOnly, setHasVideoOnly] = useState(false); const [searchInput, setSearchInput] = useState(''); const [search, setSearch] = useState(''); @@ -52,6 +53,7 @@ export function ProjectsPage({isAdmin = false}: {isAdmin?: boolean}) { yearId, kind, kind === 'project' ? group || undefined : undefined, + kind === 'project' ? category || undefined : undefined, search || undefined, kind === 'project' && hasVideoOnly ? true : undefined, cursor, @@ -217,6 +219,7 @@ export function ProjectsPage({isAdmin = false}: {isAdmin?: boolean}) { className={kind === 'idea' ? 'active' : ''} onClick={() => { setKind('idea'); + setCategory(''); setHasVideoOnly(false); resetPagination(); }} @@ -241,6 +244,25 @@ export function ProjectsPage({isAdmin = false}: {isAdmin?: boolean}) { )} + {kind === 'project' && ballot.data && ballot.data.categories.length > 0 && ( + + )} {kind === 'project' && (