@terraware/web-components 3.9.5 → 3.9.6-rc.1

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.
@@ -34,6 +34,10 @@ export interface Props<T> extends LocalizationProps {
34
34
  rows: T[];
35
35
  Renderer?: (props: RendererProps<T>) => JSX.Element;
36
36
  onSelect?: (value: T, fromColumn?: string, newValue?: string) => void;
37
+ onPageChange?: (newPage: number) => void;
38
+ maxItemsPerPage?: number;
39
+ totalRowCount?: number;
40
+ currentPage?: number;
37
41
  DetailsRenderer?: (props: DetailsRendererProps) => JSX.Element;
38
42
  sortComparator?: (a: T, b: T, orderBy: keyof T, order: SortOrder) => number;
39
43
  sortHandler?: (order: SortOrder, orderBy: string) => void;
@@ -64,6 +68,6 @@ export type TopBarButton = {
64
68
  tooltipTitle?: TooltipProps['title'];
65
69
  };
66
70
  export declare const isTopBarButton: (input: unknown) => input is TopBarButton;
67
- export default function EnhancedTable<T extends TableRowType>({ id, columns, rows, order: _order, orderBy: _orderBy, Renderer, onSelect, DetailsRenderer, sortComparator, sortHandler, isInactive, isPresorted, onReorderEnd, isClickable, emptyTableMessage, showCheckbox, showTopBar, topBarButtons, selectedRows, setSelectedRows, controlledOnSelect, reloadData, stickyHeader, hideHeader, booleanFalseText, booleanTrueText, editText, renderNumSelectedText, renderPaginationText, enhancedTopBarSelectionConfig, density, tableComments, }: Props<T>): JSX.Element;
71
+ export default function EnhancedTable<T extends TableRowType>({ id, columns, rows, order: _order, orderBy: _orderBy, Renderer, onSelect, onPageChange, maxItemsPerPage, totalRowCount, currentPage, DetailsRenderer, sortComparator, sortHandler, isInactive, isPresorted, onReorderEnd, isClickable, emptyTableMessage, showCheckbox, showTopBar, topBarButtons, selectedRows, setSelectedRows, controlledOnSelect, reloadData, stickyHeader, hideHeader, booleanFalseText, booleanTrueText, editText, renderNumSelectedText, renderPaginationText, enhancedTopBarSelectionConfig, density, tableComments, }: Props<T>): JSX.Element;
68
72
  export declare function tableSort<T>(ignore: boolean, array: T[], comparator: (a: T, b: T) => number): T[];
69
73
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/table/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/table/index.tsx"],"names":[],"mappings":"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"}
@@ -35,6 +35,10 @@ function EnhancedTable(_ref) {
35
35
  orderBy: _orderBy,
36
36
  Renderer = _TableCellRenderer.default,
37
37
  onSelect,
38
+ onPageChange,
39
+ maxItemsPerPage = 100,
40
+ totalRowCount,
41
+ currentPage,
38
42
  DetailsRenderer,
39
43
  sortComparator = _sort.descendingComparator,
40
44
  sortHandler,
@@ -64,8 +68,7 @@ function EnhancedTable(_ref) {
64
68
  const theme = (0, _material.useTheme)();
65
69
  const [order, setOrder] = _react.default.useState(_order);
66
70
  const [orderBy, setOrderBy] = _react.default.useState(_orderBy);
67
- const [maxItemsPerPage] = (0, _react.useState)(100);
68
- const [itemsToSkip, setItemsToSkip] = (0, _react.useState)(0);
71
+ const [internalPage, setInternalPage] = (0, _react.useState)(1);
69
72
  const {
70
73
  isMobile
71
74
  } = (0, _utils.useDeviceInfo)();
@@ -83,12 +86,9 @@ function EnhancedTable(_ref) {
83
86
  }, [columns]);
84
87
  (0, _react.useEffect)(() => {
85
88
  if (displayColumnKeyNames && displayColumnsIndexed) {
86
- const columnsDetails = displayColumnKeyNames.map(key => {
87
- const detail = {
88
- ...displayColumnsIndexed[key]
89
- };
90
- return detail;
91
- });
89
+ const columnsDetails = displayColumnKeyNames.map(key => ({
90
+ ...displayColumnsIndexed[key]
91
+ }));
92
92
  setDisplayColumnDetails(columnsDetails);
93
93
  }
94
94
  }, [displayColumnKeyNames, displayColumnsIndexed]);
@@ -103,15 +103,21 @@ function EnhancedTable(_ref) {
103
103
  });
104
104
  }
105
105
  }, [rows, setSelectedRows]);
106
+ const handleChangePage = (0, _react.useCallback)((event, newPage) => {
107
+ onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange(newPage);
108
+ if (currentPage === undefined) {
109
+ setInternalPage(newPage);
110
+ }
111
+ }, [onPageChange, currentPage]);
106
112
  (0, _react.useEffect)(() => {
107
113
  // this is not most elegant but we want to do this if table was sorted by some column in a presorted table
108
114
  // but we don't know when the data changes, hence this useEffect on the data size
109
- if (isPresorted) {
115
+ if (isPresorted && onPageChange === undefined) {
110
116
  // we want to set page back to 1 if the data changes on presorted lists,
111
117
  // this is because the data was reset due to some sort behavior refetching new data
112
118
  handleChangePage({}, 1);
113
119
  }
114
- }, [rows]);
120
+ }, [handleChangePage, isPresorted, onPageChange, rows]);
115
121
  const handleRequestSort = (event, property) => {
116
122
  const isAsc = orderBy === property && order === 'asc';
117
123
  const newOrder = isAsc ? 'desc' : 'asc';
@@ -151,10 +157,7 @@ function EnhancedTable(_ref) {
151
157
  setSelectedRows(newSelected);
152
158
  }
153
159
  };
154
- const handleChangePage = (event, newPage) => {
155
- setItemsToSkip(maxItemsPerPage * (newPage - 1));
156
- };
157
- function columnsToHeadCells(columnsR) {
160
+ const columnsToHeadCells = (0, _react.useCallback)(columnsR => {
158
161
  return columnsR.map(c => ({
159
162
  id: c.key,
160
163
  disablePadding: true,
@@ -164,13 +167,13 @@ function EnhancedTable(_ref) {
164
167
  }, ...(Array.isArray(c.sx) ? c.sx : [c.sx])],
165
168
  tooltipTitle: c.tooltipTitle
166
169
  }));
167
- }
170
+ }, [density]);
168
171
  const [headCells, setHeadCells] = _react.default.useState();
169
172
  _react.default.useEffect(() => {
170
173
  if (displayColumnDetails) {
171
174
  setHeadCells(columnsToHeadCells(displayColumnDetails));
172
175
  }
173
- }, [displayColumnDetails]);
176
+ }, [columnsToHeadCells, displayColumnDetails]);
174
177
  const sensors = (0, _core.useSensors)((0, _core.useSensor)(_core.MouseSensor), (0, _core.useSensor)(_core.TouchSensor), (0, _core.useSensor)(_core.KeyboardSensor, {
175
178
  coordinateGetter: _sortable.sortableKeyboardCoordinates
176
179
  }));
@@ -191,7 +194,7 @@ function EnhancedTable(_ref) {
191
194
  }
192
195
  }
193
196
  }, [displayColumnKeyNames, setDisplayColumnKeyNames, onReorderEnd]);
194
- function handleDragEnd(event) {
197
+ const handleDragEnd = event => {
195
198
  if (headCells) {
196
199
  const {
197
200
  active,
@@ -206,8 +209,36 @@ function EnhancedTable(_ref) {
206
209
  });
207
210
  }
208
211
  }
209
- }
210
- const pagesCount = Math.ceil(rows.length / maxItemsPerPage);
212
+ };
213
+ const pageNumber = (0, _react.useMemo)(() => currentPage !== null && currentPage !== void 0 ? currentPage : internalPage, [currentPage, internalPage]);
214
+ const sortedPageRows = (0, _react.useMemo)(() => {
215
+ if (rows) {
216
+ const itemsToSkip = onPageChange ? 0 : maxItemsPerPage * (pageNumber - 1);
217
+ return (isPresorted ? rows : (0, _sort.stableSort)(rows, (0, _sort.getComparator)(order, orderBy, sortComparator))).slice(itemsToSkip, itemsToSkip + maxItemsPerPage);
218
+ } else {
219
+ return [];
220
+ }
221
+ }, [rows, onPageChange, maxItemsPerPage, pageNumber, isPresorted, order, orderBy, sortComparator]);
222
+
223
+ /**
224
+ * Calculate pagination numbers to show.
225
+ * If the table is empty (rows.length === 0) override calculation and show '0 of 0'
226
+ * Pagination total is overridden by totalRowCount if provided.
227
+ */
228
+ const paginationTotal = (0, _react.useMemo)(() => totalRowCount || rows.length, [rows.length, totalRowCount]);
229
+ const pagesCount = (0, _react.useMemo)(() => Math.ceil(paginationTotal / maxItemsPerPage), [maxItemsPerPage, paginationTotal]);
230
+ const minRowNumber = (0, _react.useMemo)(() => {
231
+ if (!sortedPageRows.length) {
232
+ return 0;
233
+ }
234
+ return (pageNumber - 1) * maxItemsPerPage + 1;
235
+ }, [pageNumber, maxItemsPerPage, sortedPageRows.length]);
236
+ const maxRowNumber = (0, _react.useMemo)(() => {
237
+ if (!sortedPageRows.length) {
238
+ return 0;
239
+ }
240
+ return Math.min(pageNumber * maxItemsPerPage, paginationTotal);
241
+ }, [pageNumber, maxItemsPerPage, paginationTotal, sortedPageRows.length]);
211
242
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, showTopBar && /*#__PURE__*/_react.default.createElement(_EnhancedTableToolbarV.default, {
212
243
  selectedRowsCount: (selectedRows === null || selectedRows === void 0 ? void 0 : selectedRows.length) || 0,
213
244
  pagesCount: pagesCount,
@@ -240,12 +271,12 @@ function EnhancedTable(_ref) {
240
271
  onReorderEnd: onReorderEndHandler,
241
272
  numSelected: showCheckbox ? selectedRows === null || selectedRows === void 0 ? void 0 : selectedRows.length : undefined,
242
273
  onSelectAllClick: showCheckbox ? handleSelectAllClick : undefined,
243
- rowCount: showCheckbox ? rows === null || rows === void 0 ? void 0 : rows.length : undefined,
274
+ rowCount: showCheckbox ? sortedPageRows === null || sortedPageRows === void 0 ? void 0 : sortedPageRows.length : undefined,
244
275
  density: density
245
- }), /*#__PURE__*/_react.default.createElement(_material.TableBody, null, rows.length < 1 && emptyTableMessage && /*#__PURE__*/_react.default.createElement(_material.TableRow, null, /*#__PURE__*/_react.default.createElement(_material.TableCell, {
276
+ }), /*#__PURE__*/_react.default.createElement(_material.TableBody, null, sortedPageRows.length < 1 && emptyTableMessage && /*#__PURE__*/_react.default.createElement(_material.TableRow, null, /*#__PURE__*/_react.default.createElement(_material.TableCell, {
246
277
  colSpan: columns.length + 1,
247
278
  align: "center"
248
- }, /*#__PURE__*/_react.default.createElement("p", null, emptyTableMessage))), rows && (isPresorted ? rows : (0, _sort.stableSort)(rows, (0, _sort.getComparator)(order, orderBy, sortComparator))).slice(itemsToSkip, itemsToSkip + maxItemsPerPage).map((row, index) => {
279
+ }, /*#__PURE__*/_react.default.createElement("p", null, emptyTableMessage))), sortedPageRows && sortedPageRows.map((row, index) => {
249
280
  const onClick = onSelect && !controlledOnSelect ? () => onSelect(row) : undefined;
250
281
  const isItemSelected = isSelected(row);
251
282
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
@@ -320,18 +351,12 @@ function EnhancedTable(_ref) {
320
351
  alignItems: "center",
321
352
  justifyContent: "flex-end",
322
353
  paddingTop: "24px"
323
- }, rows.length ? itemsToSkip + maxItemsPerPage < rows.length ? /*#__PURE__*/_react.default.createElement(_material.Typography, {
324
- paddingRight: "24px",
325
- fontSize: "14px"
326
- }, renderPaginationText(itemsToSkip + 1, itemsToSkip + maxItemsPerPage, rows.length)) : /*#__PURE__*/_react.default.createElement(_material.Typography, {
327
- paddingRight: "24px",
328
- fontSize: "14px"
329
- }, renderPaginationText(itemsToSkip + 1, rows.length, rows.length)) : /*#__PURE__*/_react.default.createElement(_material.Typography, {
354
+ }, /*#__PURE__*/_react.default.createElement(_material.Typography, {
330
355
  paddingRight: "24px",
331
356
  fontSize: "14px"
332
- }, renderPaginationText(0, 0, 0)), /*#__PURE__*/_react.default.createElement(_material.Pagination, {
357
+ }, renderPaginationText(minRowNumber, maxRowNumber, paginationTotal)), /*#__PURE__*/_react.default.createElement(_material.Pagination, {
333
358
  count: pagesCount,
334
- page: itemsToSkip / maxItemsPerPage + 1,
359
+ page: pageNumber,
335
360
  shape: "rounded",
336
361
  onChange: handleChangePage,
337
362
  siblingCount: isMobile ? 0 : 1,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@terraware/web-components",
3
- "version": "3.9.5",
3
+ "version": "3.9.6-rc.1",
4
4
  "author": "Terraformation Inc.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -1,3 +1,4 @@
1
+ import { Story } from '@storybook/react';
1
2
  import Table, { Props as TableProps } from '../components/table/index';
2
3
  declare const _default: {
3
4
  title: string;
@@ -12,6 +13,12 @@ declare const _default: {
12
13
  };
13
14
  };
14
15
  export default _default;
16
+ export declare const PageChangeCallback: Story<Omit<TableProps<{
17
+ name: string;
18
+ lastname: string;
19
+ }>, 'rows'> & {
20
+ rowCount: number;
21
+ }>;
15
22
  export declare const Default: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, Omit<TableProps<{
16
23
  name: string;
17
24
  lastname: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Table.stories.d.ts","sourceRoot":"","sources":["../../src/stories/Table.stories.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAgC,KAAK,IAAI,UAAU,EAAE,MAAM,2BAA2B,CAAC;;;;;;;;;;;;;AAGrG,wBASE;AA6FF,eAAO,MAAM,OAAO;UAjF0B,MAAM;cAAY,MAAM;;cAA2B,MAAM;EAiF/D,CAAC;AACzC,eAAO,MAAM,UAAU;UAlFuB,MAAM;cAAY,MAAM;;cAA2B,MAAM;EAkF5D,CAAC;AAC5C,eAAO,MAAM,SAAS;UAnFwB,MAAM;cAAY,MAAM;;cAA2B,MAAM;EAmF7D,CAAC;AAC3C,eAAO,MAAM,UAAU;UApFuB,MAAM;cAAY,MAAM;;cAA2B,MAAM;EAoF5D,CAAC;AAC5C,eAAO,MAAM,YAAY;UArFqB,MAAM;cAAY,MAAM;;cAA2B,MAAM;EAqF1D,CAAC"}
1
+ {"version":3,"file":"Table.stories.d.ts","sourceRoot":"","sources":["../../src/stories/Table.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,OAAO,KAAK,EAAE,EAAgC,KAAK,IAAI,UAAU,EAAE,MAAM,2BAA2B,CAAC;;;;;;;;;;;;;AAGrG,wBASE;AA8FF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CACpC,IAAI,CAAC,UAAU,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,MAAM,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAWpF,CAAC;AAEF,eAAO,MAAM,OAAO;UAlB0B,MAAM;cAAY,MAAM;;cAA2B,MAAM;EAkB/D,CAAC;AACzC,eAAO,MAAM,UAAU;UAnBuB,MAAM;cAAY,MAAM;;cAA2B,MAAM;EAmB5D,CAAC;AAC5C,eAAO,MAAM,SAAS;UApBwB,MAAM;cAAY,MAAM;;cAA2B,MAAM;EAoB7D,CAAC;AAC3C,eAAO,MAAM,UAAU;UArBuB,MAAM;cAAY,MAAM;;cAA2B,MAAM;EAqB5D,CAAC;AAC5C,eAAO,MAAM,YAAY;UAtBqB,MAAM;cAAY,MAAM;;cAA2B,MAAM;EAsB1D,CAAC"}