@@ -140,8 +140,14 @@ function SimpleTable<T extends object>({
140
140
onSortingChange : setSorting ,
141
141
getSubRows : ( row : any ) => row ?. subRows ,
142
142
getRowId : rowId ,
143
+ autoResetPageIndex : false ,
143
144
} ) ;
144
145
146
+ // If we're on an empty page, reset the pageIndex to 0
147
+ if ( table . getRowModel ( ) . rows . length == 0 && table . getExpandedRowModel ( ) . rows . length != 0 ) {
148
+ setPagination ( p => ( { ...p , pageIndex : 0 } ) ) ;
149
+ }
150
+
145
151
const { t } = useTranslation ( ) ;
146
152
147
153
useEffect ( ( ) => {
@@ -248,7 +254,7 @@ function SimpleTable<T extends object>({
248
254
function Pagination < T > ( { table } : React . PropsWithChildren < { table : ReactTable < T > } > ) {
249
255
const pageIndex = table . getState ( ) . pagination . pageIndex ;
250
256
const pageSize = table . getState ( ) . pagination . pageSize ;
251
- const rowCount = table . getCoreRowModel ( ) . rows . length ;
257
+ const rowCount = table . getExpandedRowModel ( ) . rows . length ;
252
258
253
259
const { t } = useTranslation ( ) ;
254
260
@@ -257,21 +263,31 @@ function Pagination<T>({ table }: React.PropsWithChildren<{ table: ReactTable<T>
257
263
< div className = "flex items-center space-x-4" >
258
264
< Select defaultValue = "0"
259
265
value = { `${ pageSize } ` }
260
- onValueChange = { ( value ) => table . setPageSize ( Number ( value ) ) } >
266
+ onValueChange = { ( value ) => {
267
+ let size = Number ( value ) ;
268
+ if ( size === 0 ) {
269
+ for ( let row of table . getExpandedRowModel ( ) . rows ) {
270
+ size += row . getLeafRows ( ) . length ;
271
+ }
272
+ }
273
+ table . setPageSize ( size ) ;
274
+ } } >
261
275
< SelectPrimitive . Trigger >
262
276
< div className = "px-1 py-0 hover:bg-inherit text-muted-foreground text-xs" >
263
277
{ pageIndex * pageSize } -
264
278
{ Math . min ( ( pageIndex + 1 ) * pageSize , rowCount ) } of
265
279
{ rowCount }
266
280
</ div >
267
281
</ SelectPrimitive . Trigger >
268
- < SelectContent side = "top" > < SelectGroup >
269
- < SelectLabel > Rows per page</ SelectLabel >
270
- { [ 10 , 20 , 30 , 40 , 50 ] . map ( ( pageSize ) => (
271
- < SelectItem key = { pageSize } value = { `${ pageSize } ` } >
272
- { pageSize }
273
- </ SelectItem >
274
- ) ) } </ SelectGroup >
282
+ < SelectContent side = "top" >
283
+ < SelectGroup >
284
+ < SelectLabel > Rows per page</ SelectLabel >
285
+ { [ 10 , 20 , 30 , 40 , 50 , 0 ] . map ( ( pageSize ) => (
286
+ < SelectItem key = { pageSize } value = { `${ pageSize } ` } >
287
+ { pageSize > 0 ? pageSize : 'disable pagination' }
288
+ </ SelectItem >
289
+ ) ) }
290
+ </ SelectGroup >
275
291
</ SelectContent >
276
292
</ Select >
277
293
< div className = "flex items-center space-x-2" >
0 commit comments