import { keepPreviousData, useQuery } from '@tanstack/react-query'; import { createFileRoute, Link } from '@tanstack/react-router'; import { Building2Icon } from 'lucide-react'; import { parseAsString, useQueryState } from 'nuqs'; import { PageContainer } from '@/components/page-container'; import { PageHeader } from '@/components/page-header'; import { Badge } from '@/components/ui/badge'; import { Input } from '@/components/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { useSearchQueryState } from '@/hooks/use-search-query-state'; import { useTRPC } from '@/integrations/trpc/react'; import { formatDateTime } from '@/utils/date'; import { createProjectTitle } from '@/utils/title'; export const Route = createFileRoute('/_app/$organizationId/$projectId/groups')( { component: Component, head: () => ({ meta: [{ title: createProjectTitle('Groups') }], }), } ); function Component() { const { projectId, organizationId } = Route.useParams(); const trpc = useTRPC(); const { search, setSearch, debouncedSearch } = useSearchQueryState(); const [typeFilter, setTypeFilter] = useQueryState( 'type', parseAsString.withDefault('') ); const typesQuery = useQuery(trpc.group.types.queryOptions({ projectId })); const groupsQuery = useQuery( trpc.group.list.queryOptions( { projectId, search: debouncedSearch || undefined, type: typeFilter || undefined, take: 100, }, { placeholderData: keepPreviousData } ) ); const groups = groupsQuery.data?.data ?? []; const types = typesQuery.data ?? []; return (
setSearch(e.target.value)} placeholder="Search groups..." value={search} /> {types.length > 0 && ( )}
{groups.length === 0 ? (

No groups found

) : (
{groups.map((group) => ( ))}
Name ID Type Created
{group.name} {group.id} {group.type} {formatDateTime(new Date(group.createdAt))}
)}
); }