@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/components/Table/TableProps.d.ts +14 -3
- package/build/hooks/index.d.ts +1 -0
- package/build/hooks/useManualPagination/index.d.ts +1 -0
- package/build/hooks/useManualPagination/useManualPagination.d.ts +5 -0
- package/build/hooks/useManualPagination/useManualPaginationTypes.d.ts +52 -0
- package/build/index.d.ts +1 -0
- package/build/index.es.js +76 -14
- package/build/index.es.js.map +1 -1
- package/build/index.js +75 -12
- package/build/index.js.map +1 -1
- package/build/util/index.d.ts +1 -0
- package/build/util/tableConstants.d.ts +5 -0
- package/package.json +2 -2
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(
|
|
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.
|
|
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,
|
|
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
|
|
949
|
-
var
|
|
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
|
-
|
|
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:
|
|
956
|
-
React__default['default'].createElement(core.Box, { className: classes.tableWrap
|
|
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 &&
|
|
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
|
-
|
|
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
|