"use client"; import { api } from "~/trpc/react"; import { useUrlState } from "~/hooks/useUrlState"; import { Button } from "@usesend/ui/src/button"; import Spinner from "@usesend/ui/src/spinner"; import { CampaignStatus } from "@prisma/client"; import { Select, SelectTrigger, SelectContent, SelectItem, } from "@usesend/ui/src/select"; import { Input } from "@usesend/ui/src/input"; import { Search } from "lucide-react"; import { useDebouncedCallback } from "use-debounce"; import CampaignCard from "./campaign-card"; export default function CampaignList() { const [page, setPage] = useUrlState("page", "1"); const [status, setStatus] = useUrlState("status"); const [searchTerm, setSearchTerm] = useUrlState("search"); const [search, setSearch] = useUrlState("search"); const debouncedSearch = useDebouncedCallback((value: string) => { setSearch(value); }, 1000); const onSearch = (value: string) => { setSearchTerm(value); debouncedSearch(value); }; const pageNumber = Number(page); const campaignsQuery = api.campaign.getCampaigns.useQuery( { page: pageNumber, status: status as CampaignStatus | null, search, }, { refetchInterval: (query) => { const c = query.state.data?.campaigns; if (!c) return false; const shouldPoll = c.some( (campaign) => campaign.status === CampaignStatus.RUNNING || campaign.status === CampaignStatus.SCHEDULED ); return shouldPoll ? 5000 : false; }, } ); return (