import { Metadata } from "next"; import Link from "next/link"; import { getUser } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { LogoutButton } from "@/components/auth/logout-button"; import { ContactsList } from "@/components/contacts/contacts-list"; export const metadata: Metadata = { title: "Contacts - Stones Database", description: "Manage contacts in the Stones Database", }; interface ContactsPageProps { searchParams: { [key: string]: string | string[] | undefined }; } export default async function ContactsPage({ searchParams }: ContactsPageProps) { const user = await getUser(); const page = Number(searchParams.page) || 1; const search = typeof searchParams.search === 'string' ? searchParams.search : ''; const limit = 25; const skip = (page - 1) * limit; // Get contacts with pagination and search const contacts = await prisma.contact.findMany({ where: { OR: [ { name: { contains: search, mode: 'insensitive' } }, { ensName: { contains: search, mode: 'insensitive' } }, { ethereumAddress: { contains: search, mode: 'insensitive' } }, { email: { contains: search, mode: 'insensitive' } }, { twitter: { contains: search, mode: 'insensitive' } }, { discord: { contains: search, mode: 'insensitive' } }, ], }, skip, take: limit, orderBy: { createdAt: "desc", }, include: { nftHoldings: { take: 1, }, daoMemberships: { take: 1, }, }, }); // Get total count for pagination with search const totalContacts = await prisma.contact.count({ where: { OR: [ { name: { contains: search, mode: 'insensitive' } }, { ensName: { contains: search, mode: 'insensitive' } }, { ethereumAddress: { contains: search, mode: 'insensitive' } }, { email: { contains: search, mode: 'insensitive' } }, { twitter: { contains: search, mode: 'insensitive' } }, { discord: { contains: search, mode: 'insensitive' } }, ], }, }); const totalPages = Math.ceil(totalContacts / limit); return (