From 29f80b8cd981f430bb4ffa6edd94fff2dce3cfdd Mon Sep 17 00:00:00 2001 From: Varun Raj Date: Sat, 18 Jan 2025 14:07:13 +0530 Subject: [PATCH] feat: people search added Signed-off-by: Varun Raj --- src/components/people/PeopleFilters.tsx | 11 ++++++++++- src/handlers/api/people.handler.ts | 1 + src/pages/api/people/list.ts | 16 +++++++++------- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/components/people/PeopleFilters.tsx b/src/components/people/PeopleFilters.tsx index b73c705..66e8205 100644 --- a/src/components/people/PeopleFilters.tsx +++ b/src/components/people/PeopleFilters.tsx @@ -19,7 +19,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from ". export function PeopleFilters() { const router = useRouter(); - const { updateContext, page, maximumAssetCount, type = "all" } = usePeopleFilterContext(); + const { updateContext, page, maximumAssetCount, type = "all", query ="" } = usePeopleFilterContext(); const handleChange = (data: Partial) => { updateContext(data); @@ -40,6 +40,15 @@ export function PeopleFilters() { return (
+ { + handleChange({ query: e.target.value }); + }} + /> => { return API.get(LIST_PEOPLE_PATH, filters).then((response) => { diff --git a/src/pages/api/people/list.ts b/src/pages/api/people/list.ts index 62d9e59..4dabcd0 100644 --- a/src/pages/api/people/list.ts +++ b/src/pages/api/people/list.ts @@ -1,8 +1,6 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import { CHART_COLORS } from "@/config/constants/chart.constant"; import { db } from "@/config/db"; import { getCurrentUser } from "@/handlers/serverUtils/user.utils"; -import { stringToBoolean } from "@/helpers/data.helper"; import { assetFaces, assets, exif, person } from "@/schema"; import { and, @@ -11,6 +9,7 @@ import { desc, eq, gte, + ilike, isNotNull, isNull, lte, @@ -29,6 +28,7 @@ interface IQuery { maximumAssetCount: number; sort: ISortField; sortOrder: "asc" | "desc"; + query: string; } export default async function handler( req: NextApiRequest, @@ -42,6 +42,7 @@ export default async function handler( sort = "assetCount", sortOrder = "desc", type = "all", + query = "", } = req.query as any as IQuery; const currentUser = await getCurrentUser(req); @@ -53,10 +54,11 @@ export default async function handler( eq(assets.isVisible, true), eq(assets.isArchived, false), eq(assets.ownerId, currentUser.id), - type === "all" ? undefined : (type === "nameless" ? eq(person.name, "") : ne(person.name, "")) + type === "all" ? undefined : (type === "nameless" ? eq(person.name, "") : ne(person.name, "")), + query && query.length > 0 ? ilike(person.name, `%${query}%`) : undefined ); - let query = db + let dbQuery = db .select({ id: person.id, name: person.name, @@ -74,17 +76,17 @@ export default async function handler( let sortedQuery; if (sort === "assetCount") { - sortedQuery = query.orderBy( + sortedQuery = dbQuery.orderBy( sortOrder === "asc" ? asc(count(assetFaces.id)) : desc(count(assetFaces.id)) ); } else if (sort === "updatedAt") { - sortedQuery = query.orderBy( + sortedQuery = dbQuery.orderBy( sortOrder === "asc" ? asc(person.updatedAt) : desc(person.updatedAt) ); } - const people = await query.limit(perPage).offset((page - 1) * perPage); + const people = await dbQuery.limit(perPage).offset((page - 1) * perPage); return res.status(200).json({ people,