diff --git a/packages/common/business_components/src/ui/list_div/index.tsx b/packages/common/business_components/src/ui/list_div/index.tsx
index a096a4c04..2c437e1af 100644
--- a/packages/common/business_components/src/ui/list_div/index.tsx
+++ b/packages/common/business_components/src/ui/list_div/index.tsx
@@ -2,7 +2,7 @@
function ListDiv(props: {children: React.ReactNode}) {
return (
-
+
{props.children}
)
diff --git a/packages/common/business_components/src/ui/table/index.tsx b/packages/common/business_components/src/ui/table/index.tsx
index 10a1a5ef2..be40faaf6 100644
--- a/packages/common/business_components/src/ui/table/index.tsx
+++ b/packages/common/business_components/src/ui/table/index.tsx
@@ -1,14 +1,16 @@
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@common/components";
+import { useState } from "react";
import UiPageNations from "./uiPageNations";
type UiTableProps = {
headName: React.ReactNode | undefined;
- tableData: { [key: string]: string | number | boolean }[];
+ tableData: { [key: string]: string | number | boolean | object}[];
headlist: UiHeadProps[];
pageSize: number;
total: number;
children: React.ReactNode | undefined;
cellClick : ((index:number|undefined)=>void) | undefined;
+ onPageChange: (page: number) => void;
}
type UiHeadProps = {
@@ -16,9 +18,12 @@ type UiHeadProps = {
title: string;
}
-export function UiTable({ tableData, headlist, pageSize, total, children, headName, cellClick }: UiTableProps) {
- const cur = 1;
-
+export function UiTable({ tableData, headlist, pageSize, total, children, headName, cellClick, onPageChange }: UiTableProps) {
+ const [cur, setCur] = useState
(1);
+ const handlePageChange = (page: number) => {
+ setCur(page);
+ onPageChange(page);
+ }
return (
<>
{headName ?
@@ -34,7 +39,7 @@ export function UiTable({ tableData, headlist, pageSize, total, children, headNa
}
- {tableData?.map((el: { [key: string]: string | number | boolean }, index) => (
+ {tableData?.map((el: { [key: string]: string | number | boolean | object}, index) => (
{headlist?.map((head) => (
cellClick && cellClick(index)} key={head.id + index}>{el[head.id]}
@@ -43,7 +48,7 @@ export function UiTable({ tableData, headlist, pageSize, total, children, headNa
))}
- {total <= 0 ? <>> :
}
+ {total <= 0 ? <>> :
}
>
);
diff --git a/packages/common/business_components/src/ui/table/uiPageNations.tsx b/packages/common/business_components/src/ui/table/uiPageNations.tsx
index a7b788d71..891fc4c81 100644
--- a/packages/common/business_components/src/ui/table/uiPageNations.tsx
+++ b/packages/common/business_components/src/ui/table/uiPageNations.tsx
@@ -1,46 +1,77 @@
-'use client'
-
+'use client';
import { useEffect, useState } from "react";
-import { Pagination, PaginationContent, PaginationItem, PaginationPrevious, PaginationLink, PaginationNext } from "./lib/pagination";
-
+import { PaginationNext } from "./lib/pagination";
+import { PaginationLink } from "./lib/pagination";
+import { PaginationPrevious } from "./lib/pagination";
+import { PaginationItem } from "./lib/pagination";
+import { PaginationContent } from "./lib/pagination";
+import { Pagination } from "./lib/pagination";
interface CommonPageNationsProps {
- total: number;
- cur: number;
- pageSize: number;
+ total: number;
+ cur: number;
+ pageSize: number;
+ onPageChange: (page: number) => void;
}
export default function UiPageNations(commonPageNationsProps: CommonPageNationsProps) {
-
- const [pageProps, setPageProps] = useState(commonPageNationsProps);
+ const [pageProps, setPageProps] = useState(commonPageNationsProps);
+ useEffect(() => {
+ setPageProps(commonPageNationsProps);
+ }, [commonPageNationsProps]);
- useEffect(() => {
- setPageProps(commonPageNationsProps);
- } ,[commonPageNationsProps]);
+ const totalPages = Math.ceil(pageProps.total / pageProps.pageSize);
+ const pagesPerGroup = 10;
+ const currentGroup = Math.floor((pageProps.cur - 1) / pagesPerGroup);
+ const startPage = currentGroup * pagesPerGroup + 1;
+ const endPage = Math.min(startPage + pagesPerGroup - 1, totalPages);
+ const handlePageChange = (page: number) => {
+ pageProps.onPageChange(page);
+ };
- return(
-
-
-
-
-
+ return (
+
+
+
+ {/* 이전 그룹으로 이동 */}
+
+ {
+ if (startPage > 1) handlePageChange(startPage - 1);
+ }}
+ />
+
+
+ {/* 현재 그룹 페이지들 표시 */}
{
- Array.from({length:Math.ceil(commonPageNationsProps.total/commonPageNationsProps.pageSize)},(_,i)=>i+1).map((el,index)=>(
-
- {el}
-
- ))
- }
-
-
+ Array.from({ length: endPage - startPage + 1 }, (_, i) => startPage + i).map((pageNum) => (
+
+ handlePageChange(pageNum)}
+ >
+ {pageNum}
+
-
-
-
-
-
- );
+ ))
+ }
+
+ {/* 다음 그룹으로 이동 */}
+
+ {
+ if (endPage < totalPages) handlePageChange(endPage + 1);
+ }}
+ />
+
+
+
+
+ );
}
\ No newline at end of file