@@ -140,8 +140,14 @@ function SimpleTable<T extends object>({
140140 onSortingChange : setSorting ,
141141 getSubRows : ( row : any ) => row ?. subRows ,
142142 getRowId : rowId ,
143+ autoResetPageIndex : false ,
143144 } ) ;
144145
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+
145151 const { t } = useTranslation ( ) ;
146152
147153 useEffect ( ( ) => {
@@ -248,7 +254,7 @@ function SimpleTable<T extends object>({
248254function Pagination < T > ( { table } : React . PropsWithChildren < { table : ReactTable < T > } > ) {
249255 const pageIndex = table . getState ( ) . pagination . pageIndex ;
250256 const pageSize = table . getState ( ) . pagination . pageSize ;
251- const rowCount = table . getCoreRowModel ( ) . rows . length ;
257+ const rowCount = table . getExpandedRowModel ( ) . rows . length ;
252258
253259 const { t } = useTranslation ( ) ;
254260
@@ -257,21 +263,31 @@ function Pagination<T>({ table }: React.PropsWithChildren<{ table: ReactTable<T>
257263 < div className = "flex items-center space-x-4" >
258264 < Select defaultValue = "0"
259265 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+ } } >
261275 < SelectPrimitive . Trigger >
262276 < div className = "px-1 py-0 hover:bg-inherit text-muted-foreground text-xs" >
263277 { pageIndex * pageSize } -
264278 { Math . min ( ( pageIndex + 1 ) * pageSize , rowCount ) } of
265279 { rowCount }
266280 </ div >
267281 </ 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 >
275291 </ SelectContent >
276292 </ Select >
277293 < div className = "flex items-center space-x-2" >
0 commit comments