import Link from "next/link"; import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight, Search, } from "lucide-react"; import { ExtensionRequestsTable } from "@/components/data-table/extension-requests-table"; import { AutoSubmitSelect } from "@/components/forms/auto-submit-select"; import { Button, buttonVariants } from "@/components/ui/button"; import { REQUEST_STATUS_LABELS, REQUEST_STATUSES } from "@/lib/constants"; import { getExtensionRequests, type RawSearchParams, } from "@/lib/extension-requests"; import { cn } from "@/lib/utils"; type ExtensionRequestsPageProps = { searchParams: Promise; }; const statusOptions = [ REQUEST_STATUSES.REQUESTED, REQUEST_STATUSES.CLOSED, REQUEST_STATUSES.APPLIED, ] as const; export default async function ExtensionRequestsPage({ searchParams, }: ExtensionRequestsPageProps) { const params = await searchParams; const result = await getExtensionRequests(params); const paginationItems = buildPaginationItems(result.page, result.totalPages); const firstVisiblePage = paginationItems[0] ?? 1; const lastVisiblePage = paginationItems.at(-1) ?? result.totalPages; const hasFirstPage = paginationItems.includes(1); const hasLastPage = paginationItems.includes(result.totalPages); const hasPreviousPageGroup = firstVisiblePage > 1; const hasNextPageGroup = lastVisiblePage < result.totalPages; return (

연장 신청

전체 {result.totalCount.toLocaleString()}건 중 {result.page} /{" "} {result.totalPages} 페이지

초기화

페이지당 {result.pageSize}개 표시

); } function buildPageHref(rawParams: RawSearchParams, page: number) { const params = new URLSearchParams(); Object.entries(rawParams).forEach(([key, value]) => { const firstValue = Array.isArray(value) ? value[0] : value; if (firstValue && key !== "page") { params.set(key, firstValue); } }); params.set("page", String(Math.max(1, page))); return `/extension-requests?${params.toString()}`; } function buildPaginationItems(currentPage: number, totalPages: number) { const startPage = Math.max(1, currentPage - 2); const endPage = Math.min(totalPages, currentPage + 2); return Array.from( { length: endPage - startPage + 1 }, (_, index) => startPage + index ); }