From 1bb07bd90cbcf0a5c2c9c09afd4380ea4654723f Mon Sep 17 00:00:00 2001 From: headlesdev Date: Sun, 18 May 2025 12:32:50 +0200 Subject: [PATCH] Pagination & working sites layout --- app/api/sites/get_all/route.ts | 9 ++++----- app/dashboard/sites/SitesPage.tsx | 33 +++++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/app/api/sites/get_all/route.ts b/app/api/sites/get_all/route.ts index a1adf96..0b4cbe0 100644 --- a/app/api/sites/get_all/route.ts +++ b/app/api/sites/get_all/route.ts @@ -3,25 +3,24 @@ import prisma from "@/app/prisma"; interface QueryParams { currentPage: number; - pageSize: number; itemPerPage: number; } export async function GET(request: NextRequest) { const { searchParams } = request.nextUrl; const currentPage = Number(searchParams.get("currentPage")) || 1; - const pageSize = Number(searchParams.get("pageSize")) || 10; - const itemPerPage = Number(searchParams.get("itemPerPage")) || 10; + const itemPerPage = Number(searchParams.get("itemPerPage")) || 1; - const skip = (currentPage - 1) * pageSize; + const skip = (currentPage - 1) * itemPerPage; const take = itemPerPage; + try { const sites = await prisma.site.findMany({ skip, take, }); const total = await prisma.site.count(); - return NextResponse.json({ sites, total, currentPage, pageSize, itemPerPage }, { status: 200 }); + return NextResponse.json({ sites, total, currentPage, itemPerPage }, { status: 200 }); } catch (error: any) { return NextResponse.json({ error: "Internal Server Error" }, { status: 500 }); } diff --git a/app/dashboard/sites/SitesPage.tsx b/app/dashboard/sites/SitesPage.tsx index 263c3e3..19072ea 100644 --- a/app/dashboard/sites/SitesPage.tsx +++ b/app/dashboard/sites/SitesPage.tsx @@ -14,11 +14,24 @@ interface SitesPageProps { export default function SitesPage({ username, name }: SitesPageProps) { const [sites, setSites] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [itemPerPage, setItemPerPage] = useState(5); + const [total, setTotal] = useState(0); + + const handlePageChange = (page: number) => { + setCurrentPage(page); + }; useEffect(() => { - axios.get('/api/sites/get_all').then((response) => { + axios.get('/api/sites/get_all', { + params: { + currentPage, + itemPerPage, + }, + }).then((response) => { setSites(response.data.sites); + setTotal(response.data.total); }); - }, []); + }, [currentPage, itemPerPage]); return ( - setItemPerPage(Number(e.target.value))}> - - + + -
+
{sites.map((site: any) => ( ))}
+ +
+
+ + + +
+
)