material-react-table 0.5.3 → 0.5.4

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.
@@ -1,6 +1,8 @@
1
1
  import React, { useState, useMemo, useContext, createContext, Fragment, useRef, useEffect } from 'react';
2
2
  import { useTable, useFilters, useGlobalFilter, useGroupBy, useSortBy, useExpanded, usePagination, useRowSelect, useResizeColumns, useFlexLayout, useAsyncDebounce } from 'react-table';
3
- import { TextField, Tooltip, InputAdornment, IconButton, Menu, MenuItem, Divider, TableCell, Box, TableSortLabel, Collapse, Checkbox, TableRow, TableHead, alpha, TableBody, TableFooter, Table, FormControlLabel, Switch, Button, TablePagination, useMediaQuery, Chip, Alert, Toolbar, TableContainer, Paper, LinearProgress } from '@mui/material';
3
+ import { matchSorter } from 'match-sorter';
4
+ import { Menu, Typography, Divider, MenuItem, TextField, InputAdornment, Tooltip, IconButton, Chip, MenuList, ListItemIcon, ListItemText, TableCell, Box, TableSortLabel, Collapse, Checkbox, TableRow, TableHead, alpha, TableBody, TableFooter, Table, FormControlLabel, Switch, Button, TablePagination, useMediaQuery, Alert, Toolbar, TableContainer, Paper, LinearProgress } from '@mui/material';
5
+ import ArrowRightIcon from '@mui/icons-material/ArrowRight';
4
6
  import CancelIcon from '@mui/icons-material/Cancel';
5
7
  import ClearAllIcon from '@mui/icons-material/ClearAll';
6
8
  import CloseIcon from '@mui/icons-material/Close';
@@ -93,6 +95,100 @@ function _objectWithoutPropertiesLoose(source, excluded) {
93
95
  return target;
94
96
  }
95
97
 
98
+ var fuzzyFilterFN = function fuzzyFilterFN(rows, id, filterValue) {
99
+ return matchSorter(rows, filterValue.toString().trim(), {
100
+ keys: ["values." + id],
101
+ sorter: function sorter(rankedItems) {
102
+ return rankedItems;
103
+ }
104
+ });
105
+ };
106
+
107
+ fuzzyFilterFN.autoRemove = function (val) {
108
+ return !val;
109
+ };
110
+
111
+ var containsFilterFN = function containsFilterFN(rows, id, filterValue) {
112
+ return rows.filter(function (row) {
113
+ return row.values[id].toString().toLowerCase().trim().includes(filterValue.toString().toLowerCase().trim());
114
+ });
115
+ };
116
+
117
+ containsFilterFN.autoRemove = function (val) {
118
+ return !val;
119
+ };
120
+
121
+ var startsWithFilterFN = function startsWithFilterFN(rows, id, filterValue) {
122
+ return rows.filter(function (row) {
123
+ return row.values[id].toString().toLowerCase().trim().startsWith(filterValue.toString().toLowerCase().trim());
124
+ });
125
+ };
126
+
127
+ startsWithFilterFN.autoRemove = function (val) {
128
+ return !val;
129
+ };
130
+
131
+ var endsWithFilterFN = function endsWithFilterFN(rows, id, filterValue) {
132
+ return rows.filter(function (row) {
133
+ return row.values[id].toString().toLowerCase().trim().endsWith(filterValue.toString().toLowerCase().trim());
134
+ });
135
+ };
136
+
137
+ endsWithFilterFN.autoRemove = function (val) {
138
+ return !val;
139
+ };
140
+
141
+ var equalsFilterFN = function equalsFilterFN(rows, id, filterValue) {
142
+ return rows.filter(function (row) {
143
+ return row.values[id].toString().toLowerCase().trim() === filterValue.toString().toLowerCase().trim();
144
+ });
145
+ };
146
+
147
+ equalsFilterFN.autoRemove = function (val) {
148
+ return !val;
149
+ };
150
+
151
+ var notEqualsFilterFN = function notEqualsFilterFN(rows, id, filterValue) {
152
+ return rows.filter(function (row) {
153
+ return row.values[id].toString().toLowerCase().trim() !== filterValue.toString().toLowerCase().trim();
154
+ });
155
+ };
156
+
157
+ notEqualsFilterFN.autoRemove = function (val) {
158
+ return !val;
159
+ };
160
+
161
+ var emptyFilterFN = function emptyFilterFN(rows, id, _filterValue) {
162
+ return rows.filter(function (row) {
163
+ return !row.values[id].toString().toLowerCase().trim();
164
+ });
165
+ };
166
+
167
+ emptyFilterFN.autoRemove = function (val) {
168
+ return !val;
169
+ };
170
+
171
+ var notEmptyFilterFN = function notEmptyFilterFN(rows, id, _filterValue) {
172
+ return rows.filter(function (row) {
173
+ return !!row.values[id].toString().toLowerCase().trim();
174
+ });
175
+ };
176
+
177
+ notEmptyFilterFN.autoRemove = function (val) {
178
+ return !val;
179
+ };
180
+
181
+ var defaultFilterFNs = {
182
+ contains: containsFilterFN,
183
+ empty: emptyFilterFN,
184
+ endsWith: endsWithFilterFN,
185
+ equals: equalsFilterFN,
186
+ fuzzy: fuzzyFilterFN,
187
+ notEmpty: notEmptyFilterFN,
188
+ notEquals: notEqualsFilterFN,
189
+ startsWith: startsWithFilterFN
190
+ };
191
+
96
192
  var MaterialReactTableContext = /*#__PURE__*/function () {
97
193
  return createContext({});
98
194
  }();
@@ -123,19 +219,52 @@ var MaterialReactTableProvider = function MaterialReactTableProvider(props) {
123
219
  showSearch = _useState5[0],
124
220
  setShowSearch = _useState5[1];
125
221
 
222
+ var filterTypes = useMemo(function () {
223
+ return _extends({}, defaultFilterFNs, props.filterTypes);
224
+ }, [props.filterTypes]);
225
+
226
+ var _useState6 = useState(function () {
227
+ return Object.assign.apply(Object, [{}].concat(props.columns.map(function (c) {
228
+ var _c$accessor;
229
+
230
+ return (_c$accessor = c.accessor) == null ? void 0 : _c$accessor.toString();
231
+ }).map(function (accessor) {
232
+ var _props$initialState$f2, _props$initialState5, _props$initialState5$, _ref;
233
+
234
+ return _ref = {}, _ref[accessor] = (_props$initialState$f2 = props == null ? void 0 : (_props$initialState5 = props.initialState) == null ? void 0 : (_props$initialState5$ = _props$initialState5.filters) == null ? void 0 : _props$initialState5$[accessor]) != null ? _props$initialState$f2 : 'fuzzy', _ref;
235
+ })));
236
+ }),
237
+ currentFilterTypes = _useState6[0],
238
+ setCurrentFilterTypes = _useState6[1];
239
+
240
+ var columns = useMemo(function () {
241
+ return props.columns.map(function (column) {
242
+ column.filter = filterTypes[currentFilterTypes[column.accessor]];
243
+ return column;
244
+ });
245
+ }, [props.columns, filterTypes, currentFilterTypes]);
126
246
  var tableInstance = useTable.apply(void 0, [_extends({}, props, {
247
+ columns: columns,
248
+ // @ts-ignore
249
+ filterTypes: filterTypes,
127
250
  useControlledState: function useControlledState(state) {
128
251
  return useMemo(function () {
129
252
  return _extends({}, state, {
130
253
  currentEditingRow: currentEditingRow,
254
+ currentFilterTypes: currentFilterTypes,
131
255
  densePadding: densePadding,
132
256
  fullScreen: fullScreen,
133
257
  showFilters: showFilters,
134
258
  showSearch: showSearch
135
259
  }, props == null ? void 0 : props.useControlledState == null ? void 0 : props.useControlledState(state));
136
- }, [currentEditingRow, densePadding, fullScreen, showFilters, showSearch, state]);
260
+ }, [currentEditingRow, currentFilterTypes, densePadding, fullScreen, showFilters, showSearch, state]);
137
261
  }
138
262
  })].concat(hooks));
263
+ var idPrefix = useMemo(function () {
264
+ var _props$idPrefix;
265
+
266
+ return (_props$idPrefix = props.idPrefix) != null ? _props$idPrefix : Math.random().toString(36).substring(2, 9);
267
+ }, [props.idPrefix]);
139
268
  var anyRowsCanExpand = useMemo(function () {
140
269
  return tableInstance.rows.some(function (row) {
141
270
  return row.canExpand;
@@ -150,7 +279,10 @@ var MaterialReactTableProvider = function MaterialReactTableProvider(props) {
150
279
  value: _extends({}, props, {
151
280
  anyRowsCanExpand: anyRowsCanExpand,
152
281
  anyRowsExpanded: anyRowsExpanded,
282
+ idPrefix: idPrefix,
283
+ //@ts-ignore
153
284
  setCurrentEditingRow: setCurrentEditingRow,
285
+ setCurrentFilterTypes: setCurrentFilterTypes,
154
286
  setDensePadding: setDensePadding,
155
287
  setFullScreen: setFullScreen,
156
288
  setShowFilters: setShowFilters,
@@ -161,13 +293,106 @@ var MaterialReactTableProvider = function MaterialReactTableProvider(props) {
161
293
  }, props.children);
162
294
  };
163
295
  var useMRT = function useMRT() {
164
- return (// @ts-ignore
165
- useContext(MaterialReactTableContext)
166
- );
296
+ return useContext(MaterialReactTableContext);
297
+ };
298
+
299
+ var MRT_FilterMenu = function MRT_FilterMenu(_ref) {
300
+ var anchorEl = _ref.anchorEl,
301
+ column = _ref.column,
302
+ onSelect = _ref.onSelect,
303
+ setAnchorEl = _ref.setAnchorEl;
304
+
305
+ var _useMRT = useMRT(),
306
+ localization = _useMRT.localization,
307
+ setCurrentFilterTypes = _useMRT.setCurrentFilterTypes,
308
+ tableInstance = _useMRT.tableInstance;
309
+
310
+ var filterTypes = useMemo(function () {
311
+ return [{
312
+ type: 'fuzzy',
313
+ label: localization.filterMenuItemFuzzy,
314
+ divider: false
315
+ }, {
316
+ type: 'contains',
317
+ label: localization.filterMenuItemContains,
318
+ divider: true
319
+ }, {
320
+ type: 'startsWith',
321
+ label: localization.filterMenuItemStartsWith,
322
+ divider: false
323
+ }, {
324
+ type: 'endsWith',
325
+ label: localization.filterMenuItemEndsWith,
326
+ divider: true
327
+ }, {
328
+ type: 'equals',
329
+ label: localization.filterMenuItemEquals,
330
+ divider: false
331
+ }, {
332
+ type: 'notEquals',
333
+ label: localization.filterMenuItemNotEquals,
334
+ divider: true
335
+ }, {
336
+ type: 'empty',
337
+ label: localization.filterMenuItemEmpty,
338
+ divider: false
339
+ }, {
340
+ type: 'notEmpty',
341
+ label: localization.filterMenuItemNotEmpty,
342
+ divider: false
343
+ }];
344
+ }, []);
345
+
346
+ var handleSelectMenuItem = function handleSelectMenuItem(value) {
347
+ setAnchorEl(null);
348
+ setCurrentFilterTypes(function (prev) {
349
+ var _extends2;
350
+
351
+ return _extends({}, prev, (_extends2 = {}, _extends2[column.id] = value, _extends2));
352
+ });
353
+
354
+ if (['empty', 'notEmpty'].includes(value)) {
355
+ column.setFilter(' ');
356
+ }
357
+
358
+ onSelect == null ? void 0 : onSelect();
359
+ };
360
+
361
+ var filterType = tableInstance.state.currentFilterTypes[column.id];
362
+ return React.createElement(Menu, {
363
+ anchorEl: anchorEl,
364
+ open: !!anchorEl,
365
+ anchorOrigin: {
366
+ vertical: 'center',
367
+ horizontal: 'right'
368
+ },
369
+ onClose: function onClose() {
370
+ return setAnchorEl(null);
371
+ }
372
+ }, React.createElement(Typography, {
373
+ sx: {
374
+ fontWeight: 'bold',
375
+ p: '1rem',
376
+ fontSize: '1.1rem'
377
+ }
378
+ }, localization.filterMenuTitle), React.createElement(Divider, null), filterTypes.map(function (_ref2) {
379
+ var type = _ref2.type,
380
+ label = _ref2.label,
381
+ divider = _ref2.divider;
382
+ return React.createElement(MenuItem, {
383
+ divider: divider,
384
+ key: type,
385
+ onClick: function onClick() {
386
+ return handleSelectMenuItem(type);
387
+ },
388
+ selected: type === filterType,
389
+ value: type
390
+ }, label);
391
+ }));
167
392
  };
168
393
 
169
394
  var MRT_FilterTextField = function MRT_FilterTextField(_ref) {
170
- var _localization$filterT, _localization$filterT2, _localization$filterT3;
395
+ var _localization$filterT, _localization$filterT2;
171
396
 
172
397
  var column = _ref.column;
173
398
 
@@ -175,37 +400,70 @@ var MRT_FilterTextField = function MRT_FilterTextField(_ref) {
175
400
  _useMRT$icons = _useMRT.icons,
176
401
  FilterListIcon = _useMRT$icons.FilterListIcon,
177
402
  CloseIcon = _useMRT$icons.CloseIcon,
178
- localization = _useMRT.localization;
403
+ idPrefix = _useMRT.idPrefix,
404
+ localization = _useMRT.localization,
405
+ muiTableHeadCellFilterTextFieldProps = _useMRT.muiTableHeadCellFilterTextFieldProps,
406
+ setCurrentFilterTypes = _useMRT.setCurrentFilterTypes,
407
+ tableInstance = _useMRT.tableInstance;
179
408
 
180
- var _useState = useState(''),
181
- filterValue = _useState[0],
182
- setFilterValue = _useState[1];
409
+ var _useState = useState(null),
410
+ anchorEl = _useState[0],
411
+ setAnchorEl = _useState[1];
412
+
413
+ var mTableHeadCellFilterTextFieldProps = muiTableHeadCellFilterTextFieldProps instanceof Function ? muiTableHeadCellFilterTextFieldProps(column) : muiTableHeadCellFilterTextFieldProps;
414
+ var mcTableHeadCellFilterTextFieldProps = column.muiTableHeadCellFilterTextFieldProps instanceof Function ? column.muiTableHeadCellFilterTextFieldProps(column) : column.muiTableHeadCellFilterTextFieldProps;
415
+
416
+ var textFieldProps = _extends({}, mTableHeadCellFilterTextFieldProps, mcTableHeadCellFilterTextFieldProps, {
417
+ style: _extends({}, mTableHeadCellFilterTextFieldProps == null ? void 0 : mTableHeadCellFilterTextFieldProps.style, mcTableHeadCellFilterTextFieldProps == null ? void 0 : mcTableHeadCellFilterTextFieldProps.style)
418
+ });
419
+
420
+ var _useState2 = useState(''),
421
+ filterValue = _useState2[0],
422
+ setFilterValue = _useState2[1];
183
423
 
184
424
  var handleChange = useAsyncDebounce(function (value) {
185
425
  column.setFilter(value != null ? value : undefined);
186
426
  }, 150);
187
427
 
428
+ var handleFilterMenuOpen = function handleFilterMenuOpen(event) {
429
+ setAnchorEl(event.currentTarget);
430
+ };
431
+
188
432
  var handleClear = function handleClear() {
189
433
  setFilterValue('');
190
434
  column.setFilter(undefined);
191
435
  };
192
436
 
437
+ var handleClearFilterChip = function handleClearFilterChip() {
438
+ setFilterValue('');
439
+ column.setFilter(undefined);
440
+ setCurrentFilterTypes(function (prev) {
441
+ var _extends2;
442
+
443
+ return _extends({}, prev, (_extends2 = {}, _extends2[column.id] = 'fuzzy', _extends2));
444
+ });
445
+ };
446
+
193
447
  if (column.Filter) {
194
448
  return React.createElement(React.Fragment, null, column.Filter == null ? void 0 : column.Filter({
195
449
  column: column
196
450
  }));
197
451
  }
198
452
 
199
- return React.createElement(TextField, {
453
+ var filterType = tableInstance.state.currentFilterTypes[column.id];
454
+ var showFilterChip = ['empty', 'notEmpty'].includes(filterType);
455
+ var filterPlaceholder = (_localization$filterT = localization.filterTextFieldPlaceholder) == null ? void 0 : _localization$filterT.replace('{column}', String(column.Header));
456
+ return React.createElement(React.Fragment, null, React.createElement(TextField, Object.assign({
200
457
  fullWidth: true,
201
- id: "filter-" + column.id + "-column",
458
+ id: "mrt-" + idPrefix + "-" + column.id + "-filter-text-field",
202
459
  inputProps: {
203
- style: {
460
+ sx: {
204
461
  textOverflow: 'ellipsis'
205
- }
462
+ },
463
+ title: filterPlaceholder
206
464
  },
207
- margin: "dense",
208
- placeholder: (_localization$filterT = localization.filterTextFieldPlaceholder) == null ? void 0 : _localization$filterT.replace('{column}', String(column.Header)),
465
+ margin: "none",
466
+ placeholder: showFilterChip ? '' : filterPlaceholder,
209
467
  onChange: function onChange(e) {
210
468
  setFilterValue(e.target.value);
211
469
  handleChange(e.target.value);
@@ -216,33 +474,52 @@ var MRT_FilterTextField = function MRT_FilterTextField(_ref) {
216
474
  value: filterValue != null ? filterValue : '',
217
475
  variant: "standard",
218
476
  InputProps: {
219
- startAdornment: React.createElement(Tooltip, {
220
- arrow: true,
221
- title: (_localization$filterT2 = localization.filterTextFieldPlaceholder) == null ? void 0 : _localization$filterT2.replace('{column}', String(column.Header))
222
- }, React.createElement(InputAdornment, {
477
+ startAdornment: React.createElement(InputAdornment, {
223
478
  position: "start"
224
- }, React.createElement(FilterListIcon, null))),
225
- endAdornment: React.createElement(InputAdornment, {
479
+ }, React.createElement(Tooltip, {
480
+ arrow: true,
481
+ title: "Change Filter Mode"
482
+ }, React.createElement(IconButton, {
483
+ onClick: handleFilterMenuOpen,
484
+ size: "small",
485
+ sx: {
486
+ height: '1.75rem',
487
+ width: '1.75rem'
488
+ }
489
+ }, React.createElement(FilterListIcon, null))), showFilterChip && React.createElement(Chip, {
490
+ onDelete: handleClearFilterChip,
491
+ label: filterType
492
+ })),
493
+ endAdornment: !showFilterChip && React.createElement(InputAdornment, {
226
494
  position: "end"
227
495
  }, React.createElement(Tooltip, {
228
496
  arrow: true,
229
- title: (_localization$filterT3 = localization.filterTextFieldClearButtonTitle) != null ? _localization$filterT3 : ''
497
+ placement: "right",
498
+ title: (_localization$filterT2 = localization.filterTextFieldClearButtonTitle) != null ? _localization$filterT2 : ''
230
499
  }, React.createElement("span", null, React.createElement(IconButton, {
231
500
  "aria-label": localization.filterTextFieldClearButtonTitle,
232
501
  disabled: (filterValue == null ? void 0 : filterValue.length) === 0,
233
502
  onClick: handleClear,
234
- size: "small"
503
+ size: "small",
504
+ sx: {
505
+ height: '1.75rem',
506
+ width: '1.75rem'
507
+ }
235
508
  }, React.createElement(CloseIcon, {
236
509
  fontSize: "small"
237
510
  })))))
238
511
  }
239
- });
512
+ }, textFieldProps, {
513
+ sx: _extends({
514
+ minWidth: '6rem'
515
+ }, textFieldProps == null ? void 0 : textFieldProps.sx)
516
+ })), React.createElement(MRT_FilterMenu, {
517
+ anchorEl: anchorEl,
518
+ column: column,
519
+ setAnchorEl: setAnchorEl
520
+ }));
240
521
  };
241
522
 
242
- var commonMenuItemStyles = {
243
- display: 'flex',
244
- gap: '0.75rem'
245
- };
246
523
  var MRT_ColumnActionMenu = function MRT_ColumnActionMenu(_ref) {
247
524
  var _localization$columnA, _localization$columnA2, _localization$filterT, _localization, _localization$columnA3;
248
525
 
@@ -255,14 +532,19 @@ var MRT_ColumnActionMenu = function MRT_ColumnActionMenu(_ref) {
255
532
  disableFilters = _useMRT.disableFilters,
256
533
  disableSortBy = _useMRT.disableSortBy,
257
534
  enableColumnGrouping = _useMRT.enableColumnGrouping,
258
- localization = _useMRT.localization,
259
- setShowFilters = _useMRT.setShowFilters,
260
535
  _useMRT$icons = _useMRT.icons,
261
- FilterListIcon = _useMRT$icons.FilterListIcon,
262
- SortIcon = _useMRT$icons.SortIcon,
263
536
  ClearAllIcon = _useMRT$icons.ClearAllIcon,
264
537
  DynamicFeedIcon = _useMRT$icons.DynamicFeedIcon,
265
- VisibilityOffIcon = _useMRT$icons.VisibilityOffIcon;
538
+ FilterListIcon = _useMRT$icons.FilterListIcon,
539
+ SortIcon = _useMRT$icons.SortIcon,
540
+ VisibilityOffIcon = _useMRT$icons.VisibilityOffIcon,
541
+ idPrefix = _useMRT.idPrefix,
542
+ localization = _useMRT.localization,
543
+ setShowFilters = _useMRT.setShowFilters;
544
+
545
+ var _useState = useState(null),
546
+ filterMenuAnchorEl = _useState[0],
547
+ setFilterMenuAnchorEl = _useState[1];
266
548
 
267
549
  var handleClearSort = function handleClearSort() {
268
550
  column.clearSortBy();
@@ -295,55 +577,63 @@ var MRT_ColumnActionMenu = function MRT_ColumnActionMenu(_ref) {
295
577
  var _document$getElementB, _column$muiTableHeadC, _column$muiTableHeadC2;
296
578
 
297
579
  return (_document$getElementB = document.getElementById( // @ts-ignore
298
- (_column$muiTableHeadC = (_column$muiTableHeadC2 = column.muiTableHeadCellFilterTextFieldProps) == null ? void 0 : _column$muiTableHeadC2.id) != null ? _column$muiTableHeadC : "filter-" + column.id + "-column")) == null ? void 0 : _document$getElementB.focus();
580
+ (_column$muiTableHeadC = (_column$muiTableHeadC2 = column.muiTableHeadCellFilterTextFieldProps) == null ? void 0 : _column$muiTableHeadC2.id) != null ? _column$muiTableHeadC : "mrt-" + idPrefix + "-" + column.id + "-filter-text-field")) == null ? void 0 : _document$getElementB.focus();
299
581
  }, 200);
300
582
  setAnchorEl(null);
301
583
  };
302
584
 
585
+ var handleOpenFilterModeMenu = function handleOpenFilterModeMenu(event) {
586
+ event.stopPropagation();
587
+ setFilterMenuAnchorEl(event.currentTarget);
588
+ };
589
+
303
590
  return React.createElement(Menu, {
304
591
  anchorEl: anchorEl,
305
592
  open: !!anchorEl,
306
593
  onClose: function onClose() {
307
594
  return setAnchorEl(null);
308
595
  }
309
- }, !disableSortBy && column.canSort && [React.createElement(MenuItem, {
596
+ }, React.createElement(MenuList, null, !disableSortBy && column.canSort && [React.createElement(MenuItem, {
310
597
  key: 1,
311
598
  disabled: !column.isSorted,
312
- onClick: handleClearSort,
313
- sx: commonMenuItemStyles
314
- }, React.createElement(ClearAllIcon, null), " ", localization.columnActionMenuItemClearSort), React.createElement(MenuItem, {
599
+ onClick: handleClearSort
600
+ }, React.createElement(ListItemIcon, null, React.createElement(ClearAllIcon, null)), React.createElement(ListItemText, null, localization.columnActionMenuItemClearSort)), React.createElement(MenuItem, {
315
601
  key: 2,
316
602
  disabled: column.isSorted && !column.isSortedDesc,
317
- onClick: handleSortAsc,
318
- sx: commonMenuItemStyles
319
- }, React.createElement(SortIcon, null), ' ', (_localization$columnA = localization.columnActionMenuItemSortAsc) == null ? void 0 : _localization$columnA.replace('{column}', String(column.Header))), React.createElement(MenuItem, {
603
+ onClick: handleSortAsc
604
+ }, React.createElement(ListItemIcon, null, React.createElement(SortIcon, null)), React.createElement(ListItemText, null, (_localization$columnA = localization.columnActionMenuItemSortAsc) == null ? void 0 : _localization$columnA.replace('{column}', String(column.Header)))), React.createElement(MenuItem, {
320
605
  key: 3,
321
606
  disabled: column.isSorted && column.isSortedDesc,
322
- onClick: handleSortDesc,
323
- sx: commonMenuItemStyles
324
- }, React.createElement(SortIcon, {
607
+ onClick: handleSortDesc
608
+ }, React.createElement(ListItemIcon, null, React.createElement(SortIcon, {
325
609
  style: {
326
610
  transform: 'rotate(180deg) scaleX(-1)'
327
611
  }
328
- }), ' ', (_localization$columnA2 = localization.columnActionMenuItemSortDesc) == null ? void 0 : _localization$columnA2.replace('{column}', String(column.Header)))], !disableFilters && column.canFilter && [React.createElement(Divider, {
612
+ })), React.createElement(ListItemText, null, (_localization$columnA2 = localization.columnActionMenuItemSortDesc) == null ? void 0 : _localization$columnA2.replace('{column}', String(column.Header))))], !disableFilters && column.canFilter && [React.createElement(Divider, {
329
613
  key: 0
330
614
  }), React.createElement(MenuItem, {
331
615
  key: 1,
332
- onClick: handleFilterByColumn,
333
- sx: commonMenuItemStyles
334
- }, React.createElement(FilterListIcon, null), ' ', (_localization$filterT = localization.filterTextFieldPlaceholder) == null ? void 0 : _localization$filterT.replace('{column}', String(column.Header)))], enableColumnGrouping && column.canGroupBy && [React.createElement(Divider, {
616
+ onClick: handleFilterByColumn
617
+ }, React.createElement(ListItemIcon, null, React.createElement(FilterListIcon, null)), React.createElement(ListItemText, null, (_localization$filterT = localization.filterTextFieldPlaceholder) == null ? void 0 : _localization$filterT.replace('{column}', String(column.Header))), React.createElement(IconButton, {
618
+ size: "small",
619
+ onMouseEnter: handleOpenFilterModeMenu
620
+ }, React.createElement(ArrowRightIcon, null))), React.createElement(MRT_FilterMenu, {
621
+ anchorEl: filterMenuAnchorEl,
622
+ column: column,
623
+ key: 2,
624
+ setAnchorEl: setFilterMenuAnchorEl,
625
+ onSelect: handleFilterByColumn
626
+ })], enableColumnGrouping && column.canGroupBy && [React.createElement(Divider, {
335
627
  key: 1
336
628
  }), React.createElement(MenuItem, {
337
629
  key: 2,
338
- onClick: handleGroupByColumn,
339
- sx: commonMenuItemStyles
340
- }, React.createElement(DynamicFeedIcon, null), ' ', (_localization = localization[column.isGrouped ? 'columnActionMenuItemUnGroupBy' : 'columnActionMenuItemGroupBy']) == null ? void 0 : _localization.replace('{column}', String(column.Header)))], !disableColumnHiding && [React.createElement(Divider, {
630
+ onClick: handleGroupByColumn
631
+ }, React.createElement(ListItemIcon, null, React.createElement(DynamicFeedIcon, null)), React.createElement(ListItemText, null, (_localization = localization[column.isGrouped ? 'columnActionMenuItemUnGroupBy' : 'columnActionMenuItemGroupBy']) == null ? void 0 : _localization.replace('{column}', String(column.Header))))], !disableColumnHiding && [React.createElement(Divider, {
341
632
  key: 0
342
633
  }), React.createElement(MenuItem, {
343
634
  key: 1,
344
- onClick: handleHideColumn,
345
- sx: commonMenuItemStyles
346
- }, React.createElement(VisibilityOffIcon, null), ' ', (_localization$columnA3 = localization.columnActionMenuItemHideColumn) == null ? void 0 : _localization$columnA3.replace('{column}', String(column.Header)))]);
635
+ onClick: handleHideColumn
636
+ }, React.createElement(ListItemIcon, null, React.createElement(VisibilityOffIcon, null)), React.createElement(ListItemText, null, (_localization$columnA3 = localization.columnActionMenuItemHideColumn) == null ? void 0 : _localization$columnA3.replace('{column}', String(column.Header))))]));
347
637
  };
348
638
 
349
639
  var MRT_ToggleColumnActionMenuButton = function MRT_ToggleColumnActionMenuButton(_ref) {
@@ -373,11 +663,12 @@ var MRT_ToggleColumnActionMenuButton = function MRT_ToggleColumnActionMenuButton
373
663
  onClick: handleClick,
374
664
  size: "small",
375
665
  sx: {
666
+ height: '2rem',
667
+ mr: '2px',
668
+ mt: '-0.2rem',
376
669
  opacity: 0.5,
377
670
  transition: 'opacity 0.2s',
378
- marginRight: '2px',
379
- height: '1.6rem',
380
- width: '1.6rem',
671
+ width: '2rem',
381
672
  '&:hover': {
382
673
  opacity: 1
383
674
  }
@@ -421,17 +712,12 @@ var MRT_TableHeadCell = function MRT_TableHeadCell(_ref) {
421
712
  });
422
713
 
423
714
  var sortTooltip = column.isSorted ? column.isSortedDesc ? localization.columnActionMenuItemClearSort : (_localization$columnA = localization.columnActionMenuItemSortDesc) == null ? void 0 : _localization$columnA.replace('{column}', column.Header) : (_localization$columnA2 = localization.columnActionMenuItemSortAsc) == null ? void 0 : _localization$columnA2.replace('{column}', column.Header);
715
+ var columnHeader = column.render('Header');
424
716
  return React.createElement(TableCell, Object.assign({
425
717
  align: isParentHeader ? 'center' : 'left'
426
718
  }, tableCellProps, {
427
719
  sx: _extends({}, commonTableHeadCellStyles(tableInstance.state.densePadding, enableColumnResizing), tableCellProps == null ? void 0 : tableCellProps.sx)
428
720
  }), React.createElement(Box, {
429
- sx: {
430
- alignContent: 'space-between',
431
- display: 'grid',
432
- height: '100%'
433
- }
434
- }, React.createElement(Box, {
435
721
  sx: {
436
722
  alignItems: 'flex-start',
437
723
  display: 'flex',
@@ -442,7 +728,8 @@ var MRT_TableHeadCell = function MRT_TableHeadCell(_ref) {
442
728
  sx: {
443
729
  alignItems: 'center',
444
730
  display: 'flex',
445
- flexWrap: 'nowrap'
731
+ flexWrap: 'nowrap',
732
+ whiteSpace: columnHeader.length < 15 ? 'nowrap' : 'normal'
446
733
  },
447
734
  title: undefined
448
735
  }), column.render('Header'), !isParentHeader && column.canSort && React.createElement(Tooltip, {
@@ -476,7 +763,7 @@ var MRT_TableHeadCell = function MRT_TableHeadCell(_ref) {
476
763
  "in": tableInstance.state.showFilters
477
764
  }, React.createElement(MRT_FilterTextField, {
478
765
  column: column
479
- }))));
766
+ })));
480
767
  };
481
768
 
482
769
  var MRT_EditCellTextField = function MRT_EditCellTextField(_ref) {
@@ -1883,6 +2170,7 @@ var MRT_SearchTextField = function MRT_SearchTextField() {
1883
2170
  _useMRT$icons = _useMRT.icons,
1884
2171
  SearchIcon = _useMRT$icons.SearchIcon,
1885
2172
  CloseIcon = _useMRT$icons.CloseIcon,
2173
+ idPrefix = _useMRT.idPrefix,
1886
2174
  localization = _useMRT.localization,
1887
2175
  muiSearchTextFieldProps = _useMRT.muiSearchTextFieldProps,
1888
2176
  onGlobalFilterChange = _useMRT.onGlobalFilterChange,
@@ -1908,7 +2196,7 @@ var MRT_SearchTextField = function MRT_SearchTextField() {
1908
2196
  "in": tableInstance.state.showSearch,
1909
2197
  orientation: "horizontal"
1910
2198
  }, React.createElement(TextField, Object.assign({
1911
- id: "global-search-text-field",
2199
+ id: "mrt-" + idPrefix + "-search-text-field",
1912
2200
  placeholder: localization.searchTextFieldPlaceholder,
1913
2201
  onChange: function onChange(event) {
1914
2202
  setSearchValue(event.target.value);
@@ -2111,6 +2399,7 @@ var MRT_ToggleSearchButton = function MRT_ToggleSearchButton(_ref) {
2111
2399
  _useMRT$icons = _useMRT.icons,
2112
2400
  SearchIcon = _useMRT$icons.SearchIcon,
2113
2401
  SearchOffIcon = _useMRT$icons.SearchOffIcon,
2402
+ idPrefix = _useMRT.idPrefix,
2114
2403
  localization = _useMRT.localization,
2115
2404
  muiSearchTextFieldProps = _useMRT.muiSearchTextFieldProps,
2116
2405
  setShowSearch = _useMRT.setShowSearch,
@@ -2121,7 +2410,7 @@ var MRT_ToggleSearchButton = function MRT_ToggleSearchButton(_ref) {
2121
2410
  setTimeout(function () {
2122
2411
  var _document$getElementB, _muiSearchTextFieldPr;
2123
2412
 
2124
- return (_document$getElementB = document.getElementById((_muiSearchTextFieldPr = muiSearchTextFieldProps == null ? void 0 : muiSearchTextFieldProps.id) != null ? _muiSearchTextFieldPr : "global-search-text-field")) == null ? void 0 : _document$getElementB.focus();
2413
+ return (_document$getElementB = document.getElementById((_muiSearchTextFieldPr = muiSearchTextFieldProps == null ? void 0 : muiSearchTextFieldProps.id) != null ? _muiSearchTextFieldPr : "mrt-" + idPrefix + "-search-text-field")) == null ? void 0 : _document$getElementB.focus();
2125
2414
  }, 200);
2126
2415
  };
2127
2416
 
@@ -2402,6 +2691,15 @@ var MRT_DefaultLocalization_EN = {
2402
2691
  columnShowHideMenuShowAll: 'Show all',
2403
2692
  expandAllButtonTitle: 'Expand all',
2404
2693
  expandButtonTitle: 'Expand',
2694
+ filterMenuItemContains: 'Contains Exact',
2695
+ filterMenuItemEmpty: 'Empty',
2696
+ filterMenuItemEndsWith: 'Ends With',
2697
+ filterMenuItemEquals: 'Equals',
2698
+ filterMenuItemFuzzy: 'Fuzzy Match',
2699
+ filterMenuItemNotEmpty: 'Not Empty',
2700
+ filterMenuItemNotEquals: 'Not Equals',
2701
+ filterMenuItemStartsWith: 'Starts With',
2702
+ filterMenuTitle: 'Filter Mode',
2405
2703
  filterTextFieldClearButtonTitle: 'Clear filter',
2406
2704
  filterTextFieldPlaceholder: 'Filter by {column}',
2407
2705
  rowActionButtonCancel: 'Cancel',
@@ -2418,9 +2716,9 @@ var MRT_DefaultLocalization_EN = {
2418
2716
  toggleFilterButtonTitle: 'Toggle filters',
2419
2717
  toggleFullScreenButtonTitle: 'Toggle full screen',
2420
2718
  toggleSearchButtonTitle: 'Toggle search',
2421
- toolbarAlertSelectionMessage: '{selectedCount} of {rowCount} row(s) selected',
2422
2719
  toolbarAlertGroupedByMessage: 'Grouped by ',
2423
- toolbarAlertGroupedThenByMessage: ', then by '
2720
+ toolbarAlertGroupedThenByMessage: ', then by ',
2721
+ toolbarAlertSelectionMessage: '{selectedCount} of {rowCount} row(s) selected'
2424
2722
  };
2425
2723
 
2426
2724
  var MRT_Default_Icons = {