@coveord/plasma-mantine 52.27.3 → 52.27.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"TablePagination.d.ts","sourceRoot":"","sources":["../../../../../src/components/table/table-pagination/TablePagination.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAE7D,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,oBAAoB,CAoCnE,CAAC"}
1
+ {"version":3,"file":"TablePagination.d.ts","sourceRoot":"","sources":["../../../../../src/components/table/table-pagination/TablePagination.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAE7D,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,oBAAoB,CA2CnE,CAAC"}
@@ -12,6 +12,7 @@ var _object_spread = require("@swc/helpers/_/_object_spread");
12
12
  var _object_spread_props = require("@swc/helpers/_/_object_spread_props");
13
13
  var _jsxruntime = require("react/jsx-runtime");
14
14
  var _core = require("@mantine/core");
15
+ var _hooks = require("@mantine/hooks");
15
16
  var _TableContext = require("../TableContext");
16
17
  var TablePagination = function(param) {
17
18
  var totalPages = param.totalPages, onPageChange = param.onPageChange;
@@ -31,6 +32,14 @@ var TablePagination = function(param) {
31
32
  });
32
33
  };
33
34
  var total = totalPages === null ? getPageCount() : totalPages;
35
+ (0, _hooks.useDidUpdate)(function() {
36
+ if (state.pagination.pageIndex + 1 > total && total > 0) {
37
+ updatePage(total);
38
+ }
39
+ }, [
40
+ state.pagination.pageIndex,
41
+ total
42
+ ]);
34
43
  return /*#__PURE__*/ (0, _jsxruntime.jsx)(_core.Pagination, {
35
44
  value: state.pagination.pageIndex + 1,
36
45
  onChange: updatePage,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/table/table-pagination/TablePagination.tsx"],"sourcesContent":["import {Pagination} from '@mantine/core';\nimport {FunctionComponent} from 'react';\n\nimport {useTable} from '../TableContext';\nimport {TablePaginationProps} from './TablePagination.types';\n\nexport const TablePagination: FunctionComponent<TablePaginationProps> = ({totalPages, onPageChange}) => {\n const {state, setState, containerRef, getPageCount} = useTable();\n const updatePage = (newPage: number) => {\n onPageChange?.(newPage - 1);\n setState((prevState) => ({\n ...prevState,\n pagination: {...prevState.pagination, pageIndex: newPage - 1},\n }));\n containerRef.current.scrollIntoView({behavior: 'smooth'});\n };\n\n const total = totalPages === null ? getPageCount() : totalPages;\n\n return (\n <Pagination\n value={state.pagination.pageIndex + 1}\n onChange={updatePage}\n total={total}\n boundaries={0}\n size=\"md\"\n spacing=\"xs\"\n getControlProps={(control) => {\n switch (control) {\n case 'previous':\n return {\n component: 'button',\n 'aria-label': 'previous page',\n };\n case 'next':\n return {component: 'button', 'aria-label': 'next page'};\n default:\n return {};\n }\n }}\n />\n );\n};\n"],"names":["TablePagination","totalPages","onPageChange","useTable","state","setState","containerRef","getPageCount","updatePage","newPage","prevState","pagination","pageIndex","current","scrollIntoView","behavior","total","Pagination","value","onChange","boundaries","size","spacing","getControlProps","control","component"],"mappings":";;;;+BAMaA;;;eAAAA;;;;;;oBANY;4BAGF;AAGhB,IAAMA,kBAA2D;QAAEC,mBAAAA,YAAYC,qBAAAA;IAClF,IAAsDC,YAAAA,IAAAA,sBAAQ,KAAvDC,QAA+CD,UAA/CC,OAAOC,WAAwCF,UAAxCE,UAAUC,eAA8BH,UAA9BG,cAAcC,eAAgBJ,UAAhBI;IACtC,IAAMC,aAAa,SAACC;YAChBP;SAAAA,gBAAAA,0BAAAA,oCAAAA,cAAeO,UAAU;QACzBJ,SAAS,SAACK;mBAAe,4CAClBA;gBACHC,YAAY,4CAAID,UAAUC,UAAU;oBAAEC,WAAWH,UAAU;;;;QAE/DH,aAAaO,OAAO,CAACC,cAAc,CAAC;YAACC,UAAU;QAAQ;IAC3D;IAEA,IAAMC,QAAQf,eAAe,OAAOM,iBAAiBN;IAErD,qBACI,qBAACgB,gBAAU;QACPC,OAAOd,MAAMO,UAAU,CAACC,SAAS,GAAG;QACpCO,UAAUX;QACVQ,OAAOA;QACPI,YAAY;QACZC,MAAK;QACLC,SAAQ;QACRC,iBAAiB,SAACC;YACd,OAAQA;gBACJ,KAAK;oBACD,OAAO;wBACHC,WAAW;wBACX,cAAc;oBAClB;gBACJ,KAAK;oBACD,OAAO;wBAACA,WAAW;wBAAU,cAAc;oBAAW;gBAC1D;oBACI,OAAO,CAAC;YAChB;QACJ;;AAGZ"}
1
+ {"version":3,"sources":["../../../../../src/components/table/table-pagination/TablePagination.tsx"],"sourcesContent":["import {Pagination} from '@mantine/core';\nimport {useDidUpdate} from '@mantine/hooks';\nimport {FunctionComponent} from 'react';\n\nimport {useTable} from '../TableContext';\nimport {TablePaginationProps} from './TablePagination.types';\n\nexport const TablePagination: FunctionComponent<TablePaginationProps> = ({totalPages, onPageChange}) => {\n const {state, setState, containerRef, getPageCount} = useTable();\n\n const updatePage = (newPage: number) => {\n onPageChange?.(newPage - 1);\n setState((prevState) => ({\n ...prevState,\n pagination: {...prevState.pagination, pageIndex: newPage - 1},\n }));\n containerRef.current.scrollIntoView({behavior: 'smooth'});\n };\n\n const total = totalPages === null ? getPageCount() : totalPages;\n\n useDidUpdate(() => {\n if (state.pagination.pageIndex + 1 > total && total > 0) {\n updatePage(total);\n }\n }, [state.pagination.pageIndex, total]);\n\n return (\n <Pagination\n value={state.pagination.pageIndex + 1}\n onChange={updatePage}\n total={total}\n boundaries={0}\n size=\"md\"\n spacing=\"xs\"\n getControlProps={(control) => {\n switch (control) {\n case 'previous':\n return {\n component: 'button',\n 'aria-label': 'previous page',\n };\n case 'next':\n return {component: 'button', 'aria-label': 'next page'};\n default:\n return {};\n }\n }}\n />\n );\n};\n"],"names":["TablePagination","totalPages","onPageChange","useTable","state","setState","containerRef","getPageCount","updatePage","newPage","prevState","pagination","pageIndex","current","scrollIntoView","behavior","total","useDidUpdate","Pagination","value","onChange","boundaries","size","spacing","getControlProps","control","component"],"mappings":";;;;+BAOaA;;;eAAAA;;;;;;oBAPY;qBACE;4BAGJ;AAGhB,IAAMA,kBAA2D;QAAEC,mBAAAA,YAAYC,qBAAAA;IAClF,IAAsDC,YAAAA,IAAAA,sBAAQ,KAAvDC,QAA+CD,UAA/CC,OAAOC,WAAwCF,UAAxCE,UAAUC,eAA8BH,UAA9BG,cAAcC,eAAgBJ,UAAhBI;IAEtC,IAAMC,aAAa,SAACC;YAChBP;SAAAA,gBAAAA,0BAAAA,oCAAAA,cAAeO,UAAU;QACzBJ,SAAS,SAACK;mBAAe,4CAClBA;gBACHC,YAAY,4CAAID,UAAUC,UAAU;oBAAEC,WAAWH,UAAU;;;;QAE/DH,aAAaO,OAAO,CAACC,cAAc,CAAC;YAACC,UAAU;QAAQ;IAC3D;IAEA,IAAMC,QAAQf,eAAe,OAAOM,iBAAiBN;IAErDgB,IAAAA,mBAAY,EAAC;QACT,IAAIb,MAAMO,UAAU,CAACC,SAAS,GAAG,IAAII,SAASA,QAAQ,GAAG;YACrDR,WAAWQ;QACf;IACJ,GAAG;QAACZ,MAAMO,UAAU,CAACC,SAAS;QAAEI;KAAM;IAEtC,qBACI,qBAACE,gBAAU;QACPC,OAAOf,MAAMO,UAAU,CAACC,SAAS,GAAG;QACpCQ,UAAUZ;QACVQ,OAAOA;QACPK,YAAY;QACZC,MAAK;QACLC,SAAQ;QACRC,iBAAiB,SAACC;YACd,OAAQA;gBACJ,KAAK;oBACD,OAAO;wBACHC,WAAW;wBACX,cAAc;oBAClB;gBACJ,KAAK;oBACD,OAAO;wBAACA,WAAW;wBAAU,cAAc;oBAAW;gBAC1D;oBACI,OAAO,CAAC;YAChB;QACJ;;AAGZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"TablePagination.d.ts","sourceRoot":"","sources":["../../../../../src/components/table/table-pagination/TablePagination.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAE7D,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,oBAAoB,CAoCnE,CAAC"}
1
+ {"version":3,"file":"TablePagination.d.ts","sourceRoot":"","sources":["../../../../../src/components/table/table-pagination/TablePagination.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAE7D,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,oBAAoB,CA2CnE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Pagination } from '@mantine/core';
3
+ import { useDidUpdate } from '@mantine/hooks';
3
4
  import { useTable } from '../TableContext';
4
5
  export const TablePagination = ({ totalPages, onPageChange })=>{
5
6
  const { state, setState, containerRef, getPageCount } = useTable();
@@ -17,6 +18,14 @@ export const TablePagination = ({ totalPages, onPageChange })=>{
17
18
  });
18
19
  };
19
20
  const total = totalPages === null ? getPageCount() : totalPages;
21
+ useDidUpdate(()=>{
22
+ if (state.pagination.pageIndex + 1 > total && total > 0) {
23
+ updatePage(total);
24
+ }
25
+ }, [
26
+ state.pagination.pageIndex,
27
+ total
28
+ ]);
20
29
  return /*#__PURE__*/ _jsx(Pagination, {
21
30
  value: state.pagination.pageIndex + 1,
22
31
  onChange: updatePage,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/table/table-pagination/TablePagination.tsx"],"sourcesContent":["import {Pagination} from '@mantine/core';\nimport {FunctionComponent} from 'react';\n\nimport {useTable} from '../TableContext';\nimport {TablePaginationProps} from './TablePagination.types';\n\nexport const TablePagination: FunctionComponent<TablePaginationProps> = ({totalPages, onPageChange}) => {\n const {state, setState, containerRef, getPageCount} = useTable();\n const updatePage = (newPage: number) => {\n onPageChange?.(newPage - 1);\n setState((prevState) => ({\n ...prevState,\n pagination: {...prevState.pagination, pageIndex: newPage - 1},\n }));\n containerRef.current.scrollIntoView({behavior: 'smooth'});\n };\n\n const total = totalPages === null ? getPageCount() : totalPages;\n\n return (\n <Pagination\n value={state.pagination.pageIndex + 1}\n onChange={updatePage}\n total={total}\n boundaries={0}\n size=\"md\"\n spacing=\"xs\"\n getControlProps={(control) => {\n switch (control) {\n case 'previous':\n return {\n component: 'button',\n 'aria-label': 'previous page',\n };\n case 'next':\n return {component: 'button', 'aria-label': 'next page'};\n default:\n return {};\n }\n }}\n />\n );\n};\n"],"names":["Pagination","useTable","TablePagination","totalPages","onPageChange","state","setState","containerRef","getPageCount","updatePage","newPage","prevState","pagination","pageIndex","current","scrollIntoView","behavior","total","value","onChange","boundaries","size","spacing","getControlProps","control","component"],"mappings":";AAAA,SAAQA,UAAU,QAAO,gBAAgB;AAGzC,SAAQC,QAAQ,QAAO,kBAAkB;AAGzC,OAAO,MAAMC,kBAA2D,CAAC,EAACC,UAAU,EAAEC,YAAY,EAAC;IAC/F,MAAM,EAACC,KAAK,EAAEC,QAAQ,EAAEC,YAAY,EAAEC,YAAY,EAAC,GAAGP;IACtD,MAAMQ,aAAa,CAACC;QAChBN,eAAeM,UAAU;QACzBJ,SAAS,CAACK,YAAe,CAAA;gBACrB,GAAGA,SAAS;gBACZC,YAAY;oBAAC,GAAGD,UAAUC,UAAU;oBAAEC,WAAWH,UAAU;gBAAC;YAChE,CAAA;QACAH,aAAaO,OAAO,CAACC,cAAc,CAAC;YAACC,UAAU;QAAQ;IAC3D;IAEA,MAAMC,QAAQd,eAAe,OAAOK,iBAAiBL;IAErD,qBACI,KAACH;QACGkB,OAAOb,MAAMO,UAAU,CAACC,SAAS,GAAG;QACpCM,UAAUV;QACVQ,OAAOA;QACPG,YAAY;QACZC,MAAK;QACLC,SAAQ;QACRC,iBAAiB,CAACC;YACd,OAAQA;gBACJ,KAAK;oBACD,OAAO;wBACHC,WAAW;wBACX,cAAc;oBAClB;gBACJ,KAAK;oBACD,OAAO;wBAACA,WAAW;wBAAU,cAAc;oBAAW;gBAC1D;oBACI,OAAO,CAAC;YAChB;QACJ;;AAGZ,EAAE"}
1
+ {"version":3,"sources":["../../../../../src/components/table/table-pagination/TablePagination.tsx"],"sourcesContent":["import {Pagination} from '@mantine/core';\nimport {useDidUpdate} from '@mantine/hooks';\nimport {FunctionComponent} from 'react';\n\nimport {useTable} from '../TableContext';\nimport {TablePaginationProps} from './TablePagination.types';\n\nexport const TablePagination: FunctionComponent<TablePaginationProps> = ({totalPages, onPageChange}) => {\n const {state, setState, containerRef, getPageCount} = useTable();\n\n const updatePage = (newPage: number) => {\n onPageChange?.(newPage - 1);\n setState((prevState) => ({\n ...prevState,\n pagination: {...prevState.pagination, pageIndex: newPage - 1},\n }));\n containerRef.current.scrollIntoView({behavior: 'smooth'});\n };\n\n const total = totalPages === null ? getPageCount() : totalPages;\n\n useDidUpdate(() => {\n if (state.pagination.pageIndex + 1 > total && total > 0) {\n updatePage(total);\n }\n }, [state.pagination.pageIndex, total]);\n\n return (\n <Pagination\n value={state.pagination.pageIndex + 1}\n onChange={updatePage}\n total={total}\n boundaries={0}\n size=\"md\"\n spacing=\"xs\"\n getControlProps={(control) => {\n switch (control) {\n case 'previous':\n return {\n component: 'button',\n 'aria-label': 'previous page',\n };\n case 'next':\n return {component: 'button', 'aria-label': 'next page'};\n default:\n return {};\n }\n }}\n />\n );\n};\n"],"names":["Pagination","useDidUpdate","useTable","TablePagination","totalPages","onPageChange","state","setState","containerRef","getPageCount","updatePage","newPage","prevState","pagination","pageIndex","current","scrollIntoView","behavior","total","value","onChange","boundaries","size","spacing","getControlProps","control","component"],"mappings":";AAAA,SAAQA,UAAU,QAAO,gBAAgB;AACzC,SAAQC,YAAY,QAAO,iBAAiB;AAG5C,SAAQC,QAAQ,QAAO,kBAAkB;AAGzC,OAAO,MAAMC,kBAA2D,CAAC,EAACC,UAAU,EAAEC,YAAY,EAAC;IAC/F,MAAM,EAACC,KAAK,EAAEC,QAAQ,EAAEC,YAAY,EAAEC,YAAY,EAAC,GAAGP;IAEtD,MAAMQ,aAAa,CAACC;QAChBN,eAAeM,UAAU;QACzBJ,SAAS,CAACK,YAAe,CAAA;gBACrB,GAAGA,SAAS;gBACZC,YAAY;oBAAC,GAAGD,UAAUC,UAAU;oBAAEC,WAAWH,UAAU;gBAAC;YAChE,CAAA;QACAH,aAAaO,OAAO,CAACC,cAAc,CAAC;YAACC,UAAU;QAAQ;IAC3D;IAEA,MAAMC,QAAQd,eAAe,OAAOK,iBAAiBL;IAErDH,aAAa;QACT,IAAIK,MAAMO,UAAU,CAACC,SAAS,GAAG,IAAII,SAASA,QAAQ,GAAG;YACrDR,WAAWQ;QACf;IACJ,GAAG;QAACZ,MAAMO,UAAU,CAACC,SAAS;QAAEI;KAAM;IAEtC,qBACI,KAAClB;QACGmB,OAAOb,MAAMO,UAAU,CAACC,SAAS,GAAG;QACpCM,UAAUV;QACVQ,OAAOA;QACPG,YAAY;QACZC,MAAK;QACLC,SAAQ;QACRC,iBAAiB,CAACC;YACd,OAAQA;gBACJ,KAAK;oBACD,OAAO;wBACHC,WAAW;wBACX,cAAc;oBAClB;gBACJ,KAAK;oBACD,OAAO;wBAACA,WAAW;wBAAU,cAAc;oBAAW;gBAC1D;oBACI,OAAO,CAAC;YAChB;QACJ;;AAGZ,EAAE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coveord/plasma-mantine",
3
- "version": "52.27.3",
3
+ "version": "52.27.4",
4
4
  "description": "A Plasma flavoured Mantine theme",
5
5
  "keywords": [
6
6
  "plasma",
@@ -34,15 +34,15 @@
34
34
  "@mantine/utils": "6.0.19",
35
35
  "@monaco-editor/react": "4.5.1",
36
36
  "@swc/helpers": "0.5.1",
37
- "@tanstack/react-table": "8.11.7",
38
- "@tanstack/table-core": "8.11.7",
37
+ "@tanstack/react-table": "8.14.0",
38
+ "@tanstack/table-core": "8.14.0",
39
39
  "dayjs": "1.11.9",
40
40
  "fast-deep-equal": "3.1.3",
41
41
  "lodash.debounce": "4.0.8",
42
42
  "lodash.defaultsdeep": "4.6.1",
43
43
  "monaco-editor": "0.41.0",
44
- "@coveord/plasma-react-icons": "52.26.1",
45
- "@coveord/plasma-tokens": "52.23.1"
44
+ "@coveord/plasma-react-icons": "52.27.4",
45
+ "@coveord/plasma-tokens": "52.27.4"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@emotion/react": "11.11.1",
@@ -74,7 +74,7 @@
74
74
  "jest": "29.6.3",
75
75
  "jest-environment-jsdom": "29.6.3",
76
76
  "jest-junit": "16.0.0",
77
- "npm-run-all": "4.1.5",
77
+ "npm-run-all2": "5.0.0",
78
78
  "publint": "0.2.2",
79
79
  "react": "18.2.0",
80
80
  "react-dom": "18.2.0",
@@ -92,6 +92,7 @@
92
92
  "@mantine/form": "^6.0.1",
93
93
  "@mantine/hooks": "^6.0.1",
94
94
  "@mantine/modals": "^6.0.1",
95
+ "@mantine/notifications": "^6.0.1",
95
96
  "embla-carousel-react": "^7.0.4",
96
97
  "react": ">= 18.0.0",
97
98
  "react-dom": ">= 18.0.0"
@@ -1,7 +1,9 @@
1
1
  import {ColumnDef, createColumnHelper, getPaginationRowModel} from '@tanstack/table-core';
2
2
  import {render, screen, userEvent, waitFor} from '@test-utils';
3
+ import {useState} from 'react';
3
4
 
4
5
  import {Table} from '../Table';
6
+ import {useTable} from '../TableContext';
5
7
 
6
8
  type RowData = {name: string};
7
9
 
@@ -134,4 +136,79 @@ describe('Table.Pagination', () => {
134
136
  );
135
137
  expect(screen.getByTestId('table-footer')).toBeEmptyDOMElement();
136
138
  });
139
+
140
+ it('changes page when the current page is greater than the total number of pages', async () => {
141
+ const user = userEvent.setup();
142
+ const onChangePage = vi.fn();
143
+ const Fixture = () => {
144
+ const {state} = useTable();
145
+ const [totalPages, setTotalPages] = useState(state.pagination.pageIndex + 1);
146
+ const removeAPage = () => setTotalPages(totalPages - 1);
147
+
148
+ return (
149
+ <>
150
+ <button data-testid="remove-page" onClick={removeAPage}>
151
+ change total pages
152
+ </button>
153
+ <Table.Pagination totalPages={totalPages} onPageChange={onChangePage} />
154
+ </>
155
+ );
156
+ };
157
+ render(
158
+ <Table data={[{name: 'grains'}]} columns={columns} initialState={{pagination: {pageSize: 1, pageIndex: 2}}}>
159
+ <Table.Footer>
160
+ <Fixture />
161
+ </Table.Footer>
162
+ </Table>,
163
+ );
164
+
165
+ expect(screen.getByRole('cell', {name: 'grains'})).toBeVisible();
166
+ let buttons = screen.getAllByRole('button');
167
+ expect(buttons).toHaveLength(6);
168
+ expect(buttons[0]).toHaveAccessibleName('change total pages');
169
+ expect(buttons[1]).toHaveAccessibleName('previous page');
170
+ expect(buttons[2]).toHaveAccessibleName('1');
171
+ expect(buttons[3]).toHaveAccessibleName('2');
172
+ expect(buttons[4]).toHaveAccessibleName('3');
173
+ expect(buttons[5]).toHaveAccessibleName('next page');
174
+
175
+ // remove a page
176
+ await user.click(screen.getByTestId('remove-page'));
177
+
178
+ // The page is 2, but the index is 1
179
+ expect(onChangePage).toHaveBeenCalledWith(1);
180
+
181
+ buttons = screen.getAllByRole('button');
182
+ expect(buttons).toHaveLength(5);
183
+ expect(buttons[0]).toHaveAccessibleName('change total pages');
184
+ expect(buttons[1]).toHaveAccessibleName('previous page');
185
+ expect(buttons[2]).toHaveAccessibleName('1');
186
+ expect(buttons[3]).toHaveAccessibleName('2');
187
+ expect(buttons[4]).toHaveAccessibleName('next page');
188
+
189
+ // remove a page
190
+ await user.click(screen.getByTestId('remove-page'));
191
+
192
+ // The page is 1, but the index is 0
193
+ expect(onChangePage).toHaveBeenCalledWith(0);
194
+
195
+ buttons = screen.getAllByRole('button');
196
+ expect(buttons).toHaveLength(4);
197
+ expect(buttons[0]).toHaveAccessibleName('change total pages');
198
+ expect(buttons[1]).toHaveAccessibleName('previous page');
199
+ expect(buttons[2]).toHaveAccessibleName('1');
200
+ expect(buttons[3]).toHaveAccessibleName('next page');
201
+
202
+ onChangePage.mockReset();
203
+
204
+ // remove a page
205
+ await user.click(screen.getByTestId('remove-page'));
206
+
207
+ // There is no more pages
208
+ expect(onChangePage).not.toHaveBeenCalled();
209
+
210
+ buttons = screen.getAllByRole('button');
211
+ expect(buttons).toHaveLength(1);
212
+ expect(buttons[0]).toHaveAccessibleName('change total pages');
213
+ });
137
214
  });
@@ -1,4 +1,5 @@
1
1
  import {Pagination} from '@mantine/core';
2
+ import {useDidUpdate} from '@mantine/hooks';
2
3
  import {FunctionComponent} from 'react';
3
4
 
4
5
  import {useTable} from '../TableContext';
@@ -6,6 +7,7 @@ import {TablePaginationProps} from './TablePagination.types';
6
7
 
7
8
  export const TablePagination: FunctionComponent<TablePaginationProps> = ({totalPages, onPageChange}) => {
8
9
  const {state, setState, containerRef, getPageCount} = useTable();
10
+
9
11
  const updatePage = (newPage: number) => {
10
12
  onPageChange?.(newPage - 1);
11
13
  setState((prevState) => ({
@@ -17,6 +19,12 @@ export const TablePagination: FunctionComponent<TablePaginationProps> = ({totalP
17
19
 
18
20
  const total = totalPages === null ? getPageCount() : totalPages;
19
21
 
22
+ useDidUpdate(() => {
23
+ if (state.pagination.pageIndex + 1 > total && total > 0) {
24
+ updatePage(total);
25
+ }
26
+ }, [state.pagination.pageIndex, total]);
27
+
20
28
  return (
21
29
  <Pagination
22
30
  value={state.pagination.pageIndex + 1}