@@ -11,6 +11,7 @@ import { fetchTilList } from '@/services/tils/tilListService.service';
1111import { deleteTil } from '@/services/write/til.service' ;
1212
1313import type { TilItem } from '@/types/til' ;
14+ import Pagination from '@/components/common/Pagination' ;
1415
1516const Page = ( ) => {
1617 const { user, authLoading } = useAuthUser ( ) ;
@@ -23,6 +24,9 @@ const Page = () => {
2324
2425 const [ searchTerm , setSearchTerm ] = useState ( '' ) ;
2526
27+ const [ currentPage , setCurrentPage ] = useState ( 1 ) ;
28+ const itemsPerPage = 4 ;
29+
2630 // 데이터 가져오기
2731 useEffect ( ( ) => {
2832 if ( ! user ) {
@@ -64,6 +68,27 @@ const Page = () => {
6468 setSortedItems ( sorted ) ;
6569 } , [ items , sort , searchTerm ] ) ;
6670
71+ const totalPages = Math . ceil ( sortedItems . length / itemsPerPage ) ;
72+
73+ useEffect ( ( ) => {
74+ if ( totalPages === 0 ) {
75+ if ( currentPage !== 1 ) setCurrentPage ( 1 ) ;
76+ return ;
77+ }
78+ if ( currentPage > totalPages ) {
79+ setCurrentPage ( totalPages ) ;
80+ }
81+ } , [ totalPages , currentPage ] ) ;
82+
83+ const currentData = sortedItems . slice (
84+ ( currentPage - 1 ) * itemsPerPage ,
85+ currentPage * itemsPerPage
86+ ) ;
87+
88+ const handlePageChange = ( page : number ) => {
89+ setCurrentPage ( page ) ;
90+ } ;
91+
6792 const handleDelete = async ( id : string ) => {
6893 if ( ! user ) return ;
6994
@@ -115,8 +140,14 @@ const Page = () => {
115140 { loading ? (
116141 < p className = "text-sm text-slate-400" > 불러오는 중...</ p >
117142 ) : (
118- < TilList items = { sortedItems } onDelete = { handleDelete } />
143+ < TilList items = { currentData } onDelete = { handleDelete } />
119144 ) }
145+
146+ < Pagination
147+ currentPage = { currentPage }
148+ totalPages = { totalPages }
149+ onPageChange = { handlePageChange }
150+ />
120151 </ div >
121152 ) ;
122153} ;
0 commit comments