From d224be07a24e6f593320ec9b1de8360977dffd16 Mon Sep 17 00:00:00 2001 From: KM Koushik Date: Mon, 3 Feb 2025 22:41:34 +1100 Subject: [PATCH] add contact search (#98) --- .../contacts/[contactBookId]/contact-list.tsx | 32 ++++++++++++++++--- apps/web/src/server/api/routers/contacts.ts | 10 ++++++ apps/web/src/utils/gravatar-utils.ts | 2 +- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/apps/web/src/app/(dashboard)/contacts/[contactBookId]/contact-list.tsx b/apps/web/src/app/(dashboard)/contacts/[contactBookId]/contact-list.tsx index 44f8c62..f91a5b5 100644 --- a/apps/web/src/app/(dashboard)/contacts/[contactBookId]/contact-list.tsx +++ b/apps/web/src/app/(dashboard)/contacts/[contactBookId]/contact-list.tsx @@ -23,7 +23,8 @@ import { api } from "~/trpc/react"; import { getGravatarUrl } from "~/utils/gravatar-utils"; import DeleteContact from "./delete-contact"; import EditContact from "./edit-contact"; - +import { Input } from "@unsend/ui/src/input"; +import { useDebouncedCallback } from "use-debounce"; export default function ContactList({ contactBookId, }: { @@ -31,12 +32,14 @@ export default function ContactList({ }) { const [page, setPage] = useUrlState("page", "1"); const [status, setStatus] = useUrlState("status"); + const [search, setSearch] = useUrlState("search"); const pageNumber = Number(page); const contactsQuery = api.contacts.contacts.useQuery({ contactBookId, page: pageNumber, + search: search ?? undefined, subscribed: status === "Subscribed" ? true @@ -45,9 +48,21 @@ export default function ContactList({ : undefined, }); + const debouncedSearch = useDebouncedCallback((value: string) => { + setSearch(value); + }, 1000); + return (
-
+
+
+ debouncedSearch(e.target.value)} + /> +