mui-datatables-updated 1.0.1 → 1.0.3
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/LICENSE +21 -21
- package/README.md +185 -175
- package/dist/components/MUITable.d.ts +4 -3
- package/dist/components/TableHead.d.ts +2 -2
- package/dist/components/Toolbar.d.ts +3 -3
- package/dist/components/utils.d.ts +11 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +112 -65
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +112 -65
- package/dist/index.js.map +1 -1
- package/dist/tests/MUITable.performance.test.d.ts +1 -0
- package/dist/tests/MUITable.test.d.ts +1 -0
- package/dist/tests/setup.d.ts +1 -0
- package/dist/tests/test-data.d.ts +2 -2
- package/dist/tests/utils.test.d.ts +1 -0
- package/package.json +82 -58
- package/dist/components/table.d.ts +0 -1
- package/dist/components/test-data.d.ts +0 -11
- package/rollup.config.mjs +0 -23
- package/src/components/MUITable.tsx +0 -344
- package/src/components/TableHead.tsx +0 -81
- package/src/components/Toolbar.tsx +0 -340
- package/src/components/utils.ts +0 -17
- package/src/index.ts +0 -3
- package/tsconfig.json +0 -24
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var tslib_es6_js = require('/Users/DJACOBOM/Code/Djmr5/mui-datatables-updated/node_modules/tslib/tslib.es6.js');
|
|
3
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
5
|
var Checkbox = require('@mui/material/Checkbox');
|
|
5
6
|
var Paper = require('@mui/material/Paper');
|
|
@@ -21,40 +22,6 @@ var SearchIcon = require('@mui/icons-material/Search');
|
|
|
21
22
|
var material = require('@mui/material');
|
|
22
23
|
var styles = require('@mui/material/styles');
|
|
23
24
|
|
|
24
|
-
/******************************************************************************
|
|
25
|
-
Copyright (c) Microsoft Corporation.
|
|
26
|
-
|
|
27
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
28
|
-
purpose with or without fee is hereby granted.
|
|
29
|
-
|
|
30
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
31
|
-
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
32
|
-
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
33
|
-
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
34
|
-
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
35
|
-
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
36
|
-
PERFORMANCE OF THIS SOFTWARE.
|
|
37
|
-
***************************************************************************** */
|
|
38
|
-
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
function __rest(s, e) {
|
|
42
|
-
var t = {};
|
|
43
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
44
|
-
t[p] = s[p];
|
|
45
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
46
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
47
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
48
|
-
t[p[i]] = s[p[i]];
|
|
49
|
-
}
|
|
50
|
-
return t;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
54
|
-
var e = new Error(message);
|
|
55
|
-
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
25
|
function EnhancedTableHead({ onSelectAllClick, order, orderBy, numSelected, rowCount, onRequestSort, columns, deactivateSelectAll, }) {
|
|
59
26
|
const createSortHandler = (property) => (event) => {
|
|
60
27
|
onRequestSort(event, property);
|
|
@@ -64,10 +31,81 @@ function EnhancedTableHead({ onSelectAllClick, order, orderBy, numSelected, rowC
|
|
|
64
31
|
'aria-label': 'select all items',
|
|
65
32
|
} }) }), columns.map((column) => {
|
|
66
33
|
var _a;
|
|
67
|
-
return (jsxRuntime.jsx(TableCell, { padding: 'normal', sortDirection: orderBy === column.name ? order : false, children: ((_a = column.options) === null || _a ===
|
|
34
|
+
return (jsxRuntime.jsx(TableCell, { padding: 'normal', sortDirection: orderBy === column.name ? order : false, children: ((_a = column.options) === null || _a === void 0 ? void 0 : _a.sort) !== false ? (jsxRuntime.jsxs(TableSortLabel, { active: orderBy === column.name, direction: orderBy === column.name ? order : 'asc', onClick: createSortHandler(column.name), sx: { fontWeight: 'bold' }, children: [column.label, orderBy === column.name ? (jsxRuntime.jsx(Box, { component: "span", sx: utils.visuallyHidden, children: order === 'desc' ? 'sorted descending' : 'sorted ascending' })) : null] })) : (jsxRuntime.jsx("span", { style: { fontWeight: 700 }, children: column.label })) }, String(column.name)));
|
|
68
35
|
})] }) }));
|
|
69
36
|
}
|
|
70
37
|
|
|
38
|
+
function getComparator(order, orderBy) {
|
|
39
|
+
return order === 'desc'
|
|
40
|
+
? (a, b) => descendingComparator(a[orderBy], b[orderBy])
|
|
41
|
+
: (a, b) => -descendingComparator(a[orderBy], b[orderBy]);
|
|
42
|
+
}
|
|
43
|
+
function descendingComparator(a, b) {
|
|
44
|
+
if (b < a)
|
|
45
|
+
return -1;
|
|
46
|
+
if (b > a)
|
|
47
|
+
return 1;
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
function toSearchTokens(value) {
|
|
51
|
+
if (value === null || value === undefined)
|
|
52
|
+
return [];
|
|
53
|
+
if (Array.isArray(value)) {
|
|
54
|
+
return value.reduce((tokens, item) => {
|
|
55
|
+
tokens.push(...toSearchTokens(item));
|
|
56
|
+
return tokens;
|
|
57
|
+
}, []);
|
|
58
|
+
}
|
|
59
|
+
if (value instanceof Date) {
|
|
60
|
+
return [value.toISOString().toLowerCase()];
|
|
61
|
+
}
|
|
62
|
+
const valueType = typeof value;
|
|
63
|
+
if (valueType === 'string' ||
|
|
64
|
+
valueType === 'number' ||
|
|
65
|
+
valueType === 'boolean' ||
|
|
66
|
+
valueType === 'bigint') {
|
|
67
|
+
return [String(value).toLowerCase()];
|
|
68
|
+
}
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
function getColumnSearchTokens(row, column) {
|
|
72
|
+
var _a, _b;
|
|
73
|
+
const rawValue = row[column.name];
|
|
74
|
+
const rawTokens = toSearchTokens(rawValue);
|
|
75
|
+
const customSearchValue = (_a = column.options) === null || _a === void 0 ? void 0 : _a.customSearchValue;
|
|
76
|
+
const customBodyRender = (_b = column.options) === null || _b === void 0 ? void 0 : _b.customBodyRender;
|
|
77
|
+
const renderedValue = customSearchValue
|
|
78
|
+
? customSearchValue(rawValue, row)
|
|
79
|
+
: customBodyRender
|
|
80
|
+
? customBodyRender(rawValue)
|
|
81
|
+
: undefined;
|
|
82
|
+
const renderedTokens = toSearchTokens(renderedValue);
|
|
83
|
+
return [...rawTokens, ...renderedTokens];
|
|
84
|
+
}
|
|
85
|
+
function columnMatchesSearchQuery(row, column, searchQuery) {
|
|
86
|
+
const normalizedQuery = searchQuery.toLowerCase();
|
|
87
|
+
if (!normalizedQuery)
|
|
88
|
+
return true;
|
|
89
|
+
return getColumnSearchTokens(row, column).some((token) => token.includes(normalizedQuery));
|
|
90
|
+
}
|
|
91
|
+
function rowMatchesSearchQuery(row, columns, searchQuery) {
|
|
92
|
+
const normalizedQuery = searchQuery.toLowerCase();
|
|
93
|
+
if (!normalizedQuery)
|
|
94
|
+
return true;
|
|
95
|
+
return columns.some((column) => columnMatchesSearchQuery(row, column, normalizedQuery));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function isSameFilterConfig(a, b) {
|
|
99
|
+
if (a.length !== b.length)
|
|
100
|
+
return false;
|
|
101
|
+
return a.every((entry, index) => {
|
|
102
|
+
const other = b[index];
|
|
103
|
+
return (entry.key === other.key &&
|
|
104
|
+
entry.type === other.type &&
|
|
105
|
+
entry.min === other.min &&
|
|
106
|
+
entry.max === other.max);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
71
109
|
function EnhancedTableToolbar(props) {
|
|
72
110
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
73
111
|
const { title, numSelected, selected, onFilterChange, onSearch, printFn, columns, CustomToolbar, CustomSelectedToolbar, data, options } = props;
|
|
@@ -77,6 +115,7 @@ function EnhancedTableToolbar(props) {
|
|
|
77
115
|
// rest value to force re-render of filters
|
|
78
116
|
const [resetCounter, setResetCounter] = React.useState(0);
|
|
79
117
|
const [openSearch, setOpenSearch] = React.useState(false);
|
|
118
|
+
const [searchValue, setSearchValue] = React.useState('');
|
|
80
119
|
function downloadCSV(data, filename = "data.csv") {
|
|
81
120
|
// Base case
|
|
82
121
|
if (data.length === 0) {
|
|
@@ -85,7 +124,7 @@ function EnhancedTableToolbar(props) {
|
|
|
85
124
|
}
|
|
86
125
|
// Create CSV content
|
|
87
126
|
const headers = Object.keys(data[0]);
|
|
88
|
-
const csvRows = data.map(obj => headers.map(field => { var _a; return JSON.stringify((_a = obj[field]) !== null && _a !==
|
|
127
|
+
const csvRows = data.map(obj => headers.map(field => { var _a; return JSON.stringify((_a = obj[field]) !== null && _a !== void 0 ? _a : ""); }).join(","));
|
|
89
128
|
const csvContent = [headers.join(","), ...csvRows].join("\n");
|
|
90
129
|
// Create Blob and download
|
|
91
130
|
const blob = new Blob([csvContent], { type: "text/csv" });
|
|
@@ -111,7 +150,15 @@ function EnhancedTableToolbar(props) {
|
|
|
111
150
|
max: isNumber ? Math.max(...values) : undefined,
|
|
112
151
|
};
|
|
113
152
|
});
|
|
114
|
-
setFilterConfig(
|
|
153
|
+
setFilterConfig((previousConfig) => {
|
|
154
|
+
if (isSameFilterConfig(previousConfig, inferredConfig)) {
|
|
155
|
+
return previousConfig;
|
|
156
|
+
}
|
|
157
|
+
return inferredConfig;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
setFilterConfig((previousConfig) => (previousConfig.length === 0 ? previousConfig : []));
|
|
115
162
|
}
|
|
116
163
|
}, [data, columns]);
|
|
117
164
|
React.useEffect(() => {
|
|
@@ -125,6 +172,10 @@ function EnhancedTableToolbar(props) {
|
|
|
125
172
|
return rowValue >= min && rowValue <= max;
|
|
126
173
|
}
|
|
127
174
|
if (filter.type === "string") {
|
|
175
|
+
const column = columns.find((candidate) => candidate.name === filter.key);
|
|
176
|
+
if (column) {
|
|
177
|
+
return columnMatchesSearchQuery(row, column, String(filter.value));
|
|
178
|
+
}
|
|
128
179
|
return rowValue.toString().toLowerCase().includes(filter.value.toLowerCase());
|
|
129
180
|
}
|
|
130
181
|
if (filter.type === "boolean") {
|
|
@@ -144,6 +195,15 @@ function EnhancedTableToolbar(props) {
|
|
|
144
195
|
const handleSearchChange = () => {
|
|
145
196
|
setOpenSearch((prev) => !prev);
|
|
146
197
|
};
|
|
198
|
+
const handleSearchInputChange = (value) => {
|
|
199
|
+
setSearchValue(value);
|
|
200
|
+
onSearch(value);
|
|
201
|
+
};
|
|
202
|
+
const handleClearSearch = () => {
|
|
203
|
+
setSearchValue('');
|
|
204
|
+
onSearch('');
|
|
205
|
+
setOpenSearch(false);
|
|
206
|
+
};
|
|
147
207
|
const open = Boolean(anchorEl);
|
|
148
208
|
const getFilter = (key) => filters.find((filter) => filter.key === key);
|
|
149
209
|
const updateFilter = (updatedFilter) => {
|
|
@@ -184,9 +244,9 @@ function EnhancedTableToolbar(props) {
|
|
|
184
244
|
return (jsxRuntime.jsxs(material.Toolbar, { sx: [
|
|
185
245
|
{ px: { sm: 2 }, borderBottom: 1, borderColor: "divider" },
|
|
186
246
|
numSelected > 0 && { bgcolor: (theme) => styles.alpha(theme.palette.primary.main, theme.palette.action.activatedOpacity) },
|
|
187
|
-
], children: [numSelected > 0 ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(material.Typography, { sx: { flex: "1 1 100%" }, color: "inherit", variant: "subtitle1", component: "div", children: ((_a = options === null || options ===
|
|
247
|
+
], children: [numSelected > 0 ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(material.Typography, { sx: { flex: "1 1 100%" }, color: "inherit", variant: "subtitle1", component: "div", children: ((_a = options === null || options === void 0 ? void 0 : options.translations) === null || _a === void 0 ? void 0 : _a.selectedTextRenderer)
|
|
188
248
|
? options.translations.selectedTextRenderer(numSelected)
|
|
189
|
-
: `${numSelected} selected` }), CustomSelectedToolbar && (jsxRuntime.jsx(CustomSelectedToolbar, { data: data, selected: selected }))] })) : (jsxRuntime.jsxs(material.Stack, { direction: "row", justifyContent: "space-between", width: "100%", alignItems: "center", children: [openSearch ? (jsxRuntime.jsxs(material.Stack, { direction: "row", alignItems: "center", children: [jsxRuntime.jsx(SearchIcon, {}), jsxRuntime.jsx(material.TextField, { placeholder: ((_b = options === null || options ===
|
|
249
|
+
: `${numSelected} selected` }), CustomSelectedToolbar && (jsxRuntime.jsx(CustomSelectedToolbar, { data: data, selected: selected }))] })) : (jsxRuntime.jsxs(material.Stack, { direction: "row", justifyContent: "space-between", width: "100%", alignItems: "center", children: [openSearch ? (jsxRuntime.jsxs(material.Stack, { direction: "row", alignItems: "center", children: [jsxRuntime.jsx(SearchIcon, {}), jsxRuntime.jsx(material.TextField, { placeholder: ((_b = options === null || options === void 0 ? void 0 : options.translations) === null || _b === void 0 ? void 0 : _b.searchPlaceholder) || "Search...", value: searchValue, onChange: (e) => handleSearchInputChange(e.target.value), variant: "standard", autoFocus: true, fullWidth: true, sx: { marginLeft: 1 } }), jsxRuntime.jsx(material.IconButton, { onClick: handleClearSearch, "aria-label": "Clear search", sx: { '&:hover': { color: 'error.main' } }, children: jsxRuntime.jsx(iconsMaterial.Close, {}) })] })) : (jsxRuntime.jsx(material.Typography, { sx: { flex: "1 1 100%", alignContent: "center", paddingLeft: 1 }, variant: "h6", id: "tableTitle", component: "div", children: title })), jsxRuntime.jsxs(material.Stack, { direction: "row", spacing: 0.5, children: [jsxRuntime.jsx(material.Tooltip, { title: ((_c = options === null || options === void 0 ? void 0 : options.translations) === null || _c === void 0 ? void 0 : _c.searchTooltip) || "Search", children: jsxRuntime.jsx(material.IconButton, { onClick: handleSearchChange, children: jsxRuntime.jsx(SearchIcon, {}) }) }), jsxRuntime.jsx(material.Tooltip, { title: ((_d = options === null || options === void 0 ? void 0 : options.translations) === null || _d === void 0 ? void 0 : _d.downloadTooltip) || "Download CSV", children: jsxRuntime.jsx(material.IconButton, { onClick: () => downloadCSV(data, "data.csv"), children: jsxRuntime.jsx(iconsMaterial.CloudDownload, {}) }) }), jsxRuntime.jsx(material.Tooltip, { title: ((_e = options === null || options === void 0 ? void 0 : options.translations) === null || _e === void 0 ? void 0 : _e.printTooltip) || "Print", children: jsxRuntime.jsx(material.IconButton, { onClick: () => printFn(), children: jsxRuntime.jsx(iconsMaterial.Print, {}) }) }), jsxRuntime.jsx(material.Tooltip, { title: ((_f = options === null || options === void 0 ? void 0 : options.translations) === null || _f === void 0 ? void 0 : _f.filterTooltip) || "Filter list", children: jsxRuntime.jsx(material.IconButton, { onClick: handleOpen, children: jsxRuntime.jsx(FilterListIcon, {}) }) }), CustomToolbar && jsxRuntime.jsx(CustomToolbar, {})] })] })), jsxRuntime.jsxs(material.Popover, { open: open, anchorEl: anchorEl, onClose: handleClose, anchorOrigin: {
|
|
190
250
|
vertical: "bottom",
|
|
191
251
|
horizontal: "right",
|
|
192
252
|
}, transformOrigin: {
|
|
@@ -194,39 +254,26 @@ function EnhancedTableToolbar(props) {
|
|
|
194
254
|
horizontal: "right",
|
|
195
255
|
}, slotProps: {
|
|
196
256
|
paper: { sx: { width: "20%", padding: 2, boxShadow: 2 } }
|
|
197
|
-
}, children: [jsxRuntime.jsxs(material.Stack, { direction: "row", justifyContent: "space-between", children: [jsxRuntime.jsx(material.Typography, { variant: "h6", sx: { marginBottom: 2 }, children: ((_g = options === null || options ===
|
|
257
|
+
}, children: [jsxRuntime.jsxs(material.Stack, { direction: "row", justifyContent: "space-between", children: [jsxRuntime.jsx(material.Typography, { variant: "h6", sx: { marginBottom: 2 }, children: ((_g = options === null || options === void 0 ? void 0 : options.translations) === null || _g === void 0 ? void 0 : _g.filtersTitle) || "Filters" }), jsxRuntime.jsx(material.Button, { variant: "contained", size: "small", sx: { height: "fit-content" }, onClick: resetFilters, children: ((_h = options === null || options === void 0 ? void 0 : options.translations) === null || _h === void 0 ? void 0 : _h.resetButtonText) || "Reset" })] }), jsxRuntime.jsx(material.Stack, { children: filterConfig.map(({ key, type, min, max }) => {
|
|
198
258
|
var _a, _b, _c, _d, _e, _f;
|
|
199
259
|
const currentFilter = getFilter(key);
|
|
200
|
-
return (jsxRuntime.jsxs(material.Box, { children: [jsxRuntime.jsx(material.Typography, { variant: "subtitle1", children: (_a = columns.find((cell) => cell.name === key)) === null || _a ===
|
|
201
|
-
(_c = (_b = currentFilter === null || currentFilter ===
|
|
202
|
-
(_e = (_d = currentFilter === null || currentFilter ===
|
|
260
|
+
return (jsxRuntime.jsxs(material.Box, { children: [jsxRuntime.jsx(material.Typography, { variant: "subtitle1", children: (_a = columns.find((cell) => cell.name === key)) === null || _a === void 0 ? void 0 : _a.label }), type === "number" && min !== undefined && max !== undefined && (jsxRuntime.jsx(material.Slider, { value: [
|
|
261
|
+
(_c = (_b = currentFilter === null || currentFilter === void 0 ? void 0 : currentFilter.value) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : min,
|
|
262
|
+
(_e = (_d = currentFilter === null || currentFilter === void 0 ? void 0 : currentFilter.value) === null || _d === void 0 ? void 0 : _d[1]) !== null && _e !== void 0 ? _e : max,
|
|
203
263
|
], onChange: (_, newValue) => {
|
|
204
264
|
const [newMin, newMax] = newValue;
|
|
205
265
|
handleFilterChange(key, [newMin, newMax]);
|
|
206
|
-
}, valueLabelDisplay: "auto", min: min || 0, max: max || 100, step: 1 })), type === "string" && (jsxRuntime.jsx(material.TextField, { placeholder: ((_f = options === null || options ===
|
|
266
|
+
}, valueLabelDisplay: "auto", min: min || 0, max: max || 100, step: 1 })), type === "string" && (jsxRuntime.jsx(material.TextField, { placeholder: ((_f = options === null || options === void 0 ? void 0 : options.translations) === null || _f === void 0 ? void 0 : _f.searchPlaceholder) || "Search...", size: "small", value: (currentFilter === null || currentFilter === void 0 ? void 0 : currentFilter.value) || "", onChange: (e) => handleFilterChange(key, e.target.value), sx: {
|
|
207
267
|
marginBottom: 1,
|
|
208
268
|
paddingY: 0.5,
|
|
209
269
|
width: "100%",
|
|
210
|
-
} })), type === "boolean" && (jsxRuntime.jsxs(material.Box, { display: "flex", alignItems: "center", children: [jsxRuntime.jsx(material.Checkbox, { checked: (currentFilter === null || currentFilter ===
|
|
270
|
+
} })), type === "boolean" && (jsxRuntime.jsxs(material.Box, { display: "flex", alignItems: "center", children: [jsxRuntime.jsx(material.Checkbox, { checked: (currentFilter === null || currentFilter === void 0 ? void 0 : currentFilter.value) === true, onChange: (e) => handleFilterChange(key, e.target.checked) }), currentFilter && (jsxRuntime.jsx(iconsMaterial.Close, { color: "error", sx: { cursor: "pointer", fontSize: 15 }, onClick: () => handleFilterChange(key, undefined) }))] }))] }, key));
|
|
211
271
|
}) }, resetCounter)] })] }));
|
|
212
272
|
}
|
|
213
273
|
|
|
214
|
-
function getComparator(order, orderBy) {
|
|
215
|
-
return order === 'desc'
|
|
216
|
-
? (a, b) => descendingComparator(a[orderBy], b[orderBy])
|
|
217
|
-
: (a, b) => -descendingComparator(a[orderBy], b[orderBy]);
|
|
218
|
-
}
|
|
219
|
-
function descendingComparator(a, b) {
|
|
220
|
-
if (b < a)
|
|
221
|
-
return -1;
|
|
222
|
-
if (b > a)
|
|
223
|
-
return 1;
|
|
224
|
-
return 0;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
274
|
const MUITable = (_a) => {
|
|
228
275
|
var _b, _c;
|
|
229
|
-
var { title, data, deactivateSelect, defaultOrderBy, defaultOrder, excludedColumns, columns: passedColumns, CustomToolbar, CustomSelectedToolbar, options } = _a, rest = __rest(_a, ["title", "data", "deactivateSelect", "defaultOrderBy", "defaultOrder", "excludedColumns", "columns", "CustomToolbar", "CustomSelectedToolbar", "options"]);
|
|
276
|
+
var { title, data, deactivateSelect, defaultOrderBy, defaultOrder, excludedColumns, columns: passedColumns, CustomToolbar, CustomSelectedToolbar, options } = _a, rest = tslib_es6_js.__rest(_a, ["title", "data", "deactivateSelect", "defaultOrderBy", "defaultOrder", "excludedColumns", "columns", "CustomToolbar", "CustomSelectedToolbar", "options"]);
|
|
230
277
|
const tableRef = React.useRef(null);
|
|
231
278
|
const reactToPrintFn = reactToPrint.useReactToPrint({ contentRef: tableRef });
|
|
232
279
|
const getDefaultOrderByKey = React.useCallback(() => {
|
|
@@ -268,7 +315,7 @@ const MUITable = (_a) => {
|
|
|
268
315
|
label: key.charAt(0).toUpperCase() + key.slice(1),
|
|
269
316
|
}));
|
|
270
317
|
}, [data, excludedColumns]);
|
|
271
|
-
const columns = passedColumns || generateColumns();
|
|
318
|
+
const columns = React.useMemo(() => passedColumns || generateColumns(), [passedColumns, generateColumns]);
|
|
272
319
|
const handleSearch = (query) => {
|
|
273
320
|
setState((prevState) => (Object.assign(Object.assign({}, prevState), { searchQuery: query.toLowerCase() })));
|
|
274
321
|
};
|
|
@@ -281,8 +328,7 @@ const MUITable = (_a) => {
|
|
|
281
328
|
// Apply filters, search query, and sort data
|
|
282
329
|
const sortedData = [...data]
|
|
283
330
|
.filter(state.filterFunc)
|
|
284
|
-
.filter((row) =>
|
|
285
|
-
value.toLowerCase().includes(state.searchQuery)))
|
|
331
|
+
.filter((row) => rowMatchesSearchQuery(row, columns, state.searchQuery))
|
|
286
332
|
.sort(getComparator(state.order, state.orderBy));
|
|
287
333
|
// Paginate the processed data
|
|
288
334
|
const startIndex = state.page * state.rowsPerPage;
|
|
@@ -297,6 +343,7 @@ const MUITable = (_a) => {
|
|
|
297
343
|
state.rowsPerPage,
|
|
298
344
|
state.searchQuery,
|
|
299
345
|
data,
|
|
346
|
+
columns,
|
|
300
347
|
]);
|
|
301
348
|
// Remove selected rows deleted from the data to prevent stale selected state
|
|
302
349
|
React.useEffect(() => {
|
|
@@ -350,14 +397,14 @@ const MUITable = (_a) => {
|
|
|
350
397
|
'aria-labelledby': labelId,
|
|
351
398
|
} }) })), columns.map((column, cellIndex) => {
|
|
352
399
|
var _a;
|
|
353
|
-
return (jsxRuntime.jsx(TableCell, { component: cellIndex === 0 ? "th" : undefined, id: cellIndex === 0 ? labelId : undefined, scope: cellIndex === 0 ? "row" : undefined, padding: "normal", children: ((_a = column.options) === null || _a ===
|
|
400
|
+
return (jsxRuntime.jsx(TableCell, { component: cellIndex === 0 ? "th" : undefined, id: cellIndex === 0 ? labelId : undefined, scope: cellIndex === 0 ? "row" : undefined, padding: "normal", children: ((_a = column.options) === null || _a === void 0 ? void 0 : _a.customBodyRender)
|
|
354
401
|
? column.options.customBodyRender(row[column.name])
|
|
355
402
|
: String(row[column.name]) }, String(column.name)));
|
|
356
403
|
})] }, index));
|
|
357
404
|
}), state.emptyRows > 0 && (jsxRuntime.jsx(TableRow, { style: {
|
|
358
405
|
height: 33 * state.emptyRows,
|
|
359
|
-
}, children: jsxRuntime.jsx(TableCell, { colSpan: columns.length + 1 }) }))] })] }) }), jsxRuntime.jsx(TablePagination, { rowsPerPageOptions: [5, 10, 25], component: "div", count: state.currentData.length, rowsPerPage: state.rowsPerPage, page: state.page, onPageChange: handleChangePage, onRowsPerPageChange: handleChangeRowsPerPage, labelRowsPerPage: ((_b = options === null || options ===
|
|
406
|
+
}, children: jsxRuntime.jsx(TableCell, { colSpan: columns.length + 1 }) }))] })] }) }), jsxRuntime.jsx(TablePagination, { rowsPerPageOptions: [5, 10, 25], component: "div", count: state.currentData.length, rowsPerPage: state.rowsPerPage, page: state.page, onPageChange: handleChangePage, onRowsPerPageChange: handleChangeRowsPerPage, labelRowsPerPage: ((_b = options === null || options === void 0 ? void 0 : options.translations) === null || _b === void 0 ? void 0 : _b.rowsPerPageText) || "Rows per page", labelDisplayedRows: ((_c = options === null || options === void 0 ? void 0 : options.translations) === null || _c === void 0 ? void 0 : _c.labelDisplayedRows) || (({ from, to, count }) => `${from}-${to} of ${count}`) })] }) })));
|
|
360
407
|
};
|
|
361
408
|
|
|
362
|
-
|
|
409
|
+
exports.MUITable = MUITable;
|
|
363
410
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/TableHead.tsx","../src/components/utils.ts","../src/components/Toolbar.tsx","../src/components/MUITable.tsx"],"sourcesContent":["import Box from '@mui/material/Box';\nimport Checkbox from '@mui/material/Checkbox';\nimport TableCell from '@mui/material/TableCell';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TableSortLabel from '@mui/material/TableSortLabel';\nimport { visuallyHidden } from '@mui/utils';\nimport type { Column } from './MUITable';\nimport type { Order } from './utils';\n\ninterface EnhancedTableProps<T> {\n numSelected: number;\n onRequestSort: (event: React.MouseEvent<unknown>, property: keyof T) => void;\n onSelectAllClick?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n order: Order;\n orderBy: keyof T;\n rowCount: number;\n columns: Column[];\n deactivateSelectAll?: boolean;\n}\n\nexport function EnhancedTableHead<T>({\n onSelectAllClick,\n order,\n orderBy,\n numSelected,\n rowCount,\n onRequestSort,\n columns,\n deactivateSelectAll,\n}: EnhancedTableProps<T>) {\n const createSortHandler =\n (property: keyof T) => (event: React.MouseEvent<unknown>) => {\n onRequestSort(event, property);\n };\n\n return (\n <TableHead>\n <TableRow>\n {!deactivateSelectAll &&\n <TableCell padding=\"checkbox\">\n <Checkbox\n color=\"primary\"\n indeterminate={numSelected > 0 && numSelected < rowCount}\n checked={rowCount > 0 && numSelected === rowCount}\n onChange={onSelectAllClick}\n inputProps={{\n 'aria-label': 'select all items',\n }}\n />\n </TableCell>\n }\n {columns.map((column) => (\n <TableCell\n key={String(column.name)}\n padding='normal'\n sortDirection={orderBy === column.name ? order : false}\n >\n {column.options?.sort !== false ? (\n <TableSortLabel\n active={orderBy === column.name}\n direction={orderBy === column.name ? order : 'asc'}\n onClick={createSortHandler(column.name as keyof T)}\n sx={{ fontWeight: 'bold' }}\n >\n {column.label}\n {orderBy === column.name ? (\n <Box component=\"span\" sx={visuallyHidden}>\n {order === 'desc' ? 'sorted descending' : 'sorted ascending'}\n </Box>\n ) : null}\n </TableSortLabel>\n ) : (\n <span style={{ fontWeight: 700 }}>{column.label}</span>\n )}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n );\n}\n","export type Order = 'asc' | 'desc';\n\nexport interface SearchColumn<T extends object> {\n name: string;\n options?: {\n customBodyRender?: (value: any) => unknown;\n customSearchValue?: (value: any, row: Record<string, any>) => unknown;\n };\n}\n\nexport function getComparator<T, Key extends keyof T>(\n order: Order,\n orderBy: Key,\n): (a: T, b: T) => number {\n return order === 'desc'\n ? (a, b) => descendingComparator(a[orderBy], b[orderBy])\n : (a, b) => -descendingComparator(a[orderBy], b[orderBy]);\n}\n\nfunction descendingComparator<T>(a: T, b: T): number {\n if (b < a) return -1;\n if (b > a) return 1;\n return 0;\n}\n\nexport function toSearchTokens(value: unknown): string[] {\n if (value === null || value === undefined) return [];\n\n if (Array.isArray(value)) {\n return value.reduce<string[]>((tokens, item: unknown) => {\n tokens.push(...toSearchTokens(item));\n return tokens;\n }, []);\n }\n\n if (value instanceof Date) {\n return [value.toISOString().toLowerCase()];\n }\n\n const valueType = typeof value;\n if (\n valueType === 'string' ||\n valueType === 'number' ||\n valueType === 'boolean' ||\n valueType === 'bigint'\n ) {\n return [String(value).toLowerCase()];\n }\n\n return [];\n}\n\nexport function getColumnSearchTokens<T extends object>(\n row: T,\n column: SearchColumn<T>,\n): string[] {\n const rawValue = (row as Record<string, unknown>)[column.name];\n const rawTokens = toSearchTokens(rawValue);\n\n const customSearchValue = column.options?.customSearchValue;\n const customBodyRender = column.options?.customBodyRender;\n\n const renderedValue = customSearchValue\n ? customSearchValue(rawValue, row as Record<string, any>)\n : customBodyRender\n ? customBodyRender(rawValue)\n : undefined;\n\n const renderedTokens = toSearchTokens(renderedValue);\n return [...rawTokens, ...renderedTokens];\n}\n\nexport function columnMatchesSearchQuery<T extends object>(\n row: T,\n column: SearchColumn<T>,\n searchQuery: string,\n): boolean {\n const normalizedQuery = searchQuery.toLowerCase();\n if (!normalizedQuery) return true;\n\n return getColumnSearchTokens(row, column).some((token) =>\n token.includes(normalizedQuery),\n );\n}\n\nexport function rowMatchesSearchQuery<T extends object>(\n row: T,\n columns: SearchColumn<T>[],\n searchQuery: string,\n): boolean {\n const normalizedQuery = searchQuery.toLowerCase();\n\n if (!normalizedQuery) return true;\n\n return columns.some((column) => columnMatchesSearchQuery(row, column, normalizedQuery));\n}\n\n","import { Close, CloudDownload, Print } from \"@mui/icons-material\";\nimport FilterListIcon from \"@mui/icons-material/FilterList\";\nimport SearchIcon from \"@mui/icons-material/Search\";\nimport { Box, Button, Checkbox, IconButton, Popover, Slider, Stack, TextField, Toolbar, Tooltip, Typography } from \"@mui/material\";\nimport { alpha } from \"@mui/material/styles\";\nimport React, { useEffect, useState } from \"react\";\nimport type { Column, Options } from \"./MUITable\";\nimport type { UseReactToPrintFn } from \"react-to-print\";\nimport { columnMatchesSearchQuery } from \"./utils\";\n\ninterface Filter {\n key: string;\n type: \"number\" | \"string\" | \"boolean\";\n value?: string | boolean | number[];\n}\n\ninterface FilterConfig {\n key: string;\n type: \"number\" | \"string\" | \"boolean\";\n min?: number;\n max?: number;\n}\n\nfunction isSameFilterConfig(a: FilterConfig[], b: FilterConfig[]): boolean {\n if (a.length !== b.length) return false;\n\n return a.every((entry, index) => {\n const other = b[index];\n return (\n entry.key === other.key &&\n entry.type === other.type &&\n entry.min === other.min &&\n entry.max === other.max\n );\n });\n}\n\nexport interface CustomSelectedToolbarProps<T> {\n selected?: readonly T[];\n data?: T[];\n}\n\ninterface EnhancedTableToolbarProps<T> {\n title: string;\n numSelected: number;\n selected: readonly T[];\n onFilterChange: (filterFunc: (row: T) => boolean) => void;\n onSearch: (query: string) => void;\n printFn: UseReactToPrintFn;\n columns: Column[];\n CustomToolbar?: React.FC;\n CustomSelectedToolbar?: React.FC<CustomSelectedToolbarProps<T>>;\n data?: T[];\n options?: Options;\n}\n\nexport function EnhancedTableToolbar<T extends object>(props: EnhancedTableToolbarProps<T>) {\n const { title, numSelected, selected, onFilterChange, onSearch, printFn, columns, CustomToolbar, CustomSelectedToolbar, data, options } = props;\n\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n const [filters, setFilters] = useState<Filter[]>([]);\n const [filterConfig, setFilterConfig] = useState<FilterConfig[]>([]);\n // rest value to force re-render of filters\n const [resetCounter, setResetCounter] = useState(0);\n const [openSearch, setOpenSearch] = useState(false);\n const [searchValue, setSearchValue] = useState('');\n\n function downloadCSV(data: Record<string, any>[], filename: string = \"data.csv\"): void {\n // Base case\n if (data.length === 0) {\n console.warn(\"No data to export.\");\n return;\n }\n\n // Create CSV content\n const headers = Object.keys(data[0] as Record<string, any>);\n const csvRows = data.map(obj =>\n headers.map(field => JSON.stringify(obj[field] ?? \"\")).join(\",\")\n );\n const csvContent = [headers.join(\",\"), ...csvRows].join(\"\\n\");\n\n // Create Blob and download\n const blob = new Blob([csvContent], { type: \"text/csv\" });\n const link = document.createElement(\"a\");\n link.href = URL.createObjectURL(blob);\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(link.href);\n }\n\n useEffect(() => {\n if (data && data.length > 0) {\n const inferredConfig = columns.map((column) => {\n const key = column.name;\n const values = data.map((row) => (row as Record<string, any>)[key]);\n const isNumber = values.every((val) => typeof val === \"number\");\n const inferredType = isNumber ? \"number\" : typeof values[0] === \"boolean\" ? \"boolean\" : \"string\";\n return {\n key,\n type: inferredType as \"number\" | \"string\" | \"boolean\",\n min: isNumber ? Math.min(...values) : undefined,\n max: isNumber ? Math.max(...values) : undefined,\n };\n });\n\n setFilterConfig((previousConfig) => {\n if (isSameFilterConfig(previousConfig, inferredConfig)) {\n return previousConfig;\n }\n return inferredConfig;\n });\n } else {\n setFilterConfig((previousConfig) => (previousConfig.length === 0 ? previousConfig : []));\n }\n }, [data, columns]);\n\n useEffect(() => {\n const newFilterFunc = (row: T) => {\n if (filters.length === 0) return true;\n return filters.every((filter) => {\n const rowValue = (row as Record<string, any>)[filter.key];\n if (filter.type === \"number\") {\n const [min, max] = filter.value as number[];\n return rowValue >= min && rowValue <= max;\n }\n if (filter.type === \"string\") {\n const column = columns.find((candidate) => candidate.name === filter.key);\n\n if (column) {\n return columnMatchesSearchQuery(row, column, String(filter.value));\n }\n\n return rowValue.toString().toLowerCase().includes((filter.value as string).toLowerCase());\n }\n if (filter.type === \"boolean\") {\n return rowValue === filter.value;\n }\n return true;\n });\n };\n onFilterChange(newFilterFunc);\n }, [filters, onFilterChange]);\n\n const handleOpen = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleSearchChange = () => {\n setOpenSearch((prev) => !prev);\n };\n\n const handleSearchInputChange = (value: string) => {\n setSearchValue(value);\n onSearch(value);\n };\n\n const handleClearSearch = () => {\n setSearchValue('');\n onSearch('');\n setOpenSearch(false);\n };\n\n const open = Boolean(anchorEl);\n\n const getFilter = (key: string): Filter | undefined =>\n filters.find((filter) => filter.key === key);\n\n const updateFilter = (updatedFilter: Filter) => {\n setFilters((prevFilters) => {\n const existingIndex = prevFilters.findIndex((filter) => filter.key === updatedFilter.key);\n if (existingIndex !== -1) {\n // Update existing filter\n const newFilters = [...prevFilters];\n newFilters[existingIndex] = updatedFilter;\n return newFilters;\n }\n // Add new filter\n return [...prevFilters, updatedFilter];\n });\n };\n\n const removeFilter = (key: string) => {\n setFilters((prevFilters) => prevFilters.filter((filter) => filter.key !== key));\n };\n\n const handleFilterChange = (key: string, value: any) => {\n if (value === undefined || value === null || value === \"\") {\n removeFilter(key);\n } else {\n const config = filterConfig.find((config) => config.key === key);\n if (!config) return;\n\n updateFilter({\n key,\n type: config.type,\n value,\n });\n }\n };\n\n const resetFilters = () => {\n setFilters([]);\n setResetCounter((prev) => prev + 1);\n };\n\n return (\n <Toolbar\n sx={[\n { px: { sm: 2 }, borderBottom: 1, borderColor: \"divider\" },\n numSelected > 0 && { bgcolor: (theme) => alpha(theme.palette.primary.main, theme.palette.action.activatedOpacity) },\n ]}\n >\n {numSelected > 0 ? (\n <>\n <Typography\n sx={{ flex: \"1 1 100%\" }}\n color=\"inherit\"\n variant=\"subtitle1\"\n component=\"div\"\n >\n {options?.translations?.selectedTextRenderer\n ? options.translations.selectedTextRenderer(numSelected)\n : `${numSelected} selected`}\n </Typography>\n {CustomSelectedToolbar && (\n <CustomSelectedToolbar data={data} selected={selected} />\n )}\n </>\n ) : (\n <Stack\n direction=\"row\"\n justifyContent=\"space-between\"\n width=\"100%\"\n alignItems=\"center\"\n >\n {openSearch ? (\n <Stack direction=\"row\" alignItems=\"center\">\n <SearchIcon />\n <TextField\n placeholder={options?.translations?.searchPlaceholder || \"Search...\"}\n value={searchValue}\n onChange={(e) => handleSearchInputChange(e.target.value)}\n variant=\"standard\"\n autoFocus\n fullWidth\n sx={{ marginLeft: 1 }}\n />\n <IconButton\n onClick={handleClearSearch}\n aria-label=\"Clear search\"\n sx={{ '&:hover': { color: 'error.main' } }}\n >\n <Close />\n </IconButton>\n </Stack>\n ) : (\n\n <Typography\n sx={{ flex: \"1 1 100%\", alignContent: \"center\", paddingLeft: 1 }}\n variant=\"h6\"\n id=\"tableTitle\"\n component=\"div\"\n >\n {title}\n </Typography>\n )}\n <Stack direction=\"row\" spacing={0.5}>\n <Tooltip title={options?.translations?.searchTooltip || \"Search\"}>\n <IconButton onClick={handleSearchChange}>\n <SearchIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title={options?.translations?.downloadTooltip || \"Download CSV\"}>\n <IconButton onClick={() => downloadCSV(data as Record<string, any>[], \"data.csv\")}>\n <CloudDownload />\n </IconButton>\n </Tooltip>\n <Tooltip title={options?.translations?.printTooltip || \"Print\"}>\n <IconButton onClick={() => printFn()}>\n <Print />\n </IconButton>\n </Tooltip>\n <Tooltip title={options?.translations?.filterTooltip || \"Filter list\"}>\n <IconButton onClick={handleOpen}>\n <FilterListIcon />\n </IconButton>\n </Tooltip>\n {CustomToolbar && <CustomToolbar />}\n </Stack>\n </Stack>\n )}\n <Popover\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"right\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n slotProps={{\n paper: { sx: { width: \"20%\", padding: 2, boxShadow: 2 } }\n }}\n >\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Typography variant=\"h6\" sx={{ marginBottom: 2 }}>\n {options?.translations?.filtersTitle || \"Filters\"}\n </Typography>\n <Button variant=\"contained\" size=\"small\" sx={{ height: \"fit-content\" }} onClick={resetFilters}>\n {options?.translations?.resetButtonText || \"Reset\"}\n </Button>\n </Stack>\n <Stack key={resetCounter}>\n {filterConfig.map(({ key, type, min, max }) => {\n const currentFilter = getFilter(key);\n return (\n <Box key={key}>\n <Typography variant=\"subtitle1\">\n {columns.find((cell) => cell.name === key)?.label}\n </Typography>\n {type === \"number\" && min !== undefined && max !== undefined && (\n <Slider\n value={[\n (currentFilter?.value as number[] | undefined)?.[0] ?? min,\n (currentFilter?.value as number[] | undefined)?.[1] ?? max,\n ]}\n onChange={(_, newValue) => {\n const [newMin, newMax] = newValue as number[];\n handleFilterChange(key, [newMin, newMax]);\n }}\n valueLabelDisplay=\"auto\"\n min={min || 0}\n max={max || 100}\n step={1}\n />\n )}\n {type === \"string\" && (\n <TextField\n placeholder={options?.translations?.searchPlaceholder || \"Search...\"}\n size=\"small\"\n value={(currentFilter?.value as string) || \"\"}\n onChange={(e) => handleFilterChange(key, e.target.value)}\n sx={{\n marginBottom: 1,\n paddingY: 0.5,\n width: \"100%\",\n }}\n />\n )}\n {type === \"boolean\" && (\n <Box display=\"flex\" alignItems=\"center\">\n <Checkbox\n checked={currentFilter?.value === true}\n onChange={(e) =>\n handleFilterChange(key, e.target.checked)\n }\n />\n {currentFilter && (\n <Close\n color=\"error\"\n sx={{ cursor: \"pointer\", fontSize: 15 }}\n onClick={() => handleFilterChange(key, undefined)}\n />\n )}\n </Box>\n )}\n </Box>\n );\n })}\n </Stack>\n </Popover>\n </Toolbar>\n );\n}\n","import Checkbox from '@mui/material/Checkbox';\nimport Paper from '@mui/material/Paper';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TablePagination from '@mui/material/TablePagination';\nimport TableRow from '@mui/material/TableRow';\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport { useReactToPrint } from \"react-to-print\";\nimport { EnhancedTableHead } from './TableHead';\nimport { type CustomSelectedToolbarProps, EnhancedTableToolbar } from './Toolbar';\nimport { type Order, getComparator, rowMatchesSearchQuery } from './utils';\nimport type { LabelDisplayedRowsArgs } from '@mui/material/TablePagination';\n\nexport interface Column {\n name: string;\n label?: string;\n options?: {\n customBodyRender?: (value: any) => React.ReactNode;\n customSearchValue?: (value: any, row: Record<string, any>) => unknown;\n filter?: boolean;\n sort?: boolean;\n }\n}\n\nexport interface Options {\n translations?: {\n filterTooltip?: string;\n searchTooltip?: string;\n downloadTooltip?: string;\n printTooltip?: string;\n filtersTitle?: string;\n resetButtonText?: string;\n rowsPerPageText?: string;\n searchPlaceholder?: string;\n selectedTextRenderer?: (selected: number) => string;\n labelDisplayedRows?: ({ from, to, count }: LabelDisplayedRowsArgs) => string;\n }\n}\n\nexport interface EnhancedTableProps<T extends object> extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {\n title: string;\n data: T[];\n deactivateSelect?: boolean;\n defaultOrderBy?: string;\n defaultOrder?: Order;\n excludedColumns?: (keyof T)[];\n columns?: Column[];\n options?: Options;\n CustomToolbar?: React.FC;\n CustomSelectedToolbar?: React.FC<CustomSelectedToolbarProps<T>>;\n}\n\ninterface EnhancedTableState<T> {\n order: Order;\n orderBy: keyof T;\n selected: readonly T[];\n page: number;\n rowsPerPage: number;\n searchQuery: string;\n filterFunc: (row: T) => boolean;\n currentData: T[];\n visibleRows: T[];\n emptyRows: number;\n}\n\nexport const MUITable = <T extends object>({\n title,\n data,\n deactivateSelect,\n defaultOrderBy,\n defaultOrder,\n excludedColumns,\n columns: passedColumns,\n CustomToolbar,\n CustomSelectedToolbar,\n options,\n ...rest\n}: EnhancedTableProps<T>) => {\n const tableRef = useRef<HTMLDivElement>(null);\n const reactToPrintFn = useReactToPrint({ contentRef: tableRef });\n\n const getDefaultOrderByKey = React.useCallback((): keyof T => {\n if (data.length === 0) return \"id\" as keyof T;\n\n const keys = data.length > 0 ? (Object.keys(data[0]) as (keyof T)[]) : [];\n\n if (defaultOrderBy) {\n if (keys.includes(defaultOrderBy as keyof T)) {\n return defaultOrderBy as keyof T;\n } else {\n console.warn(`{defaultOrderBy}: \"${defaultOrderBy}\" not found among the object keys. Falling back to automatic key detection.`);\n }\n }\n\n return (keys.includes(\"id\" as keyof T) ? \"id\" : keys[0]) as keyof T;\n }, [data, defaultOrderBy]);\n\n const [state, setState] = React.useState<EnhancedTableState<T>>(() => {\n const orderByKey = getDefaultOrderByKey();\n return {\n order: defaultOrder || 'asc',\n orderBy: orderByKey,\n selected: [] as readonly T[],\n page: 0,\n rowsPerPage: 5,\n searchQuery: \"\",\n filterFunc: () => true,\n currentData: data,\n visibleRows: data,\n emptyRows: 0,\n };\n });\n\n const generateColumns = React.useCallback((): Column[] => {\n if (data.length === 0) return [];\n return Object.keys(data[0] as object)\n .filter((key) => !(excludedColumns || []).includes(key as keyof T))\n .map((key) => ({\n name: key,\n label: key.charAt(0).toUpperCase() + key.slice(1),\n }));\n }, [data, excludedColumns]);\n\n const columns = useMemo(() => passedColumns || generateColumns(), [passedColumns, generateColumns]);\n\n const handleSearch = (query: string) => {\n setState((prevState) => ({ ...prevState, searchQuery: query.toLowerCase() }));\n };\n\n React.useEffect(() => {\n const orderByKey = getDefaultOrderByKey();\n setState((prevState) => ({ ...prevState, orderBy: orderByKey }));\n }, [data, getDefaultOrderByKey]);\n\n // Data sorting, filtering, and pagination\n React.useEffect(() => {\n // Apply filters, search query, and sort data\n const sortedData = [...data]\n .filter(state.filterFunc)\n .filter((row) => rowMatchesSearchQuery(row, columns, state.searchQuery))\n .sort(getComparator<T, keyof T>(state.order, state.orderBy));\n\n // Paginate the processed data\n const startIndex = state.page * state.rowsPerPage;\n const paginatedData = sortedData.slice(\n startIndex,\n startIndex + state.rowsPerPage\n );\n\n const calculatedEmptyRows = Math.max(\n 0,\n (1 + state.page) * state.rowsPerPage - sortedData.length\n );\n\n setState((prevState) => ({\n ...prevState,\n visibleRows: paginatedData,\n emptyRows: calculatedEmptyRows,\n selected: prevState.selected.filter((selectedRow) =>\n data.includes(selectedRow)\n ),\n }));\n }, [\n state.filterFunc,\n state.order,\n state.orderBy,\n state.page,\n state.rowsPerPage,\n state.searchQuery,\n data,\n columns,\n ]);\n\n\n // Remove selected rows deleted from the data to prevent stale selected state\n React.useEffect(() => {\n setState((prevState) => ({\n ...prevState,\n selected: prevState.selected.filter((selectedRow) =>\n data.some((row) => row === selectedRow)\n ),\n }));\n }, [data]);\n\n\n const handleRequestSort = (_event: React.MouseEvent<unknown>, property: keyof T) => {\n const isAsc = state.orderBy === property && state.order === 'asc';\n setState((prevState) => ({\n ...prevState,\n order: isAsc ? 'desc' : 'asc',\n orderBy: property,\n }));\n };\n\n const handleSelectAllClick = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.checked) {\n setState((prevState) => ({ ...prevState, selected: [...state.currentData] }));\n } else {\n setState((prevState) => ({ ...prevState, selected: [] }));\n }\n };\n\n const handleClick = (_event: React.MouseEvent<unknown>, row: T) => {\n const selectedIndex = state.selected.findIndex((selectedRow) => selectedRow === row);\n let newSelected: readonly T[] = [];\n\n if (selectedIndex === -1) {\n newSelected = [...state.selected, row];\n } else if (selectedIndex === 0) {\n newSelected = state.selected.slice(1);\n } else if (selectedIndex === state.selected.length - 1) {\n newSelected = state.selected.slice(0, -1);\n } else if (selectedIndex > 0) {\n newSelected = [\n ...state.selected.slice(0, selectedIndex),\n ...state.selected.slice(selectedIndex + 1),\n ];\n }\n setState((prevState) => ({ ...prevState, selected: newSelected }));\n };\n\n const handleChangePage = (_event: unknown, newPage: number) => {\n setState((prevState) => ({ ...prevState, page: newPage }));\n };\n\n const handleChangeRowsPerPage = (event: React.ChangeEvent<HTMLInputElement>) => {\n setState((prevState) => ({\n ...prevState,\n rowsPerPage: parseInt(event.target.value, 10),\n page: 0,\n }));\n };\n\n const handleFilterChange = useCallback((filterFunc: (row: T) => boolean) => {\n setState((prevState) => ({ ...prevState, filterFunc }));\n }, []);\n\n return (\n <div {...rest} ref={tableRef}>\n <Paper sx={{ width: '100%', mb: 2 }}>\n <EnhancedTableToolbar\n title={title}\n numSelected={state.selected.length}\n selected={state.selected}\n onFilterChange={handleFilterChange}\n onSearch={handleSearch}\n printFn={reactToPrintFn}\n columns={columns}\n CustomToolbar={CustomToolbar}\n CustomSelectedToolbar={CustomSelectedToolbar}\n data={data}\n options={options}\n />\n <TableContainer>\n <Table\n sx={{ minWidth: 750 }}\n aria-labelledby=\"tableTitle\"\n size=\"small\"\n >\n <EnhancedTableHead\n columns={columns}\n numSelected={state.selected.length}\n order={state.order}\n orderBy={state.orderBy}\n onSelectAllClick={deactivateSelect ? undefined : handleSelectAllClick}\n onRequestSort={handleRequestSort}\n rowCount={state.currentData.length}\n deactivateSelectAll={deactivateSelect}\n />\n <TableBody>\n {state.visibleRows.map((row, index) => {\n const isItemSelected = state.selected.some((selectedRow) => selectedRow === row);\n const labelId = `enhanced-table-checkbox-${index}`;\n\n return (\n <TableRow\n hover\n onClick={deactivateSelect ? undefined : (event) => handleClick(event, row)}\n role=\"checkbox\"\n aria-checked={isItemSelected}\n tabIndex={-1}\n key={index}\n selected={isItemSelected}\n sx={{ cursor: 'pointer' }}\n >\n {!deactivateSelect && (\n <TableCell padding=\"checkbox\">\n <Checkbox\n color=\"primary\"\n checked={isItemSelected}\n inputProps={{\n 'aria-labelledby': labelId,\n }}\n />\n </TableCell>\n )}\n {columns.map((column, cellIndex) => (\n <TableCell\n key={String(column.name)}\n component={cellIndex === 0 ? \"th\" : undefined}\n id={cellIndex === 0 ? labelId : undefined}\n scope={cellIndex === 0 ? \"row\" : undefined}\n padding=\"normal\"\n >\n {column.options?.customBodyRender\n ? column.options.customBodyRender((row as Record<string, any>)[column.name])\n : String((row as Record<string, any>)[column.name])}\n </TableCell>\n ))}\n </TableRow>\n );\n })}\n {state.emptyRows > 0 && (\n <TableRow\n style={{\n height: 33 * state.emptyRows,\n }}\n >\n <TableCell colSpan={columns.length + 1} />\n </TableRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n rowsPerPageOptions={[5, 10, 25]}\n component=\"div\"\n count={state.currentData.length}\n rowsPerPage={state.rowsPerPage}\n page={state.page}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n labelRowsPerPage={options?.translations?.rowsPerPageText || \"Rows per page\"}\n labelDisplayedRows={options?.translations?.labelDisplayedRows || (({ from, to, count }) => `${from}-${to} of ${count}`)}\n />\n </Paper>\n </div>\n );\n};\n"],"names":["_jsx","_jsxs","visuallyHidden","useState","useEffect","Toolbar","alpha","_Fragment","Typography","Stack","TextField","IconButton","Close","Tooltip","CloudDownload","Print","Popover","Button","Box","Slider","Checkbox","__rest","useRef","useReactToPrint","useMemo","useCallback"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@testing-library/jest-dom/vitest';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Column } from "../components/MUITable";
|
|
2
2
|
export interface Data {
|
|
3
3
|
id: number;
|
|
4
4
|
calories: number;
|
|
@@ -8,4 +8,4 @@ export interface Data {
|
|
|
8
8
|
protein: number;
|
|
9
9
|
}
|
|
10
10
|
export declare const rows: Data[];
|
|
11
|
-
export declare const
|
|
11
|
+
export declare const testDataColumns: Column[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,58 +1,82 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "mui-datatables-updated",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "MUI Datatable library inspired by the gregnb/mui-datatables project, featuring an up-to-date implementation with Typescript Support.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.js",
|
|
7
|
-
"module": "./dist/index.esm.js",
|
|
8
|
-
"types": "./dist/index.d.ts",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
},
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"mui-datatables"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"@
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "mui-datatables-updated",
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"description": "MUI Datatable library inspired by the gregnb/mui-datatables project, featuring an up-to-date implementation with Typescript Support.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.esm.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"test": "vitest run",
|
|
14
|
+
"test:watch": "vitest",
|
|
15
|
+
"build": "rollup -c"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/Djmr5/mui-datatables-updated.git"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"MUI",
|
|
23
|
+
"mui-datatables",
|
|
24
|
+
"datatables",
|
|
25
|
+
"react-table",
|
|
26
|
+
"typescript",
|
|
27
|
+
"react",
|
|
28
|
+
"material-ui",
|
|
29
|
+
"data-table"
|
|
30
|
+
],
|
|
31
|
+
"author": "Diego Jacobo Martínez Djmr5",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/Djmr5/mui-datatables-updated/issues"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/Djmr5/mui-datatables-updated#readme",
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"@emotion/react": "^11.0.0",
|
|
39
|
+
"@emotion/styled": "^11.0.0",
|
|
40
|
+
"@mui/icons-material": "^6.0.0",
|
|
41
|
+
"@mui/material": "^6.0.0",
|
|
42
|
+
"@mui/utils": "^6.0.0",
|
|
43
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
44
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
45
|
+
"react-to-print": "^3.3.0"
|
|
46
|
+
},
|
|
47
|
+
"peerDependenciesMeta": {
|
|
48
|
+
"react": {
|
|
49
|
+
"optional": false
|
|
50
|
+
},
|
|
51
|
+
"react-dom": {
|
|
52
|
+
"optional": false
|
|
53
|
+
},
|
|
54
|
+
"@mui/material": {
|
|
55
|
+
"optional": false
|
|
56
|
+
},
|
|
57
|
+
"react-to-print": {
|
|
58
|
+
"optional": false
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@emotion/react": "^11.14.0",
|
|
63
|
+
"@emotion/styled": "^11.14.0",
|
|
64
|
+
"@mui/icons-material": "^6.4.0",
|
|
65
|
+
"@mui/material": "^6.4.0",
|
|
66
|
+
"@mui/utils": "^6.4.0",
|
|
67
|
+
"@rollup/plugin-commonjs": "^29.0.2",
|
|
68
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
69
|
+
"@rollup/plugin-typescript": "^12.3.0",
|
|
70
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
71
|
+
"@testing-library/react": "^16.2.0",
|
|
72
|
+
"@testing-library/user-event": "^14.5.2",
|
|
73
|
+
"@types/react": "^19.0.7",
|
|
74
|
+
"@types/react-dom": "^19.0.3",
|
|
75
|
+
"jsdom": "^25.0.1",
|
|
76
|
+
"rollup": "^4.30.1",
|
|
77
|
+
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
78
|
+
"tslib": "^2.8.1",
|
|
79
|
+
"typescript": "^5.9.3",
|
|
80
|
+
"vitest": "^4.1.2"
|
|
81
|
+
}
|
|
82
|
+
}
|