mui-datatables-updated 1.0.2 → 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/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 === undefined ? undefined : _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)));
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 !== undefined ? _a : ""); }).join(","));
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(inferredConfig);
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 === undefined ? undefined : options.translations) === null || _a === undefined ? undefined : _a.selectedTextRenderer)
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 === undefined ? undefined : options.translations) === null || _b === undefined ? undefined : _b.searchPlaceholder) || "Search...", onChange: (e) => onSearch(e.target.value), variant: "standard", autoFocus: true, fullWidth: true, sx: { marginLeft: 1 } }), jsxRuntime.jsx(material.IconButton, { onClick: handleSearchChange, 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 === undefined ? undefined : options.translations) === null || _c === undefined ? undefined : _c.searchTooltip) || "Search", children: jsxRuntime.jsx(material.IconButton, { onClick: handleSearchChange, children: jsxRuntime.jsx(SearchIcon, {}) }) }), jsxRuntime.jsx(material.Tooltip, { title: ((_d = options === null || options === undefined ? undefined : options.translations) === null || _d === undefined ? undefined : _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 === undefined ? undefined : options.translations) === null || _e === undefined ? undefined : _e.printTooltip) || "Print", children: jsxRuntime.jsx(material.IconButton, { onClick: () => printFn(), children: jsxRuntime.jsx(iconsMaterial.Print, {}) }) }), jsxRuntime.jsx(material.Tooltip, { title: ((_f = options === null || options === undefined ? undefined : options.translations) === null || _f === undefined ? undefined : _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: {
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 === undefined ? undefined : options.translations) === null || _g === undefined ? undefined : _g.filtersTitle) || "Filters" }), jsxRuntime.jsx(material.Button, { variant: "contained", size: "small", sx: { height: "fit-content" }, onClick: resetFilters, children: ((_h = options === null || options === undefined ? undefined : options.translations) === null || _h === undefined ? undefined : _h.resetButtonText) || "Reset" })] }), jsxRuntime.jsx(material.Stack, { children: filterConfig.map(({ key, type, min, max }) => {
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 === undefined ? undefined : _a.label }), type === "number" && min !== undefined && max !== undefined && (jsxRuntime.jsx(material.Slider, { value: [
201
- (_c = (_b = currentFilter === null || currentFilter === undefined ? undefined : currentFilter.value) === null || _b === undefined ? undefined : _b[0]) !== null && _c !== undefined ? _c : min,
202
- (_e = (_d = currentFilter === null || currentFilter === undefined ? undefined : currentFilter.value) === null || _d === undefined ? undefined : _d[1]) !== null && _e !== undefined ? _e : max,
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 === undefined ? undefined : options.translations) === null || _f === undefined ? undefined : _f.searchPlaceholder) || "Search...", size: "small", value: (currentFilter === null || currentFilter === undefined ? undefined : currentFilter.value) || "", onChange: (e) => handleFilterChange(key, e.target.value), sx: {
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 === undefined ? undefined : 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));
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) => Object.values(row).some((value) => typeof value === "string" &&
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 === undefined ? undefined : _a.customBodyRender)
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 === undefined ? undefined : options.translations) === null || _b === undefined ? undefined : _b.rowsPerPageText) || "Rows per page", labelDisplayedRows: ((_c = options === null || options === undefined ? undefined : options.translations) === null || _c === undefined ? undefined : _c.labelDisplayedRows) || (({ from, to, count }) => `${from}-${to} of ${count}`) })] }) })));
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
- module.exports = MUITable;
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 { HeadCell } from "../components/TableHead";
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 headCells: HeadCell<typeof rows[0]>[];
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.2",
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
- "scripts": {
10
- "test": "echo \"Error: no test specified\" && exit 1",
11
- "build": "rollup -c"
12
- },
13
- "repository": {
14
- "type": "git",
15
- "url": "git+https://github.com/Djmr5/mui-datatables-updated.git"
16
- },
17
- "keywords": [
18
- "MUI",
19
- "mui-datatables",
20
- "datatables",
21
- "react-table",
22
- "typescript",
23
- "react",
24
- "material-ui",
25
- "data-table"
26
- ],
27
- "author": "Diego Jacobo Martínez Djmr5",
28
- "license": "MIT",
29
- "bugs": {
30
- "url": "https://github.com/Djmr5/mui-datatables-updated/issues"
31
- },
32
- "homepage": "https://github.com/Djmr5/mui-datatables-updated#readme",
33
- "peerDependencies": {
34
- "@emotion/react": "^11.0.0",
35
- "@emotion/styled": "^11.0.0",
36
- "@mui/icons-material": "^6.0.0",
37
- "@mui/material": "^6.0.0",
38
- "@mui/utils": "^6.0.0",
39
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
40
- "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
41
- },
42
- "devDependencies": {
43
- "@emotion/react": "^11.14.0",
44
- "@emotion/styled": "^11.14.0",
45
- "@mui/icons-material": "^6.4.0",
46
- "@mui/material": "^6.4.0",
47
- "@mui/utils": "^6.4.0",
48
- "@types/react": "^19.0.7",
49
- "@types/react-dom": "^19.0.3",
50
- "rollup": "^4.30.1",
51
- "rollup-plugin-peer-deps-external": "^2.2.4",
52
- "rollup-plugin-typescript2": "^0.36.0",
53
- "typescript": "^5.7.3"
54
- },
55
- "dependencies": {
56
- "react-to-print": "^3.0.5"
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
+ }