@popmenu/table 0.19.5 → 0.20.0

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.
package/build/index.js CHANGED
@@ -852,9 +852,15 @@ var TableBody = function (props) {
852
852
  return React__default['default'].createElement("tbody", __assign$1({}, restProps), children);
853
853
  };
854
854
 
855
+ var tableConstants = {
856
+ tableTypography: 'body1',
857
+ cellPaddingFactor: 2,
858
+ headerBorder: 2,
859
+ };
860
+
855
861
  var useTableCellStyles = core.makeStyles(function (theme) { return ({
856
862
  root: function () { return ({
857
- padding: theme.spacing(2),
863
+ padding: theme.spacing(tableConstants.cellPaddingFactor),
858
864
  }); },
859
865
  }); });
860
866
 
@@ -876,7 +882,7 @@ var useTableStyles = core.makeStyles(function (_a) {
876
882
  },
877
883
  table: function (_a) {
878
884
  var fullWidth = _a.fullWidth;
879
- return (__assign$1(__assign$1({ borderCollapse: 'collapse' }, (fullWidth && { width: '100%' })), typography.body1));
885
+ return (__assign$1(__assign$1({ borderCollapse: 'collapse' }, (fullWidth && { width: '100%' })), typography[tableConstants.tableTypography]));
880
886
  },
881
887
  tableWrap: function () { return ({
882
888
  maxWidth: '100%',
@@ -942,36 +948,93 @@ var makeColumns = function (config) {
942
948
  /* eslint-disable react/jsx-key */
943
949
  var Table = function (props) {
944
950
  var actionColumnId = 'table-actions-column';
945
- var rawColumns = props.columns, data = props.data, actions = props.actions, sortable = props.sortable, emptyMessage = props.emptyMessage, EmptyImage = props.EmptyImage, isLoading = props.loading, enableMinHeight = props.enableMinHeight;
951
+ var rawColumns = props.columns, data = props.data, actions = props.actions, sortable = props.sortable, emptyMessage = props.emptyMessage, EmptyImage = props.EmptyImage, isLoading = props.loading, fullHeight = props.fullHeight, _a = props.paginationOptions, paginationOptions = _a === void 0 ? {} : _a, _b = props.tableOptions, tableOptions = _b === void 0 ? {} : _b, onPaginate = props.onPaginate;
952
+ var theme = core.useTheme();
946
953
  var classes = useTableStyles(props);
947
954
  var columns = React.useMemo(function () { return makeColumns({ columns: rawColumns, actions: actions, actionColumnId: actionColumnId }); }, [rawColumns, actions]);
948
- var instance = useTable_js.useTable({ columns: columns, data: data, disableSortBy: !sortable }, useSortBy_js.useSortBy, usePagination_js.usePagination);
949
- var getTableProps = instance.getTableProps, getTableBodyProps = instance.getTableBodyProps, headerGroups = instance.headerGroups, page = instance.page, prepareRow = instance.prepareRow, pageCount = instance.pageCount, gotoPage = instance.gotoPage, state = instance.state, rows = instance.rows;
955
+ var initialPaginationState = paginationOptions.initialState, restPaginationOptions = __rest$1(paginationOptions, ["initialState"]);
956
+ var initialState = __assign$1({}, initialPaginationState);
957
+ var instance = useTable_js.useTable(__assign$1(__assign$1({ columns: columns, data: data, disableSortBy: !sortable, initialState: initialState }, restPaginationOptions), tableOptions), useSortBy_js.useSortBy, usePagination_js.usePagination);
958
+ var getTableProps = instance.getTableProps, getTableBodyProps = instance.getTableBodyProps, headerGroups = instance.headerGroups, page = instance.page, prepareRow = instance.prepareRow, pageCount = instance.pageCount, gotoPage = instance.gotoPage, rows = instance.rows;
950
959
  var isPaginated = pageCount > 1;
951
960
  var isEmpty = rows.length === 0;
961
+ var lineHeightRem = parseFloat(theme.typography[tableConstants.tableTypography].lineHeight);
962
+ var documentFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);
963
+ var typographyHeight = lineHeightRem * documentFontSize;
964
+ var cellHeight = typographyHeight + theme.spacing(tableConstants.cellPaddingFactor * 2);
965
+ var headerHeight = cellHeight + tableConstants.headerBorder;
966
+ var bodyHeight = instance.state.pageSize * cellHeight;
967
+ var footerHeight = 88;
968
+ var minHeight = headerHeight + bodyHeight + footerHeight;
952
969
  var handlePagination = function (_e, pageNumber) {
953
- gotoPage(pageNumber - 1);
970
+ var pageIndex = pageNumber - 1;
971
+ if (onPaginate) {
972
+ onPaginate(pageIndex, instance);
973
+ }
974
+ else {
975
+ gotoPage(pageIndex);
976
+ }
954
977
  };
955
- return (React__default['default'].createElement(core.Box, { className: classes.root, minHeight: (isLoading || isEmpty) && enableMinHeight ? 618 : 'unset' },
956
- React__default['default'].createElement(core.Box, { className: classes.tableWrap, minHeight: page.length > 0 && !isLoading && enableMinHeight ? 618 : 'unset' },
978
+ return (React__default['default'].createElement(core.Box, { className: classes.root, minHeight: fullHeight ? minHeight : 'unset' },
979
+ React__default['default'].createElement(core.Box, { className: classes.tableWrap },
957
980
  React__default['default'].createElement("table", __assign$1({ className: classes.table }, getTableProps()),
958
981
  React__default['default'].createElement(TableHeader, null, headerGroups.map(function (headerGroup) { return (React__default['default'].createElement(TableHeaderRow, __assign$1({}, headerGroup.getHeaderGroupProps()), headerGroup.headers.map(function (column) { return (React__default['default'].createElement(TableHeaderCell, __assign$1({}, column.getHeaderProps(column.getSortByToggleProps()), { column: __assign$1(__assign$1({}, column), { isActionColumn: column.id === actionColumnId }), tableProps: props }), column.render('Header'))); }))); })),
959
982
  !isEmpty && !isLoading && (React__default['default'].createElement(TableBody, __assign$1({}, getTableBodyProps()), page.map(function (row) {
960
983
  prepareRow(row);
961
984
  return (React__default['default'].createElement(TableRow, __assign$1({}, row.getRowProps()), row.cells.map(function (cell) { return (React__default['default'].createElement(TableCell, __assign$1({}, cell.getCellProps()), cell.render('Cell'))); })));
962
985
  }))))),
963
- isEmpty && (React__default['default'].createElement(core.Box, { display: "flex", flexDirection: "column", justifyContent: "center", alignItems: "center", p: 2, flexGrow: 1 },
986
+ isEmpty && !isLoading && (React__default['default'].createElement(core.Box, { display: "flex", flexDirection: "column", justifyContent: "center", alignItems: "center", p: 2, flexGrow: 1 },
964
987
  EmptyImage && EmptyImage(),
965
988
  React__default['default'].createElement(Typography, null, emptyMessage))),
966
989
  isLoading && (React__default['default'].createElement(core.Box, { display: "flex", flexDirection: "column", justifyContent: "center", alignItems: "center", p: 2, flexGrow: 1 },
967
990
  React__default['default'].createElement(CircularProgress__default['default'], { size: 80, color: "inherit" }))),
968
- isPaginated && !isLoading && (React__default['default'].createElement(TableFooter, null,
969
- React__default['default'].createElement(lab.Pagination, { count: pageCount, page: state.pageIndex + 1, onChange: handlePagination })))));
991
+ isPaginated && (React__default['default'].createElement(TableFooter, null,
992
+ React__default['default'].createElement(lab.Pagination, { count: pageCount, page: instance.state.pageIndex + 1, onChange: handlePagination })))));
970
993
  };
971
994
  Table.defaultProps = {
972
995
  emptyMessage: 'No results.',
973
- enableMinHeight: true,
996
+ };
997
+
998
+ /**
999
+ * Makes props for the Table component that will enable manual pagination and also provides page state.
1000
+ */
1001
+ var useManualPagination = function (config) {
1002
+ var _a = config.initialPageIndex, initialPageIndex = _a === void 0 ? 0 : _a, _b = config.initialPageSize, initialPageSize = _b === void 0 ? 10 : _b, total = config.total, onPaginate = config.onPaginate;
1003
+ var _c = React.useState(0), pageIndex = _c[0], setPageIndex = _c[1];
1004
+ var _d = React.useState(initialPageSize), pageSize = _d[0], setPageSize = _d[1];
1005
+ var handlePagination = function (index, instance) {
1006
+ if (onPaginate) {
1007
+ onPaginate({ index: index, instance: instance }, setPageIndex);
1008
+ }
1009
+ else {
1010
+ setPageIndex(index);
1011
+ }
1012
+ };
1013
+ var manualPaginationProps = {
1014
+ onPaginate: handlePagination,
1015
+ tableOptions: {
1016
+ useControlledState: function (state) {
1017
+ return React.useMemo(function () { return (__assign$1(__assign$1({}, state), { pageIndex: pageIndex, pageSize: pageSize })); }, [pageIndex, pageSize]);
1018
+ },
1019
+ },
1020
+ paginationOptions: {
1021
+ initialState: { pageIndex: initialPageIndex, pageSize: pageSize },
1022
+ manualPagination: true,
1023
+ pageCount: Math.ceil(total / pageSize),
1024
+ },
1025
+ };
1026
+ var pageState = {
1027
+ pageIndex: pageIndex,
1028
+ pageSize: pageSize,
1029
+ setPageIndex: setPageIndex,
1030
+ setPageSize: setPageSize,
1031
+ };
1032
+ return {
1033
+ manualPaginationProps: manualPaginationProps,
1034
+ pageState: pageState,
1035
+ };
974
1036
  };
975
1037
 
976
1038
  exports.Table = Table;
1039
+ exports.useManualPagination = useManualPagination;
977
1040
  //# sourceMappingURL=index.js.map