// Server component instead of client component import { Search } from "lucide-react" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { NovelCard } from "@/components/novel-card" import { prisma } from "@/lib/prisma" export default async function SearchPage({ searchParams, }: { searchParams: Promise<{ [key: string]: string | undefined }> }) { const resolvedParams = await searchParams const q = resolvedParams.q || "" const sortBy = resolvedParams.sort || "latest" const genreFilter = resolvedParams.genreFilter || "all" const statusFilter = resolvedParams.statusFilter || "all" // Build where clause let where: any = {} if (q) { where.OR = [ { title: { contains: q, mode: "insensitive" } }, { authorName: { contains: q, mode: "insensitive" } }, ] } if (genreFilter !== "all") { where.genres = { some: { genre: { slug: genreFilter } } } } if (statusFilter !== "all") { where.status = statusFilter } // Build order clause let orderBy: any = {} switch (sortBy) { case "popular": orderBy = { views: "desc" } break case "rating": orderBy = { rating: "desc" } break case "name": orderBy = { title: "asc" } break case "latest": default: orderBy = { updatedAt: "desc" } } const filteredNovels = await prisma.novel.findMany({ where, orderBy, }) const genres = await prisma.genre.findMany() return (

Tìm Kiếm Truyện

{/* Search and Filters - This requires a client component wrapper ideally, but for now we can rely on standard form submissions to update searchParams */}
{/* Results */}

{filteredNovels.length} kết quả

{filteredNovels.length === 0 ? (

Không tìm thấy truyện

Thử tìm kiếm với từ khóa khác hoặc thay đổi bộ lọc.

) : (
{filteredNovels.map((novel) => ( ))}
)}
) }