import { keepPreviousData } from '@tanstack/react-query' import { useDebounce } from '@uidotdev/usehooks' import { Filter, Grid, List, Loader2, Plus, Search, X } from 'lucide-react' import Link from 'next/link' import { parseAsArrayOf, parseAsString, useQueryState } from 'nuqs' import { LOCAL_STORAGE_KEYS, useParams } from 'common' import { useOrgProjectsInfiniteQuery } from 'data/projects/org-projects-infinite-query' import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' import { PROJECT_STATUS } from 'lib/constants' import { Button, Checkbox_Shadcn_, Label_Shadcn_, PopoverContent_Shadcn_, PopoverTrigger_Shadcn_, Popover_Shadcn_, ToggleGroup, ToggleGroupItem, } from 'ui' import { Input } from 'ui-patterns/DataInputs/Input' interface HomePageActionsProps { slug?: string hideNewProject?: boolean showViewToggle?: boolean } export const HomePageActions = ({ slug: _slug, hideNewProject = false, showViewToggle = false, }: HomePageActionsProps) => { const { slug: urlSlug } = useParams() const projectCreationEnabled = useIsFeatureEnabled('projects:create') const slug = _slug ?? urlSlug const [search, setSearch] = useQueryState('search', parseAsString.withDefault('')) const debouncedSearch = useDebounce(search, 500) const [filterStatus, setFilterStatus] = useQueryState( 'status', parseAsArrayOf(parseAsString, ',').withDefault([]) ) const [viewMode, setViewMode] = useLocalStorageQuery(LOCAL_STORAGE_KEYS.PROJECTS_VIEW, 'grid') const { isFetching: isFetchingProjects } = useOrgProjectsInfiniteQuery( { slug, search: search.length === 0 ? search : debouncedSearch, statuses: filterStatus, }, { placeholderData: keepPreviousData } ) return (
Filter projects by status