You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/05/21 20:39:13 UTC
(superset) branch master updated: fix(TableView): reset pagination when data reduces below current page (#34562)
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 89c2a474334 fix(TableView): reset pagination when data reduces below current page (#34562)
89c2a474334 is described below
commit 89c2a474334e9998d0e3d746c86a30f9003bed28
Author: Evan Rusackas <ev...@preset.io>
AuthorDate: Thu May 21 13:39:05 2026 -0700
fix(TableView): reset pagination when data reduces below current page (#34562)
Co-authored-by: Claude Opus 4.5 <no...@anthropic.com>
---
.../src/components/TableView/TableView.test.tsx | 34 ++++++++++++++++++++++
.../src/components/TableView/TableView.tsx | 15 ++++++++++
2 files changed, 49 insertions(+)
diff --git a/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.test.tsx b/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.test.tsx
index 562f76366c0..22c2fd40a67 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.test.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.test.tsx
@@ -371,3 +371,37 @@ test('should handle large datasets with pagination', () => {
expect(screen.getByRole('list')).toBeInTheDocument();
expect(screen.getByText('1-10 of 100')).toBeInTheDocument();
});
+
+test('should reset to first page when data reduces below current page', async () => {
+ // Start with 30 items, 10 per page = 3 pages
+ const initialData = Array.from({ length: 30 }, (_, i) => ({
+ id: i,
+ age: 20 + i,
+ name: `Person ${i}`,
+ }));
+
+ const props = {
+ ...mockedProps,
+ data: initialData,
+ pageSize: 10,
+ };
+
+ const { rerender } = render(<TableView {...props} />);
+
+ // Navigate to page 3 (last page)
+ const page3 = screen.getByRole('listitem', { name: '3' });
+ await userEvent.click(page3);
+
+ await waitFor(() => {
+ expect(screen.getByText('21-30 of 30')).toBeInTheDocument();
+ });
+
+ // Reduce data to only 5 items (fewer than current page would show)
+ const reducedData = initialData.slice(0, 5);
+ rerender(<TableView {...props} data={reducedData} />);
+
+ // Should reset to page 1 since page 3 no longer exists
+ await waitFor(() => {
+ expect(screen.getByText('1-5 of 5')).toBeInTheDocument();
+ });
+});
diff --git a/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.tsx b/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.tsx
index 0ed4b6727bf..371397773a1 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/TableView/TableView.tsx
@@ -246,6 +246,21 @@ const RawTableView = ({
}
}, [initialSortBy, onServerPagination, serverPagination, sortBy]);
+ // Reset to first page when current page exceeds available pages
+ // (e.g., when filtering reduces the data below the current page)
+ const pageCount = Math.ceil(data.length / effectivePageSize);
+ useEffect(() => {
+ if (
+ withPagination &&
+ !serverPagination &&
+ !loading &&
+ pageIndex > pageCount - 1 &&
+ pageCount > 0
+ ) {
+ setPageIndex(0);
+ }
+ }, [withPagination, serverPagination, loading, pageIndex, pageCount]);
+
return (
<TableViewStyles {...props} ref={tableRef}>
<TableCollection