Skip to content

Commit 35e8203

Browse files
author
Gianmarco Manni
committed
fix endless loop
1 parent 5286acb commit 35e8203

2 files changed

Lines changed: 12 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## Fixed
11+
12+
- endless loop on `pagination` state when paginating client-side
13+
1014
## [5.0.1] - 2024-03-27
1115

1216
### Fixed

src/lib/useReactDataTable/useReactDataTable.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { getModelFromColumnFilter } from "../utils/getModelFromColumnFilter";
99
import { getSortingStateFromModel } from "../utils/getSortingStateFromModel";
1010
import { getModelFromSortingState } from "../utils/getModelFromSortingState";
1111
import { OptionalNullable } from "../types/NullableTypes";
12+
import { useMemo } from "react";
1213

1314
/**
1415
* A react hook that returns a react table instance and the state of the table
@@ -63,31 +64,30 @@ const useReactDataTable = <TData, TFilter extends FilterModel = Record<string, n
6364
}));
6465
const skeletonData = Array.from({ length: paginationInternal.pageSize }, () => ({} as TData));
6566

67+
const columnFilters = useMemo(() => getColumnFilterFromModel(effectiveColumnFilters), [effectiveColumnFilters]);
68+
const sorting = useMemo(() => getSortingStateFromModel(effectiveSorting), [effectiveSorting]);
69+
6670
const table = useReactTable<TData>({
6771
data: isLoading ? skeletonData : data,
6872
columns: isLoading ? skeletonColumns : internalColumns,
6973

7074
onColumnFiltersChange: (filtersOrUpdaterFn) => {
71-
const newFilter =
72-
typeof filtersOrUpdaterFn !== "function"
73-
? filtersOrUpdaterFn
74-
: filtersOrUpdaterFn(getColumnFilterFromModel(effectiveColumnFilters));
75+
const newFilter = typeof filtersOrUpdaterFn !== "function" ? filtersOrUpdaterFn : filtersOrUpdaterFn(columnFilters);
7576
return effectiveOnColumnFiltersChange(getModelFromColumnFilter(newFilter));
7677
},
7778
onPaginationChange: (paginationOrUpdaterFn) => {
7879
const newFilter = typeof paginationOrUpdaterFn !== "function" ? paginationOrUpdaterFn : paginationOrUpdaterFn(effectivePagination);
7980
return effectiveOnPaginationChange(newFilter);
8081
},
8182
onSortingChange: (sortingOrUpdaterFn) => {
82-
const newFilter =
83-
typeof sortingOrUpdaterFn !== "function" ? sortingOrUpdaterFn : sortingOrUpdaterFn(getSortingStateFromModel(effectiveSorting));
83+
const newFilter = typeof sortingOrUpdaterFn !== "function" ? sortingOrUpdaterFn : sortingOrUpdaterFn(sorting);
8484
return effectiveOnSortingChange(getModelFromSortingState(newFilter));
8585
},
8686

8787
state: {
88-
columnFilters: getColumnFilterFromModel(effectiveColumnFilters),
88+
columnFilters,
8989
pagination: effectivePagination,
90-
sorting: getSortingStateFromModel(effectiveSorting),
90+
sorting,
9191
},
9292

9393
initialState: {

0 commit comments

Comments
 (0)