@popmenu/table 0.92.0 → 0.94.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';
@@ -771,7 +771,7 @@ Link$1.defaultProps = {
771
771
  };
772
772
  Link$1.displayName = 'Link';
773
773
 
774
- var useStyles$8 = makeStyles(function (_a) {
774
+ var useStyles$4$2 = makeStyles(function (_a) {
775
775
  var spacing = _a.spacing;
776
776
  return ({
777
777
  root: {
@@ -785,7 +785,7 @@ var useStyles$8 = makeStyles(function (_a) {
785
785
  });
786
786
  var Paper$1 = forwardRef(function (props, ref) {
787
787
  var legacyStyles = props.legacyStyles, restProps = __rest$2(props, ["legacyStyles"]);
788
- var classes = useStyles$8(props);
788
+ var classes = useStyles$4$2(props);
789
789
  return React__default.createElement(Paper$2, __assign$2({}, ref, { classes: __assign$2({}, (legacyStyles && classes)) }, restProps));
790
790
  });
791
791
  Paper$1.displayName = 'Paper';
@@ -938,6 +938,45 @@ makeStyles(function (theme) { return ({
938
938
  },
939
939
  }); });
940
940
 
941
+ makeStyles(function () { return ({
942
+ root: {
943
+ display: 'flex',
944
+ flexDirection: 'column',
945
+ alignItems: 'center',
946
+ gridGap: 16,
947
+ },
948
+ }); });
949
+
950
+ var FollowerAuthenticationDialogContext$1 = createContext(null);
951
+ FollowerAuthenticationDialogContext$1.Provider;
952
+
953
+ makeStyles(function () { return ({
954
+ form: {
955
+ display: 'flex',
956
+ flexDirection: 'column',
957
+ alignItems: 'center',
958
+ width: '100%',
959
+ gridGap: 16,
960
+ },
961
+ }); });
962
+
963
+ makeStyles(function () { return ({
964
+ main: {
965
+ width: '100%',
966
+ display: 'flex',
967
+ flexDirection: 'column',
968
+ gridGap: 16,
969
+ },
970
+ }); });
971
+
972
+ makeStyles(function () { return ({
973
+ root: {
974
+ position: 'absolute',
975
+ top: 0,
976
+ right: 0,
977
+ },
978
+ }); });
979
+
941
980
  var useTableRowStyles = makeStyles(function (theme) { return ({
942
981
  root: function () { return ({
943
982
  '&:nth-child(even)': {
@@ -1000,7 +1039,7 @@ var TableBody = function (props) {
1000
1039
  return React__default.createElement("tbody", __assign$3({}, restProps), children);
1001
1040
  };
1002
1041
 
1003
- var useStyles$7 = makeStyles(function (_a) {
1042
+ var useStyles$6 = makeStyles(function (_a) {
1004
1043
  var typography = _a.typography;
1005
1044
  return ({
1006
1045
  root: function (_a) {
@@ -1031,7 +1070,15 @@ var TableFooter = function (props) {
1031
1070
  return (React__default.createElement(Box, { display: "flex", justifyContent: "center", alignItems: "end", paddingTop: 3, paddingBottom: 4 }, props.children));
1032
1071
  };
1033
1072
 
1034
- var useStyles$6 = makeStyles(function (theme) { return ({
1073
+ var useStyles$5 = makeStyles(function (theme) { return ({
1074
+ buttonBox: {
1075
+ '& > :last-child': {
1076
+ marginLeft: theme.spacing(2),
1077
+ },
1078
+ display: 'flex',
1079
+ justifyContent: 'flex-end',
1080
+ padding: "0px " + theme.spacing(3) + "px " + theme.spacing(3) + "px " + theme.spacing(3) + "px",
1081
+ },
1035
1082
  buttonLabel: {
1036
1083
  fontWeight: 400,
1037
1084
  },
@@ -1077,55 +1124,55 @@ var useStyles$6 = makeStyles(function (theme) { return ({
1077
1124
  },
1078
1125
  }); });
1079
1126
 
1080
- var _path$2o;
1127
+ var _path$2p;
1081
1128
 
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); }
1129
+ 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
1130
 
1084
1131
  function SvgChevronDown(props) {
1085
- return /*#__PURE__*/React.createElement("svg", _extends$5o({
1132
+ return /*#__PURE__*/React.createElement("svg", _extends$5p({
1086
1133
  viewBox: "0 0 16 16",
1087
1134
  fill: "none",
1088
1135
  strokeLinecap: "round",
1089
1136
  strokeLinejoin: "round",
1090
1137
  width: "1em",
1091
1138
  height: "1em"
1092
- }, props), _path$2o || (_path$2o = /*#__PURE__*/React.createElement("path", {
1139
+ }, props), _path$2p || (_path$2p = /*#__PURE__*/React.createElement("path", {
1093
1140
  d: "M4 6l4 4 4-4",
1094
1141
  stroke: "currentColor"
1095
1142
  })));
1096
1143
  }
1097
1144
 
1098
- var _path$2n;
1145
+ var _path$2o;
1099
1146
 
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); }
1147
+ 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
1148
 
1102
1149
  function SvgChevronUp(props) {
1103
- return /*#__PURE__*/React.createElement("svg", _extends$5n({
1150
+ return /*#__PURE__*/React.createElement("svg", _extends$5o({
1104
1151
  viewBox: "0 0 16 16",
1105
1152
  fill: "none",
1106
1153
  strokeLinecap: "round",
1107
1154
  strokeLinejoin: "round",
1108
1155
  width: "1em",
1109
1156
  height: "1em"
1110
- }, props), _path$2n || (_path$2n = /*#__PURE__*/React.createElement("path", {
1157
+ }, props), _path$2o || (_path$2o = /*#__PURE__*/React.createElement("path", {
1111
1158
  d: "M12 10L8 6l-4 4",
1112
1159
  stroke: "currentColor"
1113
1160
  })));
1114
1161
  }
1115
1162
 
1116
- var _path$2e;
1163
+ var _path$2f;
1117
1164
 
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); }
1165
+ 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
1166
 
1120
1167
  function SvgSort(props) {
1121
- return /*#__PURE__*/React.createElement("svg", _extends$57({
1168
+ return /*#__PURE__*/React.createElement("svg", _extends$58({
1122
1169
  viewBox: "0 0 16 16",
1123
1170
  fill: "none",
1124
1171
  strokeLinecap: "round",
1125
1172
  strokeLinejoin: "round",
1126
1173
  width: "1em",
1127
1174
  height: "1em"
1128
- }, props), _path$2e || (_path$2e = /*#__PURE__*/React.createElement("path", {
1175
+ }, props), _path$2f || (_path$2f = /*#__PURE__*/React.createElement("path", {
1129
1176
  d: "M11.333 6L8 2.667 4.667 6m6.666 4L8 13.334 4.667 10",
1130
1177
  stroke: "currentColor"
1131
1178
  })));
@@ -1219,30 +1266,36 @@ var SelectFilter = function (props) {
1219
1266
  var _a, _b, _c;
1220
1267
  var options = props.options, columnId = props.columnId, multiple = props.multiple;
1221
1268
  var classes = useStyles$4();
1222
- var table = useContext(TableContext);
1223
- var _d = useFilterPanelContext().anchorState, setAnchorEl = _d[1];
1269
+ var _d = useContext(TableContext), table = _d.table, stagedColumnFilters = _d.stagedColumnFilters, stageFilterSelections = _d.stageFilterSelections;
1224
1270
  var _e = useState(false), open = _e[0], setOpen = _e[1];
1271
+ var _f = useFilterPanelContext().anchorState, setAnchorEl = _f[1];
1225
1272
  var column = table.getColumn(columnId);
1226
1273
  var meta = column.columnDef.meta;
1227
1274
  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();
1275
+ var value = '';
1276
+ if (stageFilterSelections) {
1277
+ value = stagedColumnFilters.get(columnId);
1278
+ }
1279
+ else {
1280
+ value = column.getFilterValue();
1281
+ }
1229
1282
  var fallbackValue = multiple ? [] : '';
1230
1283
  var filteredOptions = options.map(function (option) {
1231
1284
  if (Array.isArray(value)) {
1232
1285
  if (value.includes(option.value)) {
1233
- return __assign$3(__assign$3({}, option), { hide: true });
1286
+ return __assign$3(__assign$3({}, option), { hide: !stageFilterSelections });
1234
1287
  }
1235
1288
  }
1236
1289
  if (typeof value === 'string' || typeof value === 'number') {
1237
1290
  if (value === option.value) {
1238
- return __assign$3(__assign$3({}, option), { hide: true });
1291
+ return __assign$3(__assign$3({}, option), { hide: !stageFilterSelections });
1239
1292
  }
1240
1293
  }
1241
1294
  return __assign$3(__assign$3({}, option), { hide: false });
1242
1295
  });
1243
1296
  var filteredOptionsCount = filteredOptions.filter(function (option) { return !(option === null || option === void 0 ? void 0 : option.hide); }).length;
1244
1297
  var renderedValue = '';
1245
- if (value && filteredOptions && filteredOptionsCount > 0) {
1298
+ if (!stageFilterSelections && value && filteredOptions && filteredOptionsCount > 0) {
1246
1299
  if (typeof value === 'string' || typeof value === 'number') {
1247
1300
  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
1301
  }
@@ -1255,12 +1308,20 @@ var SelectFilter = function (props) {
1255
1308
  }
1256
1309
  var handleChange = function (event) {
1257
1310
  event.stopPropagation();
1258
- column.setFilterValue(event.target.value);
1259
- setAnchorEl(null);
1311
+ if (stageFilterSelections) {
1312
+ stagedColumnFilters.update(columnId, event.target.value);
1313
+ }
1314
+ else {
1315
+ column.setFilterValue(event.target.value);
1316
+ setAnchorEl(null);
1317
+ }
1260
1318
  };
1261
1319
  var handleItemClick = function () {
1262
1320
  if (multiple) {
1263
- if (filteredOptionsCount === 1) {
1321
+ if (!stageFilterSelections && filteredOptionsCount === 1) {
1322
+ setOpen(false);
1323
+ }
1324
+ else {
1264
1325
  setOpen(false);
1265
1326
  }
1266
1327
  }
@@ -1268,7 +1329,7 @@ var SelectFilter = function (props) {
1268
1329
  return (React__default.createElement(Box, { className: classes.selectContainer },
1269
1330
  React__default.createElement(FormControl, { variant: "outlined", fullWidth: true },
1270
1331
  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: {
1332
+ 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
1333
  root: classes.selectRoot,
1273
1334
  icon: classes.icon,
1274
1335
  }, MenuProps: {
@@ -1288,7 +1349,7 @@ var SelectFilter = function (props) {
1288
1349
  };
1289
1350
 
1290
1351
  var ToggleFilter = function (props) {
1291
- var table = useContext(TableContext);
1352
+ var table = useContext(TableContext).table;
1292
1353
  var columnId = props.columnId;
1293
1354
  var column = table.getColumn(columnId);
1294
1355
  var meta = column.columnDef.meta;
@@ -1386,44 +1447,37 @@ function makeFormatSelectedFilterText(table) {
1386
1447
  };
1387
1448
  }
1388
1449
 
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();
1450
+ var useStagedColumnFilters = function () {
1451
+ var _a = useState(new Map()), columnInputValues = _a[0], setColumnInputValues = _a[1];
1452
+ var filterState = {
1453
+ update: function (columnId, value) {
1454
+ return setColumnInputValues(columnInputValues.set(columnId, value));
1455
+ },
1456
+ get: function (columnId) { return columnInputValues.get(columnId); },
1457
+ clear: function () {
1458
+ columnInputValues.clear();
1459
+ setColumnInputValues(columnInputValues);
1460
+ },
1461
+ delete: function (columnFilter) {
1462
+ var values = columnInputValues.get(columnFilter.id);
1463
+ if (values && Array.isArray(values)) {
1464
+ var valueIndex = values.indexOf(columnFilter.value);
1465
+ values.splice(valueIndex, 1);
1466
+ if (values.length > 0) {
1467
+ columnInputValues.set(columnFilter.id, values);
1468
+ }
1469
+ else {
1470
+ columnInputValues.clear();
1471
+ }
1406
1472
  }
1407
- }
1473
+ else {
1474
+ columnInputValues.delete(columnFilter.id);
1475
+ }
1476
+ setColumnInputValues(columnInputValues);
1477
+ },
1478
+ exist: function () { return columnInputValues.size > 0; },
1408
1479
  };
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 }))); })))));
1480
+ return filterState;
1427
1481
  };
1428
1482
 
1429
1483
  /*! *****************************************************************************
@@ -2018,7 +2072,7 @@ Link.defaultProps = {
2018
2072
  };
2019
2073
  Link.displayName = 'Link';
2020
2074
 
2021
- var useStyles$5 = makeStyles(function (_a) {
2075
+ var useStyles$4$1 = makeStyles(function (_a) {
2022
2076
  var spacing = _a.spacing;
2023
2077
  return ({
2024
2078
  root: {
@@ -2032,7 +2086,7 @@ var useStyles$5 = makeStyles(function (_a) {
2032
2086
  });
2033
2087
  var Paper = forwardRef(function (props, ref) {
2034
2088
  var legacyStyles = props.legacyStyles, restProps = __rest(props, ["legacyStyles"]);
2035
- var classes = useStyles$5(props);
2089
+ var classes = useStyles$4$1(props);
2036
2090
  return React__default.createElement(Paper$2, __assign({}, ref, { classes: __assign({}, (legacyStyles && classes)) }, restProps));
2037
2091
  });
2038
2092
  Paper.displayName = 'Paper';
@@ -2185,6 +2239,45 @@ makeStyles(function (theme) { return ({
2185
2239
  },
2186
2240
  }); });
2187
2241
 
2242
+ makeStyles(function () { return ({
2243
+ root: {
2244
+ display: 'flex',
2245
+ flexDirection: 'column',
2246
+ alignItems: 'center',
2247
+ gridGap: 16,
2248
+ },
2249
+ }); });
2250
+
2251
+ var FollowerAuthenticationDialogContext = createContext(null);
2252
+ FollowerAuthenticationDialogContext.Provider;
2253
+
2254
+ makeStyles(function () { return ({
2255
+ form: {
2256
+ display: 'flex',
2257
+ flexDirection: 'column',
2258
+ alignItems: 'center',
2259
+ width: '100%',
2260
+ gridGap: 16,
2261
+ },
2262
+ }); });
2263
+
2264
+ makeStyles(function () { return ({
2265
+ main: {
2266
+ width: '100%',
2267
+ display: 'flex',
2268
+ flexDirection: 'column',
2269
+ gridGap: 16,
2270
+ },
2271
+ }); });
2272
+
2273
+ makeStyles(function () { return ({
2274
+ root: {
2275
+ position: 'absolute',
2276
+ top: 0,
2277
+ right: 0,
2278
+ },
2279
+ }); });
2280
+
2188
2281
  var _g$2B;
2189
2282
 
2190
2283
  function _extends$4J() { _extends$4J = 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$4J.apply(this, arguments); }
@@ -3199,6 +3292,68 @@ createTheme(adminLightOptions);
3199
3292
  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
3293
  createTheme(adminDarkOptions);
3201
3294
 
3295
+ var Panel = function (props) {
3296
+ var anchorEl = props.anchorEl, onClose = props.onClose;
3297
+ var classes = useStyles$5();
3298
+ var _a = useContext(TableContext), table = _a.table, stagedColumnFilters = _a.stagedColumnFilters, stageFilterSelections = _a.stageFilterSelections;
3299
+ var paperRef = useRef(null);
3300
+ var _b = useColumnFilters(table), columnFilters = _b.columnFilters, resetColumnFilters = _b.resetColumnFilters;
3301
+ var handleClick = function (e) {
3302
+ var _a;
3303
+ var rect = (_a = paperRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
3304
+ if (rect) {
3305
+ var buffer = 10;
3306
+ var mouseX = e.nativeEvent.x;
3307
+ var mouseY = e.nativeEvent.y;
3308
+ var xHit = rect.x - buffer < mouseX && mouseX < rect.x + rect.width + buffer;
3309
+ var yHit = rect.y - buffer < mouseY && mouseY < rect.y + rect.height + buffer;
3310
+ if (!xHit || !yHit) {
3311
+ onClose();
3312
+ }
3313
+ }
3314
+ };
3315
+ var handleApplyClick = function () {
3316
+ if (stagedColumnFilters.exist()) {
3317
+ columnFilters.forEach(function (columnFilter) {
3318
+ var columnInputValue = stagedColumnFilters.get(columnFilter.columnId);
3319
+ if (columnInputValue) {
3320
+ var column = table.getColumn(columnFilter.columnId);
3321
+ column.setFilterValue(columnInputValue);
3322
+ }
3323
+ });
3324
+ }
3325
+ else {
3326
+ resetColumnFilters();
3327
+ }
3328
+ onClose();
3329
+ };
3330
+ var handleCancelClick = function () {
3331
+ stagedColumnFilters.clear();
3332
+ onClose();
3333
+ };
3334
+ var open = Boolean(anchorEl);
3335
+ return (React__default.createElement(Popover, { onClick: handleClick, anchorEl: anchorEl, anchorOrigin: {
3336
+ vertical: 'bottom',
3337
+ horizontal: 'right',
3338
+ }, className: classes.filterPopover, onClose: onClose, open: open, PaperProps: {
3339
+ style: {
3340
+ backgroundColor: 'transparent',
3341
+ boxShadow: 'none',
3342
+ borderRadius: 0,
3343
+ },
3344
+ }, transformOrigin: {
3345
+ vertical: 'top',
3346
+ horizontal: 'right',
3347
+ } },
3348
+ React__default.createElement(Paper$1, { className: classes.filterPopoverContents, elevation: 2 },
3349
+ React__default.createElement(Box, __assign$3({}, { ref: paperRef }, { padding: 3 }),
3350
+ React__default.createElement(Typography$1, { className: classes.menuTitle }, "Filter By"),
3351
+ columnFilters.map(function (columnFilter, i) { return (React__default.createElement(FilterControl, __assign$3({}, columnFilter, { key: i }))); })),
3352
+ stageFilterSelections && (React__default.createElement(Box, { className: classes.buttonBox },
3353
+ React__default.createElement(Button, { variant: "secondary", onClick: handleCancelClick }, "Cancel"),
3354
+ React__default.createElement(Button, { onClick: handleApplyClick }, "Apply"))))));
3355
+ };
3356
+
3202
3357
  var useStyles$3 = makeStyles({
3203
3358
  root: {
3204
3359
  justifySelf: 'end',
@@ -4033,8 +4188,8 @@ var defaultTableProps = {
4033
4188
  searchable: false,
4034
4189
  };
4035
4190
  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;
4037
- var classes = useStyles$7(props);
4191
+ 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;
4192
+ var classes = useStyles$6(props);
4038
4193
  var rootRef = useRef(null);
4039
4194
  // Prepare Empty State
4040
4195
  var isEmpty = data.length === 0;
@@ -4061,6 +4216,8 @@ var Table = function (props) {
4061
4216
  // Init table instance
4062
4217
  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
4218
  var _f = useColumnFilters(table), selectedColumnFilters = _f.selectedColumnFilters, hasColumnFilters = _f.hasColumnFilters, deselectColumnFilter = _f.deselectColumnFilter, formatSelectedFilterText = _f.formatSelectedFilterText, resetColumnFilters = _f.resetColumnFilters;
4219
+ // stagedColumnFilters is only used when stageFilterSelections is enabled
4220
+ var stagedColumnFilters = useStagedColumnFilters();
4064
4221
  var handlePagination = function (_e, pageNumber) {
4065
4222
  var pageIndex = pageNumber - 1;
4066
4223
  table.setPageIndex(pageIndex);
@@ -4069,7 +4226,7 @@ var Table = function (props) {
4069
4226
  var showGlobalSearch = Boolean(searchable || isControlledGlobalFilter);
4070
4227
  var showColumnFilter = Boolean(hasColumnFilters);
4071
4228
  var showControls = Boolean(showTitle || showGlobalSearch || showColumnFilter);
4072
- return (React__default.createElement(TableContext.Provider, { value: table },
4229
+ return (React__default.createElement(TableContext.Provider, { value: { table: table, stagedColumnFilters: stagedColumnFilters, stageFilterSelections: stageFilterSelections } },
4073
4230
  React__default.createElement(Box, __assign$3({ className: classes.root }, { ref: rootRef }, { "data-table-element": "root" }, (table.getPageCount() > 1 && {
4074
4231
  minHeight: getTableMinHeight(rootRef, table.getState().pagination.pageSize),
4075
4232
  })),
@@ -4079,8 +4236,18 @@ var Table = function (props) {
4079
4236
  showGlobalSearch && (React__default.createElement(GlobalFilter, __assign$3({}, GlobalFilterProps, { value: table.getState().globalFilter, setValue: table.setGlobalFilter }))),
4080
4237
  showColumnFilter && React__default.createElement(FilterPanel, null)),
4081
4238
  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(); } })))),
4239
+ selectedColumnFilters.map(function (selectedColumnFilter, i) { return (React__default.createElement(ColumnFilterChip, { key: "selected-column-filter-chip-" + i, columnFilter: selectedColumnFilter, label: formatSelectedFilterText(selectedColumnFilter), onClick: function (columnFilter) {
4240
+ if (stageFilterSelections) {
4241
+ stagedColumnFilters.delete(columnFilter);
4242
+ }
4243
+ deselectColumnFilter(columnFilter);
4244
+ } })); }),
4245
+ selectedColumnFilters.length >= 1 && (React__default.createElement(ColumnFilterResetButton, { onClick: function () {
4246
+ if (stageFilterSelections) {
4247
+ stagedColumnFilters.clear();
4248
+ }
4249
+ resetColumnFilters();
4250
+ } }))))),
4084
4251
  React__default.createElement(Box, { className: classes.tableContainer, flexGrow: loading || isEmpty ? 0 : 1 },
4085
4252
  React__default.createElement("table", { className: classes.table },
4086
4253
  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()))); }))); })),