@carbon/ibm-products 1.42.1 → 1.44.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. package/css/index-full-carbon.css +158 -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 +158 -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 +158 -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 +6 -4
  20. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +6 -2
  21. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +1 -1
  22. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +65 -34
  23. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +436 -0
  24. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +8 -2
  25. package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +9 -1
  26. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +2 -0
  27. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +3 -1
  28. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useSubscribeToEventEmitter.js +23 -0
  29. package/es/components/Datagrid/Datagrid/addons/Filtering/index.js +3 -1
  30. package/es/components/Datagrid/Datagrid/addons/Filtering/motion/variants.js +55 -0
  31. package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +49 -17
  32. package/es/components/Datagrid/Datagrid.stories/index.js +0 -1
  33. package/es/components/Datagrid/useFiltering.js +10 -3
  34. package/es/components/Datagrid/utils/DatagridActions.js +59 -6
  35. package/lib/components/AddSelect/AddSelect.js +1 -1
  36. package/lib/components/AddSelect/AddSelectBody.js +1 -1
  37. package/lib/components/AddSelect/AddSelectColumn.js +1 -1
  38. package/lib/components/Datagrid/Datagrid/Datagrid.js +3 -3
  39. package/lib/components/Datagrid/Datagrid/DatagridContent.js +43 -15
  40. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +2 -17
  41. package/lib/components/Datagrid/Datagrid/DraggableElement.js +5 -3
  42. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +6 -2
  43. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +1 -1
  44. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +64 -31
  45. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +445 -0
  46. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +7 -1
  47. package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +15 -3
  48. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +20 -0
  49. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +3 -1
  50. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useSubscribeToEventEmitter.js +30 -0
  51. package/lib/components/Datagrid/Datagrid/addons/Filtering/index.js +21 -1
  52. package/lib/components/Datagrid/Datagrid/addons/Filtering/motion/variants.js +64 -0
  53. package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +48 -17
  54. package/lib/components/Datagrid/Datagrid.stories/index.js +0 -7
  55. package/lib/components/Datagrid/useFiltering.js +10 -3
  56. package/lib/components/Datagrid/utils/DatagridActions.js +57 -4
  57. package/package.json +2 -2
  58. package/scss/components/Datagrid/styles/_datagrid.scss +18 -18
  59. package/scss/components/Datagrid/styles/_draggableElement.scss +16 -4
  60. package/scss/components/Datagrid/styles/_index.scss +1 -0
  61. package/scss/components/Datagrid/styles/_useInlineEdit.scss +7 -3
  62. package/scss/components/Datagrid/styles/addons/_CustomizeColumnsTearsheet.scss +5 -1
  63. package/scss/components/Datagrid/styles/addons/_FilterPanel.scss +123 -0
  64. package/scss/components/FilterSummary/_filter-summary.scss +1 -0
  65. package/es/components/Datagrid/Datagrid.stories/LeftPanelStory.js +0 -6
  66. package/lib/components/Datagrid/Datagrid.stories/LeftPanelStory.js +0 -13
@@ -12,6 +12,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
12
12
  */
13
13
  import { useMemo } from 'react';
14
14
  import { FilterFlyout } from './Datagrid/addons/Filtering';
15
+ import { BATCH } from './Datagrid/addons/Filtering/constants';
15
16
  var useFiltering = function useFiltering(hooks) {
16
17
  var filterTypes = useMemo(function () {
17
18
  return {
@@ -62,14 +63,20 @@ var useFiltering = function useFiltering(hooks) {
62
63
  hooks.useInstance.push(function (instance) {
63
64
  var filterProps = instance.filterProps,
64
65
  setAllFilters = instance.setAllFilters,
65
- headers = instance.headers;
66
+ setFilter = instance.setFilter,
67
+ headers = instance.headers,
68
+ data = instance.data;
66
69
  var defaultProps = {
67
- variation: 'flyout'
70
+ variation: 'flyout',
71
+ updateMethod: BATCH,
72
+ panelIconDescription: 'Open filter panel'
68
73
  };
69
74
  var getFilterFlyoutProps = function getFilterFlyoutProps() {
70
75
  return _objectSpread(_objectSpread(_objectSpread({}, defaultProps), filterProps), {}, {
71
76
  setAllFilters: setAllFilters,
72
- headers: headers
77
+ setFilter: setFilter,
78
+ headers: headers,
79
+ data: data
73
80
  });
74
81
  };
75
82
  Object.assign(instance, {
@@ -6,14 +6,17 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
8
 
9
- import React, { useLayoutEffect, useMemo, useState } from 'react';
9
+ import React, { useLayoutEffect, useMemo, useContext, useState } from 'react';
10
10
  import { Button, DataTable, OverflowMenu, OverflowMenuItem, ComposedModal, ModalBody, ModalFooter, ModalHeader, Dropdown } from 'carbon-components-react';
11
- import { Add16, ChevronDown16, Download16, Restart16 } from '@carbon/icons-react';
11
+ import { Add16, ChevronDown16, Download16, Filter16, Restart16 } from '@carbon/icons-react';
12
12
  import { action } from '@storybook/addon-actions';
13
13
  import { pkg } from '../../../settings';
14
14
  import { ButtonMenu, ButtonMenuItem } from '../../ButtonMenu';
15
+ import { FilterContext } from '../Datagrid/addons/Filtering';
15
16
  var blockClass = "".concat(pkg.prefix, "--datagrid");
16
17
  export var DatagridActions = function DatagridActions(datagridState) {
18
+ var _useContext = useContext(FilterContext),
19
+ setLeftPanelOpen = _useContext.setLeftPanelOpen;
17
20
  var selectedFlatRows = datagridState.selectedFlatRows,
18
21
  setGlobalFilter = datagridState.setGlobalFilter,
19
22
  CustomizeColumnsButton = datagridState.CustomizeColumnsButton,
@@ -22,6 +25,7 @@ export var DatagridActions = function DatagridActions(datagridState) {
22
25
  useDenseHeader = datagridState.useDenseHeader,
23
26
  filterProps = datagridState.filterProps,
24
27
  getFilterFlyoutProps = datagridState.getFilterFlyoutProps,
28
+ data = datagridState.data,
25
29
  FilterFlyout = datagridState.FilterFlyout;
26
30
  var downloadCsv = function downloadCsv() {
27
31
  alert('Downloading...');
@@ -45,6 +49,23 @@ export var DatagridActions = function DatagridActions(datagridState) {
45
49
  var renderFilterFlyout = function renderFilterFlyout() {
46
50
  return (filterProps === null || filterProps === void 0 ? void 0 : filterProps.variation) === 'flyout' && /*#__PURE__*/React.createElement(FilterFlyout, getFilterFlyoutProps());
47
51
  };
52
+ var renderFilterPanelButton = function renderFilterPanelButton() {
53
+ return (filterProps === null || filterProps === void 0 ? void 0 : filterProps.variation) === 'panel' && /*#__PURE__*/React.createElement(Button, {
54
+ kind: "ghost",
55
+ hasIconOnly: true,
56
+ tooltipPosition: "bottom",
57
+ renderIcon: Filter16,
58
+ iconDescription: filterProps.panelIconDescription,
59
+ className: "".concat(blockClass, "-filter-panel-open-button"),
60
+ onClick: function onClick() {
61
+ return setLeftPanelOpen(function (open) {
62
+ return !open;
63
+ });
64
+ },
65
+ disabled: data.length === 0,
66
+ tooltipAlignment: "start"
67
+ });
68
+ };
48
69
  var _useState = useState(false),
49
70
  _useState2 = _slicedToArray(_useState, 2),
50
71
  modalOpen = _useState2[0],
@@ -66,7 +87,7 @@ export var DatagridActions = function DatagridActions(datagridState) {
66
87
  var items = ['Option 1', 'Option 2', 'Option 3'];
67
88
  return isNothingSelected && (useDenseHeader && useDenseHeader ? /*#__PURE__*/React.createElement(TableToolbarContent, {
68
89
  size: "sm"
69
- }, !mobileToolbar ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
90
+ }, !mobileToolbar ? /*#__PURE__*/React.createElement(React.Fragment, null, renderFilterPanelButton(), /*#__PURE__*/React.createElement("div", {
70
91
  style: style
71
92
  }, /*#__PURE__*/React.createElement(Button, {
72
93
  kind: "ghost",
@@ -111,7 +132,7 @@ export var DatagridActions = function DatagridActions(datagridState) {
111
132
  itemText: "Create",
112
133
  hasDivider: true,
113
134
  requireTitle: true
114
- }))) : !mobileToolbar ? /*#__PURE__*/React.createElement(TableToolbarContent, null, /*#__PURE__*/React.createElement(TableToolbarSearch, {
135
+ }))) : !mobileToolbar ? /*#__PURE__*/React.createElement(TableToolbarContent, null, renderFilterPanelButton(), /*#__PURE__*/React.createElement(TableToolbarSearch, {
115
136
  size: "xl",
116
137
  id: "columnSearch",
117
138
  persistent: true,
@@ -153,7 +174,7 @@ export var DatagridActions = function DatagridActions(datagridState) {
153
174
  }), /*#__PURE__*/React.createElement(ButtonMenuItem, {
154
175
  itemText: "Option 3",
155
176
  onClick: action("Click on ButtonMenu Option 3")
156
- }))) : /*#__PURE__*/React.createElement(TableToolbarContent, null, /*#__PURE__*/React.createElement(TableToolbarSearch, {
177
+ }))) : /*#__PURE__*/React.createElement(TableToolbarContent, null, renderFilterPanelButton(), /*#__PURE__*/React.createElement(TableToolbarSearch, {
157
178
  size: "xl",
158
179
  id: "columnSearch",
159
180
  persistent: true,
@@ -161,7 +182,39 @@ export var DatagridActions = function DatagridActions(datagridState) {
161
182
  onChange: function onChange(e) {
162
183
  return setGlobalFilter(e.target.value);
163
184
  }
164
- }), /*#__PURE__*/React.createElement(OverflowMenu, {
185
+ }), renderFilterFlyout(), /*#__PURE__*/React.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/React.createElement("div", {
186
+ style: style
187
+ }, /*#__PURE__*/React.createElement(Button, {
188
+ kind: "ghost",
189
+ hasIconOnly: true,
190
+ tooltipPosition: "bottom",
191
+ renderIcon: Restart16,
192
+ iconDescription: 'Refresh',
193
+ onClick: refreshColumns
194
+ })), /*#__PURE__*/React.createElement("div", {
195
+ style: style
196
+ }, /*#__PURE__*/React.createElement(Button, {
197
+ kind: "ghost",
198
+ hasIconOnly: true,
199
+ tooltipPosition: "bottom",
200
+ renderIcon: Download16,
201
+ iconDescription: 'Download CSV',
202
+ onClick: downloadCsv
203
+ })), CustomizeColumnsButton && /*#__PURE__*/React.createElement("div", {
204
+ style: style
205
+ }, /*#__PURE__*/React.createElement(CustomizeColumnsButton, null)), /*#__PURE__*/React.createElement(ButtonMenu, {
206
+ label: "Primary button",
207
+ renderIcon: Add16
208
+ }, /*#__PURE__*/React.createElement(ButtonMenuItem, {
209
+ itemText: "Option 1",
210
+ onClick: action("Click on ButtonMenu Option 1")
211
+ }), /*#__PURE__*/React.createElement(ButtonMenuItem, {
212
+ itemText: "Option 2",
213
+ onClick: action("Click on ButtonMenu Option 2")
214
+ }), /*#__PURE__*/React.createElement(ButtonMenuItem, {
215
+ itemText: "Option 3",
216
+ onClick: action("Click on ButtonMenu Option 3")
217
+ })), /*#__PURE__*/React.createElement(OverflowMenu, {
165
218
  ariaLabel: "Tools",
166
219
  size: "lg",
167
220
  flipped: true,
@@ -69,7 +69,7 @@ AddSelect.propTypes = {
69
69
  options: _propTypes.default.array
70
70
  }),
71
71
  sortBy: _propTypes.default.array,
72
- filterBy: _propTypes.default.array,
72
+ filterBy: _propTypes.default.string,
73
73
  entries: _propTypes.default.arrayOf(_propTypes.default.shape({
74
74
  avatar: _propTypes.default.shape({
75
75
  alt: _propTypes.default.string,
@@ -321,7 +321,7 @@ AddSelectBody.propTypes = {
321
321
  options: _propTypes.default.array
322
322
  }),
323
323
  sortBy: _propTypes.default.array,
324
- filterBy: _propTypes.default.array,
324
+ filterBy: _propTypes.default.string,
325
325
  entries: _propTypes.default.arrayOf(_propTypes.default.shape({
326
326
  avatar: _propTypes.default.shape({
327
327
  alt: _propTypes.default.string,
@@ -127,7 +127,6 @@ var AddSelectColumn = function AddSelectColumn(_ref) {
127
127
  if (filters.length === 0) {
128
128
  return true;
129
129
  }
130
- var filterBy = item.filterBy;
131
130
  var filterByValue = item[filterBy];
132
131
  return filters.some(function (filter) {
133
132
  return filter === filterByValue;
@@ -177,6 +176,7 @@ var AddSelectColumn = function AddSelectColumn(_ref) {
177
176
  }, /*#__PURE__*/_react.default.createElement("div", {
178
177
  className: "".concat(_settings.carbon.prefix, "--overflow-menu-options__btn")
179
178
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, {
179
+ className: "".concat(colClass, "-filter-checkbox"),
180
180
  id: opt,
181
181
  labelText: opt,
182
182
  onChange: function onChange(checked) {
@@ -30,7 +30,7 @@ var Datagrid = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
30
30
  DatagridPagination = datagridState.DatagridPagination,
31
31
  isFetching = datagridState.isFetching,
32
32
  tableId = datagridState.tableId,
33
- leftPanel = datagridState.leftPanel,
33
+ filterProps = datagridState.filterProps,
34
34
  className = datagridState.className,
35
35
  filters = datagridState.state.filters;
36
36
  var rows = DatagridPagination && datagridState.page || datagridState.rows;
@@ -40,11 +40,11 @@ var Datagrid = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
40
40
  id: tableId,
41
41
  ref: ref,
42
42
  className: (0, _classnames.default)(className, blockClass, withVirtualScroll ? "".concat(blockClass, "__datagridWrap") : "".concat(blockClass, "__datagridWrap-simple"), !isFetching && rows.length === 0 ? "".concat(blockClass, "__empty-state") : '')
43
- }, (0, _devtools.getDevtoolsProps)(componentName)), leftPanel && /*#__PURE__*/_react.default.createElement("div", {
43
+ }, (0, _devtools.getDevtoolsProps)(componentName)), (filterProps === null || filterProps === void 0 ? void 0 : filterProps.variation) === 'panel' ? /*#__PURE__*/_react.default.createElement("div", {
44
44
  className: "".concat(blockClass, "__datagridWithPanel ").concat(blockClass, "__displayFlex ").concat(blockClass, "__leftPanel-position")
45
45
  }, /*#__PURE__*/_react.default.createElement(_DatagridContent.DatagridContent, {
46
46
  datagridState: datagridState
47
- })), leftPanel === undefined && /*#__PURE__*/_react.default.createElement(_DatagridContent.DatagridContent, {
47
+ })) : /*#__PURE__*/_react.default.createElement(_DatagridContent.DatagridContent, {
48
48
  datagridState: datagridState
49
49
  }))));
50
50
  });
@@ -22,6 +22,10 @@ var _InlineEditContext = require("./addons/InlineEdit/InlineEditContext");
22
22
  var _handleGridFocus = require("./addons/InlineEdit/handleGridFocus");
23
23
  var _hooks = require("../../../global/js/hooks");
24
24
  var _hooks2 = require("../../DataSpreadsheet/hooks");
25
+ var _FilterPanel = _interopRequireDefault(require("./addons/Filtering/FilterPanel"));
26
+ var _FilterSummary = require("../../FilterSummary");
27
+ var _Filtering = require("./addons/Filtering");
28
+ var _constants = require("./addons/Filtering/constants");
25
29
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
26
30
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
31
  /**
@@ -38,16 +42,23 @@ var DatagridContent = function DatagridContent(_ref) {
38
42
  var _cx4;
39
43
  var datagridState = _ref.datagridState;
40
44
  var _useContext = (0, _react.useContext)(_InlineEditContext.InlineEditContext),
41
- state = _useContext.state,
45
+ inlineEditState = _useContext.state,
42
46
  dispatch = _useContext.dispatch;
43
- var activeCellId = state.activeCellId;
47
+ var _useContext2 = (0, _react.useContext)(_Filtering.FilterContext),
48
+ filterTags = _useContext2.filterTags,
49
+ EventEmitter = _useContext2.EventEmitter,
50
+ leftPanelOpen = _useContext2.leftPanelOpen;
51
+ var activeCellId = inlineEditState.activeCellId,
52
+ gridActive = inlineEditState.gridActive,
53
+ editId = inlineEditState.editId;
44
54
  var _datagridState$getTab = datagridState.getTableProps,
45
55
  getTableProps = _datagridState$getTab === void 0 ? function () {} : _datagridState$getTab,
56
+ getFilterFlyoutProps = datagridState.getFilterFlyoutProps,
46
57
  withVirtualScroll = datagridState.withVirtualScroll,
47
58
  DatagridPagination = datagridState.DatagridPagination,
48
59
  isFetching = datagridState.isFetching,
49
60
  CustomizeColumnsTearsheet = datagridState.CustomizeColumnsTearsheet,
50
- leftPanel = datagridState.leftPanel,
61
+ filterProps = datagridState.filterProps,
51
62
  fullHeightDatagrid = datagridState.fullHeightDatagrid,
52
63
  _datagridState$vertic = datagridState.verticalAlign,
53
64
  verticalAlign = _datagridState$vertic === void 0 ? 'center' : _datagridState$vertic,
@@ -59,10 +70,9 @@ var DatagridContent = function DatagridContent(_ref) {
59
70
  tableId = datagridState.tableId,
60
71
  DatagridActions = datagridState.DatagridActions,
61
72
  totalColumnsWidth = datagridState.totalColumnsWidth,
62
- gridRef = datagridState.gridRef;
73
+ gridRef = datagridState.gridRef,
74
+ state = datagridState.state;
63
75
  var rows = DatagridPagination && datagridState.page || datagridState.rows;
64
- var gridActive = state.gridActive,
65
- editId = state.editId;
66
76
  var gridAreaRef = (0, _react.useRef)();
67
77
  var multiKeyTrackingRef = (0, _react.useRef)();
68
78
  (0, _hooks.useClickOutside)(gridAreaRef, function (target) {
@@ -90,14 +100,14 @@ var DatagridContent = function DatagridContent(_ref) {
90
100
  return (0, _handleGridKeyPress.handleGridKeyPress)({
91
101
  event: event,
92
102
  dispatch: dispatch,
93
- state: state,
103
+ inlineEditState: inlineEditState,
94
104
  instance: datagridState,
95
105
  keysPressedList: keysPressedList,
96
106
  usingMac: usingMac
97
107
  });
98
108
  } : null,
99
109
  onFocus: withInlineEdit ? function () {
100
- return (0, _handleGridFocus.handleGridFocus)(state, dispatch);
110
+ return (0, _handleGridFocus.handleGridFocus)(inlineEditState, dispatch);
101
111
  } : null
102
112
  }), !withVirtualScroll ? /*#__PURE__*/_react.default.createElement(_DatagridHead.default, datagridState) : null, /*#__PURE__*/_react.default.createElement(_DatagridBody.default, (0, _extends2.default)({}, datagridState, {
103
113
  rows: rows
@@ -123,21 +133,35 @@ var DatagridContent = function DatagridContent(_ref) {
123
133
  gridElement.style.setProperty("--".concat(blockClass, "--grid-header-height"), (0, _layout.px)((tableHeader === null || tableHeader === void 0 ? void 0 : tableHeader.clientHeight) || 0));
124
134
  }
125
135
  }, [withInlineEdit, tableId, totalColumnsWidth, datagridState, gridActive]);
136
+ var renderFilterSummary = function renderFilterSummary() {
137
+ return state.filters.length > 0 && /*#__PURE__*/_react.default.createElement(_FilterSummary.FilterSummary, {
138
+ className: "".concat(blockClass, "__filter-summary"),
139
+ filters: filterTags,
140
+ clearFilters: function clearFilters() {
141
+ return EventEmitter.dispatch(_constants.CLEAR_FILTERS);
142
+ }
143
+ });
144
+ };
126
145
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(TableContainer, {
127
146
  className: (0, _classnames.default)("".concat(blockClass, "__grid-container"), withVirtualScroll || fullHeightDatagrid ? "".concat(blockClass, "__full-height") : '', DatagridPagination ? "".concat(blockClass, "__with-pagination") : '', useDenseHeader ? "".concat(blockClass, "__dense-header") : '', (_cx4 = {}, (0, _defineProperty2.default)(_cx4, "".concat(blockClass, "__grid-container-grid-active"), gridActive), (0, _defineProperty2.default)(_cx4, "".concat(blockClass, "__grid-container-inline-edit"), withInlineEdit), (0, _defineProperty2.default)(_cx4, "".concat(blockClass, "__grid-container-grid-active--without-toolbar"), withInlineEdit && !DatagridActions), _cx4)),
128
147
  title: gridTitle,
129
148
  description: gridDescription
130
149
  }, /*#__PURE__*/_react.default.createElement(_DatagridToolbar.default, datagridState), /*#__PURE__*/_react.default.createElement("div", {
131
- className: "".concat(blockClass, "__table-container"),
150
+ className: (0, _classnames.default)("".concat(blockClass, "__table-container"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__table-container--filter-open"), leftPanelOpen)),
132
151
  ref: gridAreaRef
133
- }, leftPanel && leftPanel.isOpen && /*#__PURE__*/_react.default.createElement("div", {
134
- className: "".concat(blockClass, "__datagridLeftPanel")
135
- }, leftPanel.panelContent), withInlineEdit ? /*#__PURE__*/_react.default.createElement("div", {
152
+ }, (filterProps === null || filterProps === void 0 ? void 0 : filterProps.variation) === 'panel' && /*#__PURE__*/_react.default.createElement(_FilterPanel.default, (0, _extends2.default)({
153
+ updateMethod: "batch"
154
+ }, getFilterFlyoutProps(), {
155
+ title: filterProps.panelTitle,
156
+ filterSections: filterProps.sections
157
+ })), /*#__PURE__*/_react.default.createElement("div", {
158
+ className: "".concat(blockClass, "__table-container-inner")
159
+ }, renderFilterSummary(), withInlineEdit ? /*#__PURE__*/_react.default.createElement("div", {
136
160
  ref: multiKeyTrackingRef
137
161
  }, renderTable()) : withVirtualScroll ? /*#__PURE__*/_react.default.createElement("div", {
138
162
  className: "".concat(blockClass, "__virtualScrollContainer"),
139
163
  ref: gridRef
140
- }, renderTable()) : renderTable())), (rows === null || rows === void 0 ? void 0 : rows.length) > 0 && !isFetching && DatagridPagination && /*#__PURE__*/_react.default.createElement(DatagridPagination, datagridState), CustomizeColumnsTearsheet && /*#__PURE__*/_react.default.createElement(CustomizeColumnsTearsheet, {
164
+ }, renderTable()) : renderTable()))), (rows === null || rows === void 0 ? void 0 : rows.length) > 0 && !isFetching && DatagridPagination && /*#__PURE__*/_react.default.createElement(DatagridPagination, datagridState), CustomizeColumnsTearsheet && /*#__PURE__*/_react.default.createElement(CustomizeColumnsTearsheet, {
141
165
  instance: datagridState
142
166
  }));
143
167
  };
@@ -145,13 +169,14 @@ exports.DatagridContent = DatagridContent;
145
169
  DatagridContent.propTypes = {
146
170
  datagridState: _propTypes.default.shape({
147
171
  getTableProps: _propTypes.default.func,
172
+ getFilterFlyoutProps: _propTypes.default.func,
148
173
  withVirtualScroll: _propTypes.default.bool,
149
174
  DatagridActions: _propTypes.default.oneOfType([_propTypes.default.element, _propTypes.default.func]),
150
175
  DatagridPagination: _propTypes.default.oneOfType([_propTypes.default.element, _propTypes.default.func]),
151
176
  CustomizeColumnsTearsheet: _propTypes.default.oneOfType([_propTypes.default.element, _propTypes.default.func]),
152
177
  isFetching: _propTypes.default.bool,
153
- leftPanel: _propTypes.default.object,
154
178
  fullHeightDatagrid: _propTypes.default.bool,
179
+ filterProps: _propTypes.default.object,
155
180
  variableRowHeight: _propTypes.default.bool,
156
181
  useDenseHeader: _propTypes.default.bool,
157
182
  withInlineEdit: _propTypes.default.bool,
@@ -162,6 +187,9 @@ DatagridContent.propTypes = {
162
187
  rows: _propTypes.default.arrayOf(_propTypes.default.object),
163
188
  tableId: _propTypes.default.string,
164
189
  totalColumnsWidth: _propTypes.default.number,
165
- gridRef: _propTypes.default.object
190
+ gridRef: _propTypes.default.object,
191
+ setAllFilters: _propTypes.default.func,
192
+ getFilterProps: _propTypes.default.func,
193
+ state: _propTypes.default.object
166
194
  })
167
195
  };
@@ -15,9 +15,6 @@ var _reactResizeDetector = require("react-resize-detector");
15
15
  var _ButtonMenu = require("../../ButtonMenu");
16
16
  var _settings = require("../../../settings");
17
17
  var _classnames = _interopRequireDefault(require("classnames"));
18
- var _FilterSummary = require("../../FilterSummary");
19
- var _FilterProvider = require("./addons/Filtering/FilterProvider");
20
- var _constants = require("./addons/Filtering/constants");
21
18
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
22
19
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
20
  /**
@@ -143,26 +140,14 @@ var DatagridToolbar = function DatagridToolbar(datagridState) {
143
140
  var DatagridActions = datagridState.DatagridActions,
144
141
  DatagridBatchActions = datagridState.DatagridBatchActions,
145
142
  batchActions = datagridState.batchActions,
146
- state = datagridState.state,
147
143
  rowSize = datagridState.rowSize;
148
- var _useContext = (0, _react.useContext)(_FilterProvider.FilterContext),
149
- filterTags = _useContext.filterTags,
150
- EventEmitter = _useContext.EventEmitter;
151
- var renderFilterSummary = function renderFilterSummary() {
152
- return state.filters.length > 0 && /*#__PURE__*/_react.default.createElement(_FilterSummary.FilterSummary, {
153
- filters: filterTags,
154
- clearFilters: function clearFilters() {
155
- return EventEmitter.dispatch(_constants.CLEAR_FILTERS);
156
- }
157
- });
158
- };
159
144
  var getRowHeight = rowSize ? rowSize : 'lg';
160
145
  return batchActions && DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
161
146
  ref: ref,
162
147
  className: (0, _classnames.default)("".concat(blockClass, "__table-toolbar"), "".concat(blockClass, "__table-toolbar--").concat(getRowHeight))
163
- }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref)), renderFilterSummary()) : DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
148
+ }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref))) : DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
164
149
  className: "".concat(blockClass, "__table-toolbar")
165
- }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActions && DatagridBatchActions(datagridState)), renderFilterSummary()) : null;
150
+ }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActions && DatagridBatchActions(datagridState))) : null;
166
151
  };
167
152
  var _default = DatagridToolbar;
168
153
  exports.default = _default;
@@ -42,6 +42,7 @@ var DraggableElement = function DraggableElement(_ref) {
42
42
  onGrab = _ref.onGrab,
43
43
  onArrowKeyDown = _ref.onArrowKeyDown,
44
44
  isFocused = _ref.isFocused,
45
+ isSticky = _ref.isSticky,
45
46
  moveElement = _ref.moveElement,
46
47
  selected = _ref.selected,
47
48
  _ref$positionLabel = _ref.positionLabel,
@@ -121,9 +122,9 @@ var DraggableElement = function DraggableElement(_ref) {
121
122
  className: (0, _classnames.default)({
122
123
  disabled: disabled
123
124
  }, "".concat(blockClass, "__draggable-handleStyle"))
124
- }, /*#__PURE__*/React.createElement(_iconsReact.Draggable16, null)), children);
125
+ }, isSticky ? /*#__PURE__*/React.createElement(_iconsReact.Locked16, null) : /*#__PURE__*/React.createElement(_iconsReact.Draggable16, null)), children);
125
126
  return /*#__PURE__*/React.createElement("li", {
126
- className: (0, _classnames.default)((_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__draggable-handleHolder-isOver"), isOver && !disabled), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__draggable-handleHolder-grabbed"), isGrabbed), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__draggable-handleHolder-selected"), selected), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__draggable-handleHolder"), !selected), _cx)),
127
+ className: (0, _classnames.default)((_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__draggable-handleHolder-isOver"), isOver && !disabled), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__draggable-handleHolder-grabbed"), isGrabbed), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__draggable-handleHolder-selected"), selected), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__draggable-handleHolder--sticky"), isSticky), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__draggable-handleHolder"), !selected), _cx)),
127
128
  ref: ref,
128
129
  "aria-selected": isFocused,
129
130
  role: "option",
@@ -154,7 +155,7 @@ var DraggableElement = function DraggableElement(_ref) {
154
155
  className: "".concat(blockClass, "__shared-ui--assistive-text")
155
156
  }, ariaLabel), isDragging && !isOver ? /*#__PURE__*/React.createElement("div", {
156
157
  ref: preview,
157
- className: "${blockClass}__draggable-handleHolder-droppable"
158
+ className: "".concat(blockClass, "__draggable-handleHolder-droppable ").concat(blockClass, "__draggable-handleHolder-droppable--origin")
158
159
  }, content) : /*#__PURE__*/React.createElement("div", {
159
160
  ref: drag,
160
161
  "aria-hidden": isFocused && isFocusedOnItem // if focus on li, hide the children from aria
@@ -171,6 +172,7 @@ DraggableElement.propTypes = {
171
172
  id: _propTypes.default.string.isRequired,
172
173
  index: _propTypes.default.number.isRequired,
173
174
  isFocused: _propTypes.default.bool.isRequired,
175
+ isSticky: _propTypes.default.bool,
174
176
  listData: _propTypes.default.array.isRequired,
175
177
  moveElement: _propTypes.default.func.isRequired,
176
178
  onArrowKeyDown: _propTypes.default.func.isRequired,
@@ -101,9 +101,11 @@ var Columns = function Columns(_ref) {
101
101
  var res = filterString.length ? colDef.Header.props.title.toLowerCase().split(searchString) : null;
102
102
  var firstWord = res !== null ? res[0] === '' ? res[1].charAt(0).toUpperCase() + res[1].substring(1) : res[0].charAt(0).toUpperCase() + res[0].substring(1) : null;
103
103
  var highlightedText = res !== null ? res[0] === '' ? "<strong>".concat(firstWord, "</strong>") + res[2] : firstWord + "<strong>".concat(res[1], "</strong>") + res[2] : colDef.Header.props.title;
104
+ var isFrozenColumn = !!colDef.sticky;
104
105
  var listContents = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, {
105
106
  wrapperClassName: "".concat(blockClass, "__customize-columns-checkbox-wrapper"),
106
107
  checked: (0, _common.isColumnVisible)(colDef),
108
+ disabled: isFrozenColumn,
107
109
  onChange: onSelectColumn.bind(null, colDef),
108
110
  id: "".concat(blockClass, "__customization-column-").concat(colDef.id),
109
111
  labelText: colDef.Header.props.title,
@@ -122,17 +124,18 @@ var Columns = function Columns(_ref) {
122
124
  setListData: setColumnsObject,
123
125
  id: "dnd-datagrid-columns-".concat(colDef.id),
124
126
  type: "column-customization",
125
- disabled: filterString.length > 0,
127
+ disabled: filterString.length > 0 || isFrozenColumn,
126
128
  ariaLabel: colDef.Header.props.title,
127
129
  onGrab: setAriaRegionText,
128
130
  isFocused: focusIndex === i,
129
131
  moveElement: moveElement,
130
132
  onArrowKeyDown: function onArrowKeyDown(e, isGrabbed, currentIndex) {
131
133
  if (isGrabbed) {
134
+ var _columns$nextIndex;
132
135
  var nextIndex = getNextIndex(columns, currentIndex, e.key);
133
136
  e.preventDefault();
134
137
  e.stopPropagation();
135
- if (nextIndex >= 0) {
138
+ if (nextIndex >= 0 && !((_columns$nextIndex = columns[nextIndex]) !== null && _columns$nextIndex !== void 0 && _columns$nextIndex.sticky)) {
136
139
  setFocusIndex(nextIndex);
137
140
  moveElement(currentIndex, nextIndex);
138
141
  e.target.scrollIntoView({
@@ -141,6 +144,7 @@ var Columns = function Columns(_ref) {
141
144
  }
142
145
  }
143
146
  },
147
+ isSticky: isFrozenColumn,
144
148
  selected: (0, _common.isColumnVisible)(colDef)
145
149
  }, listContents);
146
150
  }))));
@@ -59,7 +59,7 @@ var CustomizeColumnsTearsheet = function CustomizeColumnsTearsheet(_ref) {
59
59
  var _useState7 = (0, _react.useState)(columnDefinitions
60
60
  // hide the columns without Header, e.g the sticky actions, spacer
61
61
  .filter(function (colDef) {
62
- return !!colDef.Header.props;
62
+ return !!colDef.Header.props && !colDef.isAction;
63
63
  })
64
64
  // only sort the hidden column to the end when modal reopen
65
65
  .sort(function (defA, defB) {