@@ -17,11 +17,23 @@ import {
1717
1818interface DataTablePaginationProps < TData > {
1919 table : Table < TData >
20+ onPageChange : ( page : number ) => void ;
21+ onPageSizeChange : ( size : number ) => void
2022}
2123
2224export function DataTablePagination < TData > ( {
2325 table,
26+ onPageChange,
27+ onPageSizeChange,
2428} : DataTablePaginationProps < TData > ) {
29+ const handlePageChange = ( page : number ) => {
30+ onPageChange ( page ) ;
31+ table . setPageIndex ( page ) ;
32+ }
33+ const handlePageSizeChange = ( size : number ) => {
34+ onPageSizeChange ( size ) ;
35+ table . setPageSize ( size )
36+ }
2537 return (
2638 < div className = "flex items-center justify-between px-2" >
2739 < div className = "flex-1 text-sm text-muted-foreground" >
@@ -33,8 +45,8 @@ export function DataTablePagination<TData>({
3345 < p className = "text-sm font-medium" > Rows per page</ p >
3446 < Select
3547 value = { `${ table . getState ( ) . pagination . pageSize } ` }
36- onValueChange = { ( value : string ) => {
37- table . setPageSize ( Number ( value ) )
48+ onValueChange = { ( value ) => {
49+ handlePageSizeChange ( Number ( value ) )
3850 } }
3951 >
4052 < SelectTrigger className = "h-8 w-[70px]" >
@@ -57,7 +69,7 @@ export function DataTablePagination<TData>({
5769 < Button
5870 variant = "outline"
5971 className = "hidden h-8 w-8 p-0 lg:flex"
60- onClick = { ( ) => table . setPageIndex ( 0 ) }
72+ onClick = { ( ) => handlePageChange ( 0 ) }
6173 disabled = { ! table . getCanPreviousPage ( ) }
6274 >
6375 < span className = "sr-only" > Go to first page</ span >
@@ -66,7 +78,7 @@ export function DataTablePagination<TData>({
6678 < Button
6779 variant = "outline"
6880 className = "h-8 w-8 p-0"
69- onClick = { ( ) => table . previousPage ( ) }
81+ onClick = { ( ) => handlePageChange ( table . getState ( ) . pagination . pageIndex - 1 ) }
7082 disabled = { ! table . getCanPreviousPage ( ) }
7183 >
7284 < span className = "sr-only" > Go to previous page</ span >
@@ -75,7 +87,7 @@ export function DataTablePagination<TData>({
7587 < Button
7688 variant = "outline"
7789 className = "h-8 w-8 p-0"
78- onClick = { ( ) => table . nextPage ( ) }
90+ onClick = { ( ) => handlePageChange ( table . getState ( ) . pagination . pageIndex + 1 ) }
7991 disabled = { ! table . getCanNextPage ( ) }
8092 >
8193 < span className = "sr-only" > Go to next page</ span >
@@ -84,7 +96,7 @@ export function DataTablePagination<TData>({
8496 < Button
8597 variant = "outline"
8698 className = "hidden h-8 w-8 p-0 lg:flex"
87- onClick = { ( ) => table . setPageIndex ( table . getPageCount ( ) - 1 ) }
99+ onClick = { ( ) => handlePageChange ( table . getPageCount ( ) - 1 ) }
88100 disabled = { ! table . getCanNextPage ( ) }
89101 >
90102 < span className = "sr-only" > Go to last page</ span >
@@ -94,4 +106,4 @@ export function DataTablePagination<TData>({
94106 </ div >
95107 </ div >
96108 )
97- }
109+ }
0 commit comments