@@ -4,32 +4,42 @@ import ChevronLeft from "../../assets/icons/ChevronLeft.svg";
44import ChevronRight from "../../assets/icons/ChevronRight.svg" ;
55
66const PageNavigator = ( { currentPage, totalPages, onPageChange } ) => {
7+ const pagesPerGroup = 5 ; // 5개씩 끊어서 표시
8+ const currentGroup = Math . floor ( currentPage / pagesPerGroup ) ;
9+ const startPage = currentGroup * pagesPerGroup ;
10+ const endPage = Math . min ( startPage + pagesPerGroup , totalPages ) ;
11+
712 const handlePageClick = ( page ) => {
8- if ( page >= 0 && page <= totalPages ) {
13+ if ( page >= 0 && page < totalPages ) {
914 onPageChange ( page ) ;
1015 }
1116 } ;
1217
1318 return (
1419 < PageNavigatorWrapper >
20+ { /* 이전 5개 이동 */ }
1521 < Img
1622 src = { ChevronLeft }
17- visibility = { currentPage === 0 ? "hidden" : "visible" }
18- onClick = { ( ) => handlePageClick ( currentPage - 1 ) }
23+ visibility = { currentGroup === 0 ? "hidden" : "visible" }
24+ onClick = { ( ) => handlePageClick ( startPage - pagesPerGroup ) }
1925 />
20- { Array . from ( { length : totalPages } , ( _ , index ) => (
26+
27+ { /* 현재 그룹의 페이지 번호 표시 */ }
28+ { Array . from ( { length : endPage - startPage } , ( _ , index ) => (
2129 < PageNumber
22- key = { index }
23- color = { currentPage === index ? "#A00000" : undefined }
24- onClick = { ( ) => handlePageClick ( index ) }
30+ key = { startPage + index }
31+ color = { currentPage === startPage + index ? "#A00000" : undefined }
32+ onClick = { ( ) => handlePageClick ( startPage + index ) }
2533 >
26- { index + 1 }
34+ { startPage + index + 1 }
2735 </ PageNumber >
2836 ) ) }
37+
38+ { /* 다음 5개 이동 */ }
2939 < Img
3040 src = { ChevronRight }
31- visibility = { currentPage === totalPages - 1 ? "hidden" : "visible" }
32- onClick = { ( ) => handlePageClick ( currentPage + 1 ) }
41+ visibility = { endPage >= totalPages ? "hidden" : "visible" }
42+ onClick = { ( ) => handlePageClick ( startPage + pagesPerGroup ) }
3343 />
3444 </ PageNavigatorWrapper >
3545 ) ;
0 commit comments