@carbon/ibm-products 1.42.1 → 1.43.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/css/index-full-carbon.css +154 -24
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +2 -2
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon.css +154 -24
  6. package/css/index-without-carbon.css.map +1 -1
  7. package/css/index-without-carbon.min.css +2 -2
  8. package/css/index-without-carbon.min.css.map +1 -1
  9. package/css/index.css +154 -24
  10. package/css/index.css.map +1 -1
  11. package/css/index.min.css +2 -2
  12. package/css/index.min.css.map +1 -1
  13. package/es/components/AddSelect/AddSelect.js +1 -1
  14. package/es/components/AddSelect/AddSelectBody.js +1 -1
  15. package/es/components/AddSelect/AddSelectColumn.js +1 -1
  16. package/es/components/Datagrid/Datagrid/Datagrid.js +3 -3
  17. package/es/components/Datagrid/Datagrid/DatagridContent.js +43 -15
  18. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +2 -18
  19. package/es/components/Datagrid/Datagrid/DraggableElement.js +1 -1
  20. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +65 -34
  21. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +436 -0
  22. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +8 -2
  23. package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +9 -1
  24. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +2 -0
  25. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +3 -1
  26. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useSubscribeToEventEmitter.js +23 -0
  27. package/es/components/Datagrid/Datagrid/addons/Filtering/index.js +3 -1
  28. package/es/components/Datagrid/Datagrid/addons/Filtering/motion/variants.js +55 -0
  29. package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +49 -17
  30. package/es/components/Datagrid/Datagrid.stories/index.js +0 -1
  31. package/es/components/Datagrid/useFiltering.js +10 -3
  32. package/es/components/Datagrid/utils/DatagridActions.js +59 -6
  33. package/lib/components/AddSelect/AddSelect.js +1 -1
  34. package/lib/components/AddSelect/AddSelectBody.js +1 -1
  35. package/lib/components/AddSelect/AddSelectColumn.js +1 -1
  36. package/lib/components/Datagrid/Datagrid/Datagrid.js +3 -3
  37. package/lib/components/Datagrid/Datagrid/DatagridContent.js +43 -15
  38. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +2 -17
  39. package/lib/components/Datagrid/Datagrid/DraggableElement.js +1 -1
  40. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +64 -31
  41. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +445 -0
  42. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +7 -1
  43. package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +15 -3
  44. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +20 -0
  45. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +3 -1
  46. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useSubscribeToEventEmitter.js +30 -0
  47. package/lib/components/Datagrid/Datagrid/addons/Filtering/index.js +21 -1
  48. package/lib/components/Datagrid/Datagrid/addons/Filtering/motion/variants.js +64 -0
  49. package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +48 -17
  50. package/lib/components/Datagrid/Datagrid.stories/index.js +0 -7
  51. package/lib/components/Datagrid/useFiltering.js +10 -3
  52. package/lib/components/Datagrid/utils/DatagridActions.js +57 -4
  53. package/package.json +2 -2
  54. package/scss/components/Datagrid/styles/_datagrid.scss +18 -18
  55. package/scss/components/Datagrid/styles/_draggableElement.scss +12 -4
  56. package/scss/components/Datagrid/styles/_index.scss +1 -0
  57. package/scss/components/Datagrid/styles/_useInlineEdit.scss +7 -3
  58. package/scss/components/Datagrid/styles/addons/_CustomizeColumnsTearsheet.scss +5 -1
  59. package/scss/components/Datagrid/styles/addons/_FilterPanel.scss +123 -0
  60. package/scss/components/FilterSummary/_filter-summary.scss +1 -0
  61. package/es/components/Datagrid/Datagrid.stories/LeftPanelStory.js +0 -6
  62. package/lib/components/Datagrid/Datagrid.stories/LeftPanelStory.js +0 -13
@@ -21,6 +21,10 @@ import { InlineEditContext } from './addons/InlineEdit/InlineEditContext';
21
21
  import { handleGridFocus } from './addons/InlineEdit/handleGridFocus';
22
22
  import { useClickOutside } from '../../../global/js/hooks';
23
23
  import { useMultipleKeyTracking } from '../../DataSpreadsheet/hooks';
24
+ import FilterPanel from './addons/Filtering/FilterPanel';
25
+ import { FilterSummary } from '../../FilterSummary';
26
+ import { FilterContext } from './addons/Filtering';
27
+ import { CLEAR_FILTERS } from './addons/Filtering/constants';
24
28
  var TableContainer = DataTable.TableContainer,
25
29
  Table = DataTable.Table;
26
30
  var blockClass = "".concat(pkg.prefix, "--datagrid");
@@ -28,16 +32,23 @@ export var DatagridContent = function DatagridContent(_ref) {
28
32
  var _cx4;
29
33
  var datagridState = _ref.datagridState;
30
34
  var _useContext = useContext(InlineEditContext),
31
- state = _useContext.state,
35
+ inlineEditState = _useContext.state,
32
36
  dispatch = _useContext.dispatch;
33
- var activeCellId = state.activeCellId;
37
+ var _useContext2 = useContext(FilterContext),
38
+ filterTags = _useContext2.filterTags,
39
+ EventEmitter = _useContext2.EventEmitter,
40
+ leftPanelOpen = _useContext2.leftPanelOpen;
41
+ var activeCellId = inlineEditState.activeCellId,
42
+ gridActive = inlineEditState.gridActive,
43
+ editId = inlineEditState.editId;
34
44
  var _datagridState$getTab = datagridState.getTableProps,
35
45
  getTableProps = _datagridState$getTab === void 0 ? function () {} : _datagridState$getTab,
46
+ getFilterFlyoutProps = datagridState.getFilterFlyoutProps,
36
47
  withVirtualScroll = datagridState.withVirtualScroll,
37
48
  DatagridPagination = datagridState.DatagridPagination,
38
49
  isFetching = datagridState.isFetching,
39
50
  CustomizeColumnsTearsheet = datagridState.CustomizeColumnsTearsheet,
40
- leftPanel = datagridState.leftPanel,
51
+ filterProps = datagridState.filterProps,
41
52
  fullHeightDatagrid = datagridState.fullHeightDatagrid,
42
53
  _datagridState$vertic = datagridState.verticalAlign,
43
54
  verticalAlign = _datagridState$vertic === void 0 ? 'center' : _datagridState$vertic,
@@ -49,10 +60,9 @@ export var DatagridContent = function DatagridContent(_ref) {
49
60
  tableId = datagridState.tableId,
50
61
  DatagridActions = datagridState.DatagridActions,
51
62
  totalColumnsWidth = datagridState.totalColumnsWidth,
52
- gridRef = datagridState.gridRef;
63
+ gridRef = datagridState.gridRef,
64
+ state = datagridState.state;
53
65
  var rows = DatagridPagination && datagridState.page || datagridState.rows;
54
- var gridActive = state.gridActive,
55
- editId = state.editId;
56
66
  var gridAreaRef = useRef();
57
67
  var multiKeyTrackingRef = useRef();
58
68
  useClickOutside(gridAreaRef, function (target) {
@@ -80,14 +90,14 @@ export var DatagridContent = function DatagridContent(_ref) {
80
90
  return handleGridKeyPress({
81
91
  event: event,
82
92
  dispatch: dispatch,
83
- state: state,
93
+ inlineEditState: inlineEditState,
84
94
  instance: datagridState,
85
95
  keysPressedList: keysPressedList,
86
96
  usingMac: usingMac
87
97
  });
88
98
  } : null,
89
99
  onFocus: withInlineEdit ? function () {
90
- return handleGridFocus(state, dispatch);
100
+ return handleGridFocus(inlineEditState, dispatch);
91
101
  } : null
92
102
  }), !withVirtualScroll ? /*#__PURE__*/React.createElement(DatagridHead, datagridState) : null, /*#__PURE__*/React.createElement(DatagridBody, _extends({}, datagridState, {
93
103
  rows: rows
@@ -113,34 +123,49 @@ export var DatagridContent = function DatagridContent(_ref) {
113
123
  gridElement.style.setProperty("--".concat(blockClass, "--grid-header-height"), px((tableHeader === null || tableHeader === void 0 ? void 0 : tableHeader.clientHeight) || 0));
114
124
  }
115
125
  }, [withInlineEdit, tableId, totalColumnsWidth, datagridState, gridActive]);
126
+ var renderFilterSummary = function renderFilterSummary() {
127
+ return state.filters.length > 0 && /*#__PURE__*/React.createElement(FilterSummary, {
128
+ className: "".concat(blockClass, "__filter-summary"),
129
+ filters: filterTags,
130
+ clearFilters: function clearFilters() {
131
+ return EventEmitter.dispatch(CLEAR_FILTERS);
132
+ }
133
+ });
134
+ };
116
135
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TableContainer, {
117
136
  className: cx("".concat(blockClass, "__grid-container"), withVirtualScroll || fullHeightDatagrid ? "".concat(blockClass, "__full-height") : '', DatagridPagination ? "".concat(blockClass, "__with-pagination") : '', useDenseHeader ? "".concat(blockClass, "__dense-header") : '', (_cx4 = {}, _defineProperty(_cx4, "".concat(blockClass, "__grid-container-grid-active"), gridActive), _defineProperty(_cx4, "".concat(blockClass, "__grid-container-inline-edit"), withInlineEdit), _defineProperty(_cx4, "".concat(blockClass, "__grid-container-grid-active--without-toolbar"), withInlineEdit && !DatagridActions), _cx4)),
118
137
  title: gridTitle,
119
138
  description: gridDescription
120
139
  }, /*#__PURE__*/React.createElement(DatagridToolbar, datagridState), /*#__PURE__*/React.createElement("div", {
121
- className: "".concat(blockClass, "__table-container"),
140
+ className: cx("".concat(blockClass, "__table-container"), _defineProperty({}, "".concat(blockClass, "__table-container--filter-open"), leftPanelOpen)),
122
141
  ref: gridAreaRef
123
- }, leftPanel && leftPanel.isOpen && /*#__PURE__*/React.createElement("div", {
124
- className: "".concat(blockClass, "__datagridLeftPanel")
125
- }, leftPanel.panelContent), withInlineEdit ? /*#__PURE__*/React.createElement("div", {
142
+ }, (filterProps === null || filterProps === void 0 ? void 0 : filterProps.variation) === 'panel' && /*#__PURE__*/React.createElement(FilterPanel, _extends({
143
+ updateMethod: "batch"
144
+ }, getFilterFlyoutProps(), {
145
+ title: filterProps.panelTitle,
146
+ filterSections: filterProps.sections
147
+ })), /*#__PURE__*/React.createElement("div", {
148
+ className: "".concat(blockClass, "__table-container-inner")
149
+ }, renderFilterSummary(), withInlineEdit ? /*#__PURE__*/React.createElement("div", {
126
150
  ref: multiKeyTrackingRef
127
151
  }, renderTable()) : withVirtualScroll ? /*#__PURE__*/React.createElement("div", {
128
152
  className: "".concat(blockClass, "__virtualScrollContainer"),
129
153
  ref: gridRef
130
- }, renderTable()) : renderTable())), (rows === null || rows === void 0 ? void 0 : rows.length) > 0 && !isFetching && DatagridPagination && /*#__PURE__*/React.createElement(DatagridPagination, datagridState), CustomizeColumnsTearsheet && /*#__PURE__*/React.createElement(CustomizeColumnsTearsheet, {
154
+ }, renderTable()) : renderTable()))), (rows === null || rows === void 0 ? void 0 : rows.length) > 0 && !isFetching && DatagridPagination && /*#__PURE__*/React.createElement(DatagridPagination, datagridState), CustomizeColumnsTearsheet && /*#__PURE__*/React.createElement(CustomizeColumnsTearsheet, {
131
155
  instance: datagridState
132
156
  }));
133
157
  };
134
158
  DatagridContent.propTypes = {
135
159
  datagridState: PropTypes.shape({
136
160
  getTableProps: PropTypes.func,
161
+ getFilterFlyoutProps: PropTypes.func,
137
162
  withVirtualScroll: PropTypes.bool,
138
163
  DatagridActions: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),
139
164
  DatagridPagination: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),
140
165
  CustomizeColumnsTearsheet: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),
141
166
  isFetching: PropTypes.bool,
142
- leftPanel: PropTypes.object,
143
167
  fullHeightDatagrid: PropTypes.bool,
168
+ filterProps: PropTypes.object,
144
169
  variableRowHeight: PropTypes.bool,
145
170
  useDenseHeader: PropTypes.bool,
146
171
  withInlineEdit: PropTypes.bool,
@@ -151,6 +176,9 @@ DatagridContent.propTypes = {
151
176
  rows: PropTypes.arrayOf(PropTypes.object),
152
177
  tableId: PropTypes.string,
153
178
  totalColumnsWidth: PropTypes.number,
154
- gridRef: PropTypes.object
179
+ gridRef: PropTypes.object,
180
+ setAllFilters: PropTypes.func,
181
+ getFilterProps: PropTypes.func,
182
+ state: PropTypes.object
155
183
  })
156
184
  };
@@ -14,10 +14,6 @@ import { useResizeDetector } from 'react-resize-detector';
14
14
  import { ButtonMenu, ButtonMenuItem } from '../../ButtonMenu';
15
15
  import { pkg, carbon } from '../../../settings';
16
16
  import cx from 'classnames';
17
- import { FilterSummary } from '../../FilterSummary';
18
- import { useContext } from 'react';
19
- import { FilterContext } from './addons/Filtering/FilterProvider';
20
- import { CLEAR_FILTERS } from './addons/Filtering/constants';
21
17
  var blockClass = "".concat(pkg.prefix, "--datagrid");
22
18
  var TableToolbar = DataTable.TableToolbar;
23
19
  var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridState, width, ref) {
@@ -134,25 +130,13 @@ var DatagridToolbar = function DatagridToolbar(datagridState) {
134
130
  var DatagridActions = datagridState.DatagridActions,
135
131
  DatagridBatchActions = datagridState.DatagridBatchActions,
136
132
  batchActions = datagridState.batchActions,
137
- state = datagridState.state,
138
133
  rowSize = datagridState.rowSize;
139
- var _useContext = useContext(FilterContext),
140
- filterTags = _useContext.filterTags,
141
- EventEmitter = _useContext.EventEmitter;
142
- var renderFilterSummary = function renderFilterSummary() {
143
- return state.filters.length > 0 && /*#__PURE__*/React.createElement(FilterSummary, {
144
- filters: filterTags,
145
- clearFilters: function clearFilters() {
146
- return EventEmitter.dispatch(CLEAR_FILTERS);
147
- }
148
- });
149
- };
150
134
  var getRowHeight = rowSize ? rowSize : 'lg';
151
135
  return batchActions && DatagridActions ? /*#__PURE__*/React.createElement("div", {
152
136
  ref: ref,
153
137
  className: cx("".concat(blockClass, "__table-toolbar"), "".concat(blockClass, "__table-toolbar--").concat(getRowHeight))
154
- }, /*#__PURE__*/React.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref)), renderFilterSummary()) : DatagridActions ? /*#__PURE__*/React.createElement("div", {
138
+ }, /*#__PURE__*/React.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref))) : DatagridActions ? /*#__PURE__*/React.createElement("div", {
155
139
  className: "".concat(blockClass, "__table-toolbar")
156
- }, /*#__PURE__*/React.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActions && DatagridBatchActions(datagridState)), renderFilterSummary()) : null;
140
+ }, /*#__PURE__*/React.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActions && DatagridBatchActions(datagridState))) : null;
157
141
  };
158
142
  export default DatagridToolbar;
@@ -143,7 +143,7 @@ var DraggableElement = function DraggableElement(_ref) {
143
143
  className: "".concat(blockClass, "__shared-ui--assistive-text")
144
144
  }, ariaLabel), isDragging && !isOver ? /*#__PURE__*/React.createElement("div", {
145
145
  ref: preview,
146
- className: "${blockClass}__draggable-handleHolder-droppable"
146
+ className: "".concat(blockClass, "__draggable-handleHolder-droppable ").concat(blockClass, "__draggable-handleHolder-droppable--origin")
147
147
  }, content) : /*#__PURE__*/React.createElement("div", {
148
148
  ref: drag,
149
149
  "aria-hidden": isFocused && isFocusedOnItem // if focus on li, hide the children from aria
@@ -17,14 +17,11 @@ import { Button, Checkbox, DatePicker, DatePickerInput, Dropdown, FormGroup, Num
17
17
  import cx from 'classnames';
18
18
  import PropTypes from 'prop-types';
19
19
  import React, { useCallback, useRef, useState } from 'react';
20
- import { useEffect } from 'react';
21
- import { useContext } from 'react';
22
20
  import { useClickOutside } from '../../../../../global/js/hooks';
23
21
  import { pkg } from '../../../../../settings';
24
22
  import { ActionSet } from '../../../../ActionSet';
25
- import { BATCH, CHECKBOX, CLEAR_FILTERS, DATE, DROPDOWN, INSTANT, NUMBER, RADIO } from './constants';
26
- import { FilterContext } from './FilterProvider';
27
- import useInitialStateFromFilters from './hooks/useInitialStateFromFilters';
23
+ import { BATCH, CHECKBOX, CLEAR_FILTERS, DATE, DROPDOWN, FLYOUT, INSTANT, NUMBER, RADIO } from './constants';
24
+ import { useInitialStateFromFilters, useSubscribeToEventEmitter } from './hooks';
28
25
  import { getInitialStateFromFilters } from './utils';
29
26
  var blockClass = "".concat(pkg.prefix, "--datagrid");
30
27
  var componentClass = "".concat(blockClass, "-filter-flyout");
@@ -50,17 +47,15 @@ var FilterFlyout = function FilterFlyout(_ref) {
50
47
  onCancel = _ref$onCancel === void 0 ? function () {} : _ref$onCancel,
51
48
  _ref$secondaryActionL = _ref.secondaryActionLabel,
52
49
  secondaryActionLabel = _ref$secondaryActionL === void 0 ? 'Cancel' : _ref$secondaryActionL,
53
- setAllFilters = _ref.setAllFilters;
54
- /** Context state and methods */
55
- var _useContext = useContext(FilterContext),
56
- EventEmitter = _useContext.EventEmitter;
57
-
50
+ setAllFilters = _ref.setAllFilters,
51
+ _ref$data = _ref.data,
52
+ data = _ref$data === void 0 ? [] : _ref$data;
58
53
  /** State */
59
54
  var _useState = useState(false),
60
55
  _useState2 = _slicedToArray(_useState, 2),
61
56
  open = _useState2[0],
62
57
  setOpen = _useState2[1];
63
- var _useInitialStateFromF = useInitialStateFromFilters(filters),
58
+ var _useInitialStateFromF = useInitialStateFromFilters(filters, FLYOUT),
64
59
  _useInitialStateFromF2 = _slicedToArray(_useInitialStateFromF, 2),
65
60
  filtersState = _useInitialStateFromF2[0],
66
61
  setFiltersState = _useInitialStateFromF2[1];
@@ -90,6 +85,7 @@ var FilterFlyout = function FilterFlyout(_ref) {
90
85
  var apply = function apply() {
91
86
  setAllFilters(filtersObjectArray);
92
87
  closeFlyout();
88
+ // From the user
93
89
  onApply();
94
90
 
95
91
  // updates the ref so next time the flyout opens we have records of the previous filters
@@ -106,7 +102,7 @@ var FilterFlyout = function FilterFlyout(_ref) {
106
102
  };
107
103
  var reset = function reset() {
108
104
  // Get the initial values for the filters
109
- var initialFiltersState = getInitialStateFromFilters(filters);
105
+ var initialFiltersState = getInitialStateFromFilters(filters, FLYOUT);
110
106
  var initialFiltersObjectArray = [];
111
107
 
112
108
  // Set the state to the initial values
@@ -149,6 +145,23 @@ var FilterFlyout = function FilterFlyout(_ref) {
149
145
  type: type
150
146
  });
151
147
  }
148
+ if (type === CHECKBOX) {
149
+ /**
150
+ When all checkboxes of a group are all unselected the value still exists in the filtersObjectArray
151
+ This checks if all the checkboxes are selected = false and removes it from the array
152
+ */
153
+ var index = filtersObjectArrayCopy.findIndex(function (filter) {
154
+ return filter.id === column;
155
+ });
156
+
157
+ // If all the selected state is false remove from array
158
+ var shouldRemoveFromArray = filtersObjectArrayCopy[index].value.every(function (val) {
159
+ return val.selected === false;
160
+ });
161
+ if (shouldRemoveFromArray) {
162
+ filtersObjectArrayCopy.splice(index, 1);
163
+ }
164
+ }
152
165
  setFiltersObjectArray(filtersObjectArrayCopy);
153
166
 
154
167
  // Automatically apply the filters if the updateMethod is instant
@@ -160,18 +173,16 @@ var FilterFlyout = function FilterFlyout(_ref) {
160
173
  /** Effects */
161
174
  useClickOutside(filterFlyoutRef, function (target) {
162
175
  var hasClickedOnDatePicker = target.closest('.flatpickr-calendar');
163
- if (!open || hasClickedOnDatePicker) {
176
+ var hasClickedOnDropdown = target.className === 'bx--list-box__menu-item__option';
177
+ if (!open || hasClickedOnDatePicker || hasClickedOnDropdown) {
164
178
  return;
165
179
  }
166
180
  cancel();
167
181
  });
168
- useEffect(function subscribeToEmitter() {
169
- // This event is emitted from the DatagridToolbar component when clearFilters is clicked in FilterSummary
170
- EventEmitter.subscribe(CLEAR_FILTERS, reset);
171
- });
182
+ useSubscribeToEventEmitter(CLEAR_FILTERS, reset);
172
183
 
173
184
  /** Render the individual filter component */
174
- var renderFilter = useCallback(function (_ref3) {
185
+ var renderFilter = function renderFilter(_ref3) {
175
186
  var type = _ref3.type,
176
187
  column = _ref3.column,
177
188
  components = _ref3.props;
@@ -179,7 +190,10 @@ var FilterFlyout = function FilterFlyout(_ref) {
179
190
  return /*#__PURE__*/React.createElement(DatePicker, _extends({}, components.DatePicker, {
180
191
  onChange: function onChange(value) {
181
192
  var _components$DatePicke, _components$DatePicke2;
182
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, value)));
193
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
194
+ value: value,
195
+ type: type
196
+ })));
183
197
  applyFilters({
184
198
  column: column,
185
199
  value: value,
@@ -187,7 +201,7 @@ var FilterFlyout = function FilterFlyout(_ref) {
187
201
  });
188
202
  (_components$DatePicke = (_components$DatePicke2 = components.DatePicker).onChange) === null || _components$DatePicke === void 0 ? void 0 : _components$DatePicke.call(_components$DatePicke2, value);
189
203
  },
190
- value: filtersState[column],
204
+ value: filtersState[column].value,
191
205
  datePickerType: "range"
192
206
  }), /*#__PURE__*/React.createElement(DatePickerInput, _extends({
193
207
  placeholder: "mm/dd/yyyy",
@@ -204,7 +218,10 @@ var FilterFlyout = function FilterFlyout(_ref) {
204
218
  }, components.NumberInput, {
205
219
  onChange: function onChange(event) {
206
220
  var _components$NumberInp, _components$NumberInp2;
207
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, event.target.value)));
221
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
222
+ value: event.target.value,
223
+ type: type
224
+ })));
208
225
  applyFilters({
209
226
  column: column,
210
227
  value: event.target.value,
@@ -212,24 +229,27 @@ var FilterFlyout = function FilterFlyout(_ref) {
212
229
  });
213
230
  (_components$NumberInp = (_components$NumberInp2 = components.NumberInput).onChange) === null || _components$NumberInp === void 0 ? void 0 : _components$NumberInp.call(_components$NumberInp2, event);
214
231
  },
215
- value: filtersState[column]
232
+ value: filtersState[column].value
216
233
  }));
217
234
  } else if (type === CHECKBOX) {
218
- return /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, filtersState[column].map(function (option) {
235
+ return /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
219
236
  return /*#__PURE__*/React.createElement(Checkbox, _extends({
220
237
  key: option.labelText
221
238
  }, option, {
222
239
  onChange: function onChange(isSelected) {
223
240
  var _option$onChange;
224
- var checkboxCopy = filtersState[column];
241
+ var checkboxCopy = filtersState[column].value;
225
242
  var foundCheckbox = checkboxCopy.find(function (checkbox) {
226
243
  return checkbox.value === option.value;
227
244
  });
228
245
  foundCheckbox.selected = isSelected;
229
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, checkboxCopy)));
246
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
247
+ value: checkboxCopy,
248
+ type: type
249
+ })));
230
250
  applyFilters({
231
251
  column: column,
232
- value: _toConsumableArray(filtersState[column]),
252
+ value: _toConsumableArray(filtersState[column].value),
233
253
  type: type
234
254
  });
235
255
  (_option$onChange = option.onChange) === null || _option$onChange === void 0 ? void 0 : _option$onChange.call(option, isSelected);
@@ -239,10 +259,13 @@ var FilterFlyout = function FilterFlyout(_ref) {
239
259
  }));
240
260
  } else if (type === RADIO) {
241
261
  return /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, /*#__PURE__*/React.createElement(RadioButtonGroup, _extends({}, components.RadioButtonGroup, {
242
- valueSelected: filtersState[column],
262
+ valueSelected: filtersState[column].value,
243
263
  onChange: function onChange(selected) {
244
264
  var _components$RadioButt, _components$RadioButt2;
245
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, selected)));
265
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
266
+ value: selected,
267
+ type: type
268
+ })));
246
269
  applyFilters({
247
270
  column: column,
248
271
  value: selected,
@@ -258,11 +281,14 @@ var FilterFlyout = function FilterFlyout(_ref) {
258
281
  })));
259
282
  } else if (type === DROPDOWN) {
260
283
  return /*#__PURE__*/React.createElement(Dropdown, _extends({}, components.Dropdown, {
261
- selectedItem: filtersState[column],
284
+ selectedItem: filtersState[column].value,
262
285
  onChange: function onChange(_ref5) {
263
286
  var _components$Dropdown$, _components$Dropdown;
264
287
  var selectedItem = _ref5.selectedItem;
265
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, selectedItem)));
288
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
289
+ value: selectedItem,
290
+ type: type
291
+ })));
266
292
  applyFilters({
267
293
  column: column,
268
294
  value: selectedItem,
@@ -272,12 +298,12 @@ var FilterFlyout = function FilterFlyout(_ref) {
272
298
  }
273
299
  }));
274
300
  }
275
- }, [filtersState, applyFilters, setFiltersState]);
301
+ };
276
302
 
277
303
  /** Renders all filters */
278
- var renderFilters = useCallback(function () {
304
+ var renderFilters = function renderFilters() {
279
305
  return filters.map(renderFilter);
280
- }, [filters, renderFilter]);
306
+ };
281
307
  var renderActionSet = function renderActionSet() {
282
308
  return showActionSet && /*#__PURE__*/React.createElement(ActionSet, {
283
309
  actions: [{
@@ -306,7 +332,8 @@ var FilterFlyout = function FilterFlyout(_ref) {
306
332
  renderIcon: Filter16,
307
333
  iconDescription: flyoutIconDescription,
308
334
  onClick: open ? closeFlyout : openFlyout,
309
- className: cx("".concat(componentClass, "__trigger"), _defineProperty({}, "".concat(componentClass, "__trigger--open"), open))
335
+ className: cx("".concat(componentClass, "__trigger"), _defineProperty({}, "".concat(componentClass, "__trigger--open"), open)),
336
+ disabled: data.length === 0
310
337
  }), /*#__PURE__*/React.createElement("div", {
311
338
  ref: filterFlyoutRef,
312
339
  className: cx(componentClass, (_cx2 = {}, _defineProperty(_cx2, "".concat(componentClass, "--open"), open), _defineProperty(_cx2, "".concat(componentClass, "--batch"), showActionSet), _defineProperty(_cx2, "".concat(componentClass, "--instant"), !showActionSet), _cx2))
@@ -319,6 +346,10 @@ var FilterFlyout = function FilterFlyout(_ref) {
319
346
  }, renderFilters())), renderActionSet()));
320
347
  };
321
348
  FilterFlyout.propTypes = {
349
+ /**
350
+ * All data rows in the table
351
+ */
352
+ data: PropTypes.array.isRequired,
322
353
  /**
323
354
  * Array of filters to render
324
355
  */