@popmenu/table 0.92.0 → 0.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,4 +42,6 @@ export interface TableProps<T = unknown> {
42
42
  Empty?: () => JSX.Element;
43
43
  /** A string used to construct ids and tags used throughout the table for tagging inner elements. ie: data-tour-id. */
44
44
  idBase?: string;
45
+ /** Controls which filter should be used for the application, automatic or manual. */
46
+ stageFilterSelections?: boolean;
45
47
  }
@@ -1,3 +1,16 @@
1
1
  /// <reference types="react" />
2
- import { Table } from '@tanstack/react-table';
3
- export declare const TableContext: import("react").Context<Table<any>>;
2
+ import { ColumnFilter, Table } from '@tanstack/react-table';
3
+ export declare type StagedColumnFilter = {
4
+ update: (columnId: string, value: string | Array<string>) => void;
5
+ get: (columnId: string) => string | Array<string> | undefined;
6
+ clear: () => void;
7
+ delete: (columnFilter: ColumnFilter) => void;
8
+ exist: () => boolean;
9
+ };
10
+ declare type TabelContextValue = {
11
+ table: Table<any>;
12
+ stagedColumnFilters: StagedColumnFilter;
13
+ stageFilterSelections: boolean | undefined;
14
+ };
15
+ export declare const TableContext: import("react").Context<TabelContextValue>;
16
+ export {};
@@ -1 +1,2 @@
1
1
  export { useColumnFilters } from './useColumnFilters';
2
+ export { useStagedColumnFilters } from './useStagedColumnFilters';
@@ -0,0 +1,8 @@
1
+ import { ColumnFilter } from '@tanstack/react-table';
2
+ export declare const useStagedColumnFilters: () => {
3
+ update: (columnId: string, value: string | Array<string>) => void;
4
+ get: (columnId: string) => string | string[] | undefined;
5
+ clear: () => void;
6
+ delete: (columnFilter: ColumnFilter) => void;
7
+ exist: () => boolean;
8
+ };
package/build/index.es.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import React__default, { createElement, forwardRef, createContext, useContext, useState, useRef, isValidElement } from 'react';
3
- import { makeStyles, Link as Link$2, Paper as Paper$2, Typography as Typography$2, Box, FormControl, InputLabel, Select, FormControlLabel as FormControlLabel$1, Switch as Switch$2, TextField, Popover, ButtonBase, InputAdornment, useTheme as useTheme$1 } from '@material-ui/core';
3
+ import { makeStyles, Link as Link$2, Paper as Paper$2, Typography as Typography$2, Box, FormControl, InputLabel, Select, FormControlLabel as FormControlLabel$1, Switch as Switch$2, TextField, ButtonBase, Popover, InputAdornment, useTheme as useTheme$1 } from '@material-ui/core';
4
4
  import { Pagination } from '@material-ui/lab';
5
5
  import { useReactTable, getCoreRowModel, getSortedRowModel, getFilteredRowModel, getPaginationRowModel, flexRender } from '@tanstack/react-table';
6
6
  import CommonAlert from '@material-ui/lab/Alert';
@@ -1032,6 +1032,14 @@ var TableFooter = function (props) {
1032
1032
  };
1033
1033
 
1034
1034
  var useStyles$6 = makeStyles(function (theme) { return ({
1035
+ buttonBox: {
1036
+ '& > :last-child': {
1037
+ marginLeft: theme.spacing(2),
1038
+ },
1039
+ display: 'flex',
1040
+ justifyContent: 'flex-end',
1041
+ padding: "0px " + theme.spacing(3) + "px " + theme.spacing(3) + "px " + theme.spacing(3) + "px",
1042
+ },
1035
1043
  buttonLabel: {
1036
1044
  fontWeight: 400,
1037
1045
  },
@@ -1077,55 +1085,55 @@ var useStyles$6 = makeStyles(function (theme) { return ({
1077
1085
  },
1078
1086
  }); });
1079
1087
 
1080
- var _path$2o;
1088
+ var _path$2p;
1081
1089
 
1082
- function _extends$5o() { _extends$5o = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$5o.apply(this, arguments); }
1090
+ function _extends$5p() { _extends$5p = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$5p.apply(this, arguments); }
1083
1091
 
1084
1092
  function SvgChevronDown(props) {
1085
- return /*#__PURE__*/React.createElement("svg", _extends$5o({
1093
+ return /*#__PURE__*/React.createElement("svg", _extends$5p({
1086
1094
  viewBox: "0 0 16 16",
1087
1095
  fill: "none",
1088
1096
  strokeLinecap: "round",
1089
1097
  strokeLinejoin: "round",
1090
1098
  width: "1em",
1091
1099
  height: "1em"
1092
- }, props), _path$2o || (_path$2o = /*#__PURE__*/React.createElement("path", {
1100
+ }, props), _path$2p || (_path$2p = /*#__PURE__*/React.createElement("path", {
1093
1101
  d: "M4 6l4 4 4-4",
1094
1102
  stroke: "currentColor"
1095
1103
  })));
1096
1104
  }
1097
1105
 
1098
- var _path$2n;
1106
+ var _path$2o;
1099
1107
 
1100
- function _extends$5n() { _extends$5n = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$5n.apply(this, arguments); }
1108
+ function _extends$5o() { _extends$5o = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$5o.apply(this, arguments); }
1101
1109
 
1102
1110
  function SvgChevronUp(props) {
1103
- return /*#__PURE__*/React.createElement("svg", _extends$5n({
1111
+ return /*#__PURE__*/React.createElement("svg", _extends$5o({
1104
1112
  viewBox: "0 0 16 16",
1105
1113
  fill: "none",
1106
1114
  strokeLinecap: "round",
1107
1115
  strokeLinejoin: "round",
1108
1116
  width: "1em",
1109
1117
  height: "1em"
1110
- }, props), _path$2n || (_path$2n = /*#__PURE__*/React.createElement("path", {
1118
+ }, props), _path$2o || (_path$2o = /*#__PURE__*/React.createElement("path", {
1111
1119
  d: "M12 10L8 6l-4 4",
1112
1120
  stroke: "currentColor"
1113
1121
  })));
1114
1122
  }
1115
1123
 
1116
- var _path$2e;
1124
+ var _path$2f;
1117
1125
 
1118
- function _extends$57() { _extends$57 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$57.apply(this, arguments); }
1126
+ function _extends$58() { _extends$58 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$58.apply(this, arguments); }
1119
1127
 
1120
1128
  function SvgSort(props) {
1121
- return /*#__PURE__*/React.createElement("svg", _extends$57({
1129
+ return /*#__PURE__*/React.createElement("svg", _extends$58({
1122
1130
  viewBox: "0 0 16 16",
1123
1131
  fill: "none",
1124
1132
  strokeLinecap: "round",
1125
1133
  strokeLinejoin: "round",
1126
1134
  width: "1em",
1127
1135
  height: "1em"
1128
- }, props), _path$2e || (_path$2e = /*#__PURE__*/React.createElement("path", {
1136
+ }, props), _path$2f || (_path$2f = /*#__PURE__*/React.createElement("path", {
1129
1137
  d: "M11.333 6L8 2.667 4.667 6m6.666 4L8 13.334 4.667 10",
1130
1138
  stroke: "currentColor"
1131
1139
  })));
@@ -1219,30 +1227,36 @@ var SelectFilter = function (props) {
1219
1227
  var _a, _b, _c;
1220
1228
  var options = props.options, columnId = props.columnId, multiple = props.multiple;
1221
1229
  var classes = useStyles$4();
1222
- var table = useContext(TableContext);
1223
- var _d = useFilterPanelContext().anchorState, setAnchorEl = _d[1];
1230
+ var _d = useContext(TableContext), table = _d.table, stagedColumnFilters = _d.stagedColumnFilters, stageFilterSelections = _d.stageFilterSelections;
1224
1231
  var _e = useState(false), open = _e[0], setOpen = _e[1];
1232
+ var _f = useFilterPanelContext().anchorState, setAnchorEl = _f[1];
1225
1233
  var column = table.getColumn(columnId);
1226
1234
  var meta = column.columnDef.meta;
1227
1235
  var filterName = (_a = meta === null || meta === void 0 ? void 0 : meta.filter) === null || _a === void 0 ? void 0 : _a.name;
1228
- var value = column.getFilterValue();
1236
+ var value = '';
1237
+ if (stageFilterSelections) {
1238
+ value = stagedColumnFilters.get(columnId);
1239
+ }
1240
+ else {
1241
+ value = column.getFilterValue();
1242
+ }
1229
1243
  var fallbackValue = multiple ? [] : '';
1230
1244
  var filteredOptions = options.map(function (option) {
1231
1245
  if (Array.isArray(value)) {
1232
1246
  if (value.includes(option.value)) {
1233
- return __assign$3(__assign$3({}, option), { hide: true });
1247
+ return __assign$3(__assign$3({}, option), { hide: !stageFilterSelections });
1234
1248
  }
1235
1249
  }
1236
1250
  if (typeof value === 'string' || typeof value === 'number') {
1237
1251
  if (value === option.value) {
1238
- return __assign$3(__assign$3({}, option), { hide: true });
1252
+ return __assign$3(__assign$3({}, option), { hide: !stageFilterSelections });
1239
1253
  }
1240
1254
  }
1241
1255
  return __assign$3(__assign$3({}, option), { hide: false });
1242
1256
  });
1243
1257
  var filteredOptionsCount = filteredOptions.filter(function (option) { return !(option === null || option === void 0 ? void 0 : option.hide); }).length;
1244
1258
  var renderedValue = '';
1245
- if (value && filteredOptions && filteredOptionsCount > 0) {
1259
+ if (!stageFilterSelections && value && filteredOptions && filteredOptionsCount > 0) {
1246
1260
  if (typeof value === 'string' || typeof value === 'number') {
1247
1261
  renderedValue = (_c = (_b = filteredOptions.find(function (option) { return option.value === value; })) === null || _b === void 0 ? void 0 : _b.label) !== null && _c !== void 0 ? _c : filterName;
1248
1262
  }
@@ -1255,12 +1269,20 @@ var SelectFilter = function (props) {
1255
1269
  }
1256
1270
  var handleChange = function (event) {
1257
1271
  event.stopPropagation();
1258
- column.setFilterValue(event.target.value);
1259
- setAnchorEl(null);
1272
+ if (stageFilterSelections) {
1273
+ stagedColumnFilters.update(columnId, event.target.value);
1274
+ }
1275
+ else {
1276
+ column.setFilterValue(event.target.value);
1277
+ setAnchorEl(null);
1278
+ }
1260
1279
  };
1261
1280
  var handleItemClick = function () {
1262
1281
  if (multiple) {
1263
- if (filteredOptionsCount === 1) {
1282
+ if (!stageFilterSelections && filteredOptionsCount === 1) {
1283
+ setOpen(false);
1284
+ }
1285
+ else {
1264
1286
  setOpen(false);
1265
1287
  }
1266
1288
  }
@@ -1268,7 +1290,7 @@ var SelectFilter = function (props) {
1268
1290
  return (React__default.createElement(Box, { className: classes.selectContainer },
1269
1291
  React__default.createElement(FormControl, { variant: "outlined", fullWidth: true },
1270
1292
  React__default.createElement(InputLabel, { id: "select-filter-label-" + filterName }, filterName || 'filter'),
1271
- React__default.createElement(Select, { variant: "outlined", open: open, onOpen: function () { return setOpen(true); }, onClose: function () { return setOpen(false); }, value: value || fallbackValue, displayEmpty: true, multiple: multiple, renderValue: function () { return React__default.createElement(Typography$1, null, renderedValue); }, label: filterName || 'filter', labelId: "select-filter-label-" + filterName, disabled: !filteredOptionsCount, IconComponent: SvgChevronDown, onChange: handleChange, fullWidth: true, classes: {
1293
+ React__default.createElement(Select, { variant: "outlined", open: open, onOpen: function () { return setOpen(true); }, onClose: function () { return setOpen(false); }, value: value || fallbackValue, displayEmpty: true, multiple: multiple, renderValue: stageFilterSelections ? undefined : function () { return React__default.createElement(Typography$1, null, renderedValue); }, label: filterName || 'filter', labelId: "select-filter-label-" + filterName, disabled: !filteredOptionsCount, IconComponent: SvgChevronDown, onChange: handleChange, fullWidth: true, classes: {
1272
1294
  root: classes.selectRoot,
1273
1295
  icon: classes.icon,
1274
1296
  }, MenuProps: {
@@ -1288,7 +1310,7 @@ var SelectFilter = function (props) {
1288
1310
  };
1289
1311
 
1290
1312
  var ToggleFilter = function (props) {
1291
- var table = useContext(TableContext);
1313
+ var table = useContext(TableContext).table;
1292
1314
  var columnId = props.columnId;
1293
1315
  var column = table.getColumn(columnId);
1294
1316
  var meta = column.columnDef.meta;
@@ -1386,44 +1408,37 @@ function makeFormatSelectedFilterText(table) {
1386
1408
  };
1387
1409
  }
1388
1410
 
1389
- var Panel = function (props) {
1390
- var anchorEl = props.anchorEl, onClose = props.onClose;
1391
- var classes = useStyles$6();
1392
- var table = useContext(TableContext);
1393
- var paperRef = useRef(null);
1394
- var columnFilters = useColumnFilters(table).columnFilters;
1395
- var handleClick = function (e) {
1396
- var _a;
1397
- var rect = (_a = paperRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
1398
- if (rect) {
1399
- var buffer = 10;
1400
- var mouseX = e.nativeEvent.x;
1401
- var mouseY = e.nativeEvent.y;
1402
- var xHit = rect.x - buffer < mouseX && mouseX < rect.x + rect.width + buffer;
1403
- var yHit = rect.y - buffer < mouseY && mouseY < rect.y + rect.height + buffer;
1404
- if (!xHit || !yHit) {
1405
- onClose();
1411
+ var useStagedColumnFilters = function () {
1412
+ var _a = useState(new Map()), columnInputValues = _a[0], setColumnInputValues = _a[1];
1413
+ var filterState = {
1414
+ update: function (columnId, value) {
1415
+ return setColumnInputValues(columnInputValues.set(columnId, value));
1416
+ },
1417
+ get: function (columnId) { return columnInputValues.get(columnId); },
1418
+ clear: function () {
1419
+ columnInputValues.clear();
1420
+ setColumnInputValues(columnInputValues);
1421
+ },
1422
+ delete: function (columnFilter) {
1423
+ var values = columnInputValues.get(columnFilter.id);
1424
+ if (values && Array.isArray(values)) {
1425
+ var valueIndex = values.indexOf(columnFilter.value);
1426
+ values.splice(valueIndex, 1);
1427
+ if (values.length > 0) {
1428
+ columnInputValues.set(columnFilter.id, values);
1429
+ }
1430
+ else {
1431
+ columnInputValues.clear();
1432
+ }
1406
1433
  }
1407
- }
1434
+ else {
1435
+ columnInputValues.delete(columnFilter.id);
1436
+ }
1437
+ setColumnInputValues(columnInputValues);
1438
+ },
1439
+ exist: function () { return columnInputValues.size > 0; },
1408
1440
  };
1409
- var open = Boolean(anchorEl);
1410
- return (React__default.createElement(Popover, { onClick: handleClick, anchorEl: anchorEl, anchorOrigin: {
1411
- vertical: 'bottom',
1412
- horizontal: 'right',
1413
- }, className: classes.filterPopover, onClose: onClose, open: open, PaperProps: {
1414
- style: {
1415
- backgroundColor: 'transparent',
1416
- boxShadow: 'none',
1417
- borderRadius: 0,
1418
- },
1419
- }, transformOrigin: {
1420
- vertical: 'top',
1421
- horizontal: 'right',
1422
- } },
1423
- React__default.createElement(Paper$1, { className: classes.filterPopoverContents, elevation: 2 },
1424
- React__default.createElement(Box, __assign$3({}, { ref: paperRef }, { padding: 3 }),
1425
- React__default.createElement(Typography$1, { className: classes.menuTitle }, "Filter By"),
1426
- columnFilters.map(function (columnFilter, i) { return (React__default.createElement(FilterControl, __assign$3({}, columnFilter, { key: i }))); })))));
1441
+ return filterState;
1427
1442
  };
1428
1443
 
1429
1444
  /*! *****************************************************************************
@@ -3199,6 +3214,68 @@ createTheme(adminLightOptions);
3199
3214
  var adminDarkOptions = __assign$1(__assign$1(__assign$1(__assign$1({ themeName: 'Admin Dark', palette: __assign$1(__assign$1(__assign$1({}, basePalette), adminDarkPalette), dataVizPalette), breakpoints: adminThemeBreakpoints, typography: adminThemeTypography, overrides: overrides }, adminDarkPlaceholder), adminThemeZIndex), adminThemeStatus), adminThemeDefaultProps);
3200
3215
  createTheme(adminDarkOptions);
3201
3216
 
3217
+ var Panel = function (props) {
3218
+ var anchorEl = props.anchorEl, onClose = props.onClose;
3219
+ var classes = useStyles$6();
3220
+ var _a = useContext(TableContext), table = _a.table, stagedColumnFilters = _a.stagedColumnFilters, stageFilterSelections = _a.stageFilterSelections;
3221
+ var paperRef = useRef(null);
3222
+ var _b = useColumnFilters(table), columnFilters = _b.columnFilters, resetColumnFilters = _b.resetColumnFilters;
3223
+ var handleClick = function (e) {
3224
+ var _a;
3225
+ var rect = (_a = paperRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
3226
+ if (rect) {
3227
+ var buffer = 10;
3228
+ var mouseX = e.nativeEvent.x;
3229
+ var mouseY = e.nativeEvent.y;
3230
+ var xHit = rect.x - buffer < mouseX && mouseX < rect.x + rect.width + buffer;
3231
+ var yHit = rect.y - buffer < mouseY && mouseY < rect.y + rect.height + buffer;
3232
+ if (!xHit || !yHit) {
3233
+ onClose();
3234
+ }
3235
+ }
3236
+ };
3237
+ var handleApplyClick = function () {
3238
+ if (stagedColumnFilters.exist()) {
3239
+ columnFilters.forEach(function (columnFilter) {
3240
+ var columnInputValue = stagedColumnFilters.get(columnFilter.columnId);
3241
+ if (columnInputValue) {
3242
+ var column = table.getColumn(columnFilter.columnId);
3243
+ column.setFilterValue(columnInputValue);
3244
+ }
3245
+ });
3246
+ }
3247
+ else {
3248
+ resetColumnFilters();
3249
+ }
3250
+ onClose();
3251
+ };
3252
+ var handleCancelClick = function () {
3253
+ stagedColumnFilters.clear();
3254
+ onClose();
3255
+ };
3256
+ var open = Boolean(anchorEl);
3257
+ return (React__default.createElement(Popover, { onClick: handleClick, anchorEl: anchorEl, anchorOrigin: {
3258
+ vertical: 'bottom',
3259
+ horizontal: 'right',
3260
+ }, className: classes.filterPopover, onClose: onClose, open: open, PaperProps: {
3261
+ style: {
3262
+ backgroundColor: 'transparent',
3263
+ boxShadow: 'none',
3264
+ borderRadius: 0,
3265
+ },
3266
+ }, transformOrigin: {
3267
+ vertical: 'top',
3268
+ horizontal: 'right',
3269
+ } },
3270
+ React__default.createElement(Paper$1, { className: classes.filterPopoverContents, elevation: 2 },
3271
+ React__default.createElement(Box, __assign$3({}, { ref: paperRef }, { padding: 3 }),
3272
+ React__default.createElement(Typography$1, { className: classes.menuTitle }, "Filter By"),
3273
+ columnFilters.map(function (columnFilter, i) { return (React__default.createElement(FilterControl, __assign$3({}, columnFilter, { key: i }))); })),
3274
+ stageFilterSelections && (React__default.createElement(Box, { className: classes.buttonBox },
3275
+ React__default.createElement(Button, { variant: "secondary", onClick: handleCancelClick }, "Cancel"),
3276
+ React__default.createElement(Button, { onClick: handleApplyClick }, "Apply"))))));
3277
+ };
3278
+
3202
3279
  var useStyles$3 = makeStyles({
3203
3280
  root: {
3204
3281
  justifySelf: 'end',
@@ -4033,7 +4110,7 @@ var defaultTableProps = {
4033
4110
  searchable: false,
4034
4111
  };
4035
4112
  var Table = function (props) {
4036
- var title = props.title, data = props.data, columns = props.columns, enableSortingRemoval = props.enableSortingRemoval, loading = props.loading, searchable = props.searchable, sortable = props.sortable, externalFilterState = props.filterState, externalGlobalFilterState = props.globalFilterState, externalPaginationState = props.paginationState, externalSortingState = props.sortingState, externalVisibilityState = props.visibilityState, paginated = props.paginated, pageCount = props.pageCount, GlobalFilterProps = props.GlobalFilterProps, Empty = props.Empty, idBase = props.idBase;
4113
+ var title = props.title, data = props.data, columns = props.columns, enableSortingRemoval = props.enableSortingRemoval, loading = props.loading, searchable = props.searchable, sortable = props.sortable, externalFilterState = props.filterState, externalGlobalFilterState = props.globalFilterState, externalPaginationState = props.paginationState, externalSortingState = props.sortingState, externalVisibilityState = props.visibilityState, paginated = props.paginated, pageCount = props.pageCount, GlobalFilterProps = props.GlobalFilterProps, Empty = props.Empty, idBase = props.idBase, stageFilterSelections = props.stageFilterSelections;
4037
4114
  var classes = useStyles$7(props);
4038
4115
  var rootRef = useRef(null);
4039
4116
  // Prepare Empty State
@@ -4061,6 +4138,8 @@ var Table = function (props) {
4061
4138
  // Init table instance
4062
4139
  var table = useReactTable(__assign$3(__assign$3(__assign$3(__assign$3(__assign$3(__assign$3({ data: data, columns: columns, state: __assign$3(__assign$3(__assign$3(__assign$3(__assign$3({}, (isControlledPagination && { pagination: pagination })), (isControlledGlobalFilter && { globalFilter: globalFilter })), (isControlledColumnFilters && { columnFilters: columnFilters })), (isControlledColumnVisibility && { columnVisibility: columnVisibility })), (isControlledColumnSort && { sorting: sorting })), enableSorting: sortable, enableSortingRemoval: enableSortingRemoval, globalFilterFn: coercedValueIncludesString, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), getFilteredRowModel: getFilteredRowModel() }, (paginated && { getPaginationRowModel: getPaginationRowModel() })), (isControlledPagination && controlledPaginationOptions)), (isControlledGlobalFilter && controlledGlobalFilterOptions)), (isControlledColumnFilters && controlledColumnFiltersOptions)), (isControlledColumnSort && controlledColumnSortOptions)), { meta: { idBase: idBase } }));
4063
4140
  var _f = useColumnFilters(table), selectedColumnFilters = _f.selectedColumnFilters, hasColumnFilters = _f.hasColumnFilters, deselectColumnFilter = _f.deselectColumnFilter, formatSelectedFilterText = _f.formatSelectedFilterText, resetColumnFilters = _f.resetColumnFilters;
4141
+ // stagedColumnFilters is only used when stageFilterSelections is enabled
4142
+ var stagedColumnFilters = useStagedColumnFilters();
4064
4143
  var handlePagination = function (_e, pageNumber) {
4065
4144
  var pageIndex = pageNumber - 1;
4066
4145
  table.setPageIndex(pageIndex);
@@ -4069,7 +4148,7 @@ var Table = function (props) {
4069
4148
  var showGlobalSearch = Boolean(searchable || isControlledGlobalFilter);
4070
4149
  var showColumnFilter = Boolean(hasColumnFilters);
4071
4150
  var showControls = Boolean(showTitle || showGlobalSearch || showColumnFilter);
4072
- return (React__default.createElement(TableContext.Provider, { value: table },
4151
+ return (React__default.createElement(TableContext.Provider, { value: { table: table, stagedColumnFilters: stagedColumnFilters, stageFilterSelections: stageFilterSelections } },
4073
4152
  React__default.createElement(Box, __assign$3({ className: classes.root }, { ref: rootRef }, { "data-table-element": "root" }, (table.getPageCount() > 1 && {
4074
4153
  minHeight: getTableMinHeight(rootRef, table.getState().pagination.pageSize),
4075
4154
  })),
@@ -4079,8 +4158,18 @@ var Table = function (props) {
4079
4158
  showGlobalSearch && (React__default.createElement(GlobalFilter, __assign$3({}, GlobalFilterProps, { value: table.getState().globalFilter, setValue: table.setGlobalFilter }))),
4080
4159
  showColumnFilter && React__default.createElement(FilterPanel, null)),
4081
4160
  React__default.createElement(Box, { display: "flex", flexWrap: "wrap", gridGap: 8 },
4082
- selectedColumnFilters.map(function (selectedColumnFilter, i) { return (React__default.createElement(ColumnFilterChip, { key: "selected-column-filter-chip-" + i, columnFilter: selectedColumnFilter, label: formatSelectedFilterText(selectedColumnFilter), onClick: deselectColumnFilter })); }),
4083
- selectedColumnFilters.length >= 1 && React__default.createElement(ColumnFilterResetButton, { onClick: function () { return resetColumnFilters(); } })))),
4161
+ selectedColumnFilters.map(function (selectedColumnFilter, i) { return (React__default.createElement(ColumnFilterChip, { key: "selected-column-filter-chip-" + i, columnFilter: selectedColumnFilter, label: formatSelectedFilterText(selectedColumnFilter), onClick: function (columnFilter) {
4162
+ if (stageFilterSelections) {
4163
+ stagedColumnFilters.delete(columnFilter);
4164
+ }
4165
+ deselectColumnFilter(columnFilter);
4166
+ } })); }),
4167
+ selectedColumnFilters.length >= 1 && (React__default.createElement(ColumnFilterResetButton, { onClick: function () {
4168
+ if (stageFilterSelections) {
4169
+ stagedColumnFilters.clear();
4170
+ }
4171
+ resetColumnFilters();
4172
+ } }))))),
4084
4173
  React__default.createElement(Box, { className: classes.tableContainer, flexGrow: loading || isEmpty ? 0 : 1 },
4085
4174
  React__default.createElement("table", { className: classes.table },
4086
4175
  React__default.createElement(TableHeader, null, table.getHeaderGroups().map(function (headerGroup) { return (React__default.createElement(TableHeaderRow, { key: headerGroup.id }, headerGroup.headers.map(function (header) { return (React__default.createElement(TableHeaderCell, { key: header.id, context: header.getContext() }, flexRender(header.column.columnDef.header, header.getContext()))); }))); })),