@carbon/ibm-products 2.0.0-rc.10 → 2.0.0-rc.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. package/css/index-full-carbon.css +102 -1
  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 +102 -1
  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 +93 -1
  10. package/css/index.css.map +1 -1
  11. package/css/index.min.css +1 -1
  12. package/css/index.min.css.map +1 -1
  13. package/es/components/DataSpreadsheet/DataSpreadsheet.js +1 -4
  14. package/es/components/DataSpreadsheet/utils/handleCellDeletion.js +6 -4
  15. package/es/components/Datagrid/Datagrid/Datagrid.js +7 -3
  16. package/es/components/Datagrid/Datagrid/DatagridContent.js +8 -3
  17. package/es/components/Datagrid/Datagrid/DatagridEmptyBody.js +17 -4
  18. package/es/components/Datagrid/Datagrid/DatagridRow.js +2 -10
  19. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +22 -4
  20. package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +29 -8
  21. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +424 -0
  22. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +83 -0
  23. package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +20 -0
  24. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +22 -0
  25. package/es/components/Datagrid/Datagrid/addons/Filtering/index.js +7 -0
  26. package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +38 -0
  27. package/es/components/Datagrid/index.js +2 -1
  28. package/es/components/Datagrid/useFiltering.js +90 -0
  29. package/es/components/Datagrid/useParentDimensions.js +3 -1
  30. package/es/components/Datagrid/utils/DatagridActions.js +13 -26
  31. package/es/components/Datagrid/utils/getArgTypes.js +5 -0
  32. package/es/components/Datagrid/utils/getInlineEditColumns.js +6 -1
  33. package/es/components/Datagrid/utils/makeData.js +24 -16
  34. package/es/components/FilterSummary/FilterSummary.js +54 -0
  35. package/es/components/FilterSummary/index.js +7 -0
  36. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +1 -4
  37. package/lib/components/DataSpreadsheet/utils/handleCellDeletion.js +6 -4
  38. package/lib/components/Datagrid/Datagrid/Datagrid.js +8 -3
  39. package/lib/components/Datagrid/Datagrid/DatagridContent.js +8 -3
  40. package/lib/components/Datagrid/Datagrid/DatagridEmptyBody.js +17 -4
  41. package/lib/components/Datagrid/Datagrid/DatagridRow.js +2 -19
  42. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +24 -3
  43. package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +31 -8
  44. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +443 -0
  45. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +104 -0
  46. package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +35 -0
  47. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +33 -0
  48. package/lib/components/Datagrid/Datagrid/addons/Filtering/index.js +15 -0
  49. package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +47 -0
  50. package/lib/components/Datagrid/index.js +9 -1
  51. package/lib/components/Datagrid/useFiltering.js +94 -0
  52. package/lib/components/Datagrid/useParentDimensions.js +3 -1
  53. package/lib/components/Datagrid/utils/DatagridActions.js +13 -25
  54. package/lib/components/Datagrid/utils/getArgTypes.js +5 -0
  55. package/lib/components/Datagrid/utils/getInlineEditColumns.js +6 -1
  56. package/lib/components/Datagrid/utils/makeData.js +26 -18
  57. package/lib/components/FilterSummary/FilterSummary.js +72 -0
  58. package/lib/components/FilterSummary/index.js +15 -0
  59. package/package.json +2 -2
  60. package/scss/components/Datagrid/_datagrid.scss +0 -1
  61. package/scss/components/Datagrid/_storybook-styles.scss +12 -0
  62. package/scss/components/Datagrid/styles/_datagrid.scss +18 -0
  63. package/scss/components/Datagrid/styles/_index.scss +1 -0
  64. package/scss/components/Datagrid/styles/addons/_FilterFlyout.scss +87 -0
  65. package/scss/components/FilterSummary/_filter-summary.scss +20 -0
  66. package/scss/components/FilterSummary/_index.scss +10 -0
  67. package/scss/components/FilterSummary/_storybook-styles.scss +14 -0
  68. package/scss/components/_index.scss +1 -0
@@ -0,0 +1,90 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+
4
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
+
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
+
8
+ /*
9
+ * Licensed Materials - Property of IBM
10
+ * 5724-Q36
11
+ * (c) Copyright IBM Corp. 2022
12
+ * US Government Users Restricted Rights - Use, duplication or disclosure
13
+ * restricted by GSA ADP Schedule Contract with IBM Corp.
14
+ */
15
+ import { useMemo } from 'react';
16
+
17
+ var useFiltering = function useFiltering(hooks) {
18
+ var filterTypes = useMemo(function () {
19
+ return {
20
+ date: function date(rows, id, _ref) {
21
+ var _ref2 = _slicedToArray(_ref, 2),
22
+ startDate = _ref2[0],
23
+ endDate = _ref2[1];
24
+
25
+ return rows.filter(function (row) {
26
+ var rowValue = row.values[id];
27
+
28
+ if (rowValue.getTime() <= endDate.getTime() && rowValue.getTime() >= startDate.getTime()) {
29
+ // In date range
30
+ return true;
31
+ } else {
32
+ // Not in date range
33
+ return false;
34
+ }
35
+ });
36
+ },
37
+ number: function number(rows, id, value) {
38
+ if (value === '') {
39
+ return rows;
40
+ }
41
+
42
+ var parsedValue = parseInt(value);
43
+ return rows.filter(function (row) {
44
+ var rowValue = row.values[id];
45
+ return rowValue === parsedValue;
46
+ });
47
+ },
48
+ checkbox: function checkbox(rows, id, value) {
49
+ // gets all the items that are selected and returns their value
50
+ var selectedItems = value.filter(function (item) {
51
+ return item.selected;
52
+ }).map(function (item) {
53
+ return item.value;
54
+ }); // if the user removed all checkboxes then display all rows
55
+
56
+ if (selectedItems.length === 0) {
57
+ return rows;
58
+ }
59
+
60
+ return rows.filter(function (row) {
61
+ var rowValue = row.values[id];
62
+ return selectedItems.includes(rowValue);
63
+ });
64
+ }
65
+ };
66
+ }, []);
67
+ hooks.useInstance.push(function (instance) {
68
+ var filterProps = instance.filterProps,
69
+ setAllFilters = instance.setAllFilters,
70
+ headers = instance.headers;
71
+ var defaultProps = {
72
+ variation: 'flyout'
73
+ };
74
+
75
+ var getFilterFlyoutProps = function getFilterFlyoutProps() {
76
+ return _objectSpread(_objectSpread(_objectSpread({}, defaultProps), filterProps), {}, {
77
+ setAllFilters: setAllFilters,
78
+ headers: headers
79
+ });
80
+ };
81
+
82
+ Object.assign(instance, {
83
+ filterProps: _objectSpread(_objectSpread({}, defaultProps), instance.filterProps),
84
+ filterTypes: filterTypes,
85
+ getFilterFlyoutProps: getFilterFlyoutProps
86
+ });
87
+ });
88
+ };
89
+
90
+ export default useFiltering;
@@ -14,6 +14,7 @@ var useParentDimensions = function useParentDimensions(hooks) {
14
14
  var headRef = useRef();
15
15
  var innerListRef = useRef();
16
16
  var listRef = useRef();
17
+ var gridRef = useRef();
17
18
 
18
19
  var _useState = useState(),
19
20
  _useState2 = _slicedToArray(_useState, 2),
@@ -55,7 +56,8 @@ var useParentDimensions = function useParentDimensions(hooks) {
55
56
  headRef: headRef,
56
57
  innerListRef: innerListRef,
57
58
  handleResize: handleResize,
58
- listRef: listRef
59
+ listRef: listRef,
60
+ gridRef: gridRef
59
61
  });
60
62
  };
61
63
 
@@ -8,10 +8,11 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
8
8
  */
9
9
  import React, { useLayoutEffect, useState } from 'react';
10
10
  import { DataTable, Button, OverflowMenu, OverflowMenuItem, ComposedModal, ModalBody, ModalHeader, ModalFooter, Dropdown } from '@carbon/react';
11
- import { Download, Filter, Add, Restart, ChevronDown } from '@carbon/react/icons';
11
+ import { Download, Add, Restart, ChevronDown } from '@carbon/react/icons';
12
12
  import { action } from '@storybook/addon-actions';
13
13
  import { pkg } from '../../../settings';
14
14
  import { ButtonMenu, ButtonMenuItem } from '../../ButtonMenu';
15
+ import { FilterFlyout } from '../Datagrid/addons/Filtering';
15
16
  var blockClass = "".concat(pkg.prefix, "--datagrid");
16
17
  export var DatagridActions = function DatagridActions(datagridState) {
17
18
  var selectedFlatRows = datagridState.selectedFlatRows,
@@ -19,7 +20,9 @@ export var DatagridActions = function DatagridActions(datagridState) {
19
20
  CustomizeColumnsButton = datagridState.CustomizeColumnsButton,
20
21
  RowSizeDropdown = datagridState.RowSizeDropdown,
21
22
  rowSizeDropdownProps = datagridState.rowSizeDropdownProps,
22
- useDenseHeader = datagridState.useDenseHeader;
23
+ useDenseHeader = datagridState.useDenseHeader,
24
+ filterProps = datagridState.filterProps,
25
+ getFilterFlyoutProps = datagridState.getFilterFlyoutProps;
23
26
 
24
27
  var downloadCsv = function downloadCsv() {
25
28
  alert('Downloading...');
@@ -32,10 +35,6 @@ export var DatagridActions = function DatagridActions(datagridState) {
32
35
  alert('refreshing...');
33
36
  };
34
37
 
35
- var leftPanelClick = function leftPanelClick() {
36
- alert('open/close left panel...');
37
- };
38
-
39
38
  var searchForAColumn = 'Search';
40
39
  var isNothingSelected = selectedFlatRows.length === 0;
41
40
  var style = {
@@ -44,6 +43,10 @@ export var DatagridActions = function DatagridActions(datagridState) {
44
43
  }
45
44
  };
46
45
 
46
+ var renderFilterFlyout = function renderFilterFlyout() {
47
+ return (filterProps === null || filterProps === void 0 ? void 0 : filterProps.variation) === 'flyout' && /*#__PURE__*/React.createElement(FilterFlyout, getFilterFlyoutProps());
48
+ };
49
+
47
50
  var _useState = useState(false),
48
51
  _useState2 = _slicedToArray(_useState, 2),
49
52
  modalOpen = _useState2[0],
@@ -77,16 +80,7 @@ export var DatagridActions = function DatagridActions(datagridState) {
77
80
  renderIcon: Download,
78
81
  iconDescription: 'Download CSV',
79
82
  onClick: downloadCsv
80
- })), /*#__PURE__*/React.createElement("div", {
81
- style: style
82
- }, /*#__PURE__*/React.createElement(Button, {
83
- kind: "ghost",
84
- hasIconOnly: true,
85
- tooltipPosition: "bottom",
86
- renderIcon: Filter,
87
- iconDescription: 'Left panel',
88
- onClick: leftPanelClick
89
- })), /*#__PURE__*/React.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/React.createElement("div", {
83
+ })), renderFilterFlyout(), /*#__PURE__*/React.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/React.createElement("div", {
90
84
  style: style,
91
85
  className: "".concat(blockClass, "__toolbar-divider")
92
86
  }, /*#__PURE__*/React.createElement(Button, {
@@ -122,14 +116,7 @@ export var DatagridActions = function DatagridActions(datagridState) {
122
116
  itemText: "Create",
123
117
  hasDivider: true,
124
118
  requireTitle: true
125
- }))) : !mobileToolbar ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
126
- kind: "ghost",
127
- hasIconOnly: true,
128
- tooltipPosition: "bottom",
129
- renderIcon: Filter,
130
- iconDescription: 'Left panel',
131
- onClick: leftPanelClick
132
- }), /*#__PURE__*/React.createElement(TableToolbarContent, null, /*#__PURE__*/React.createElement(TableToolbarSearch, {
119
+ }))) : !mobileToolbar ? /*#__PURE__*/React.createElement(TableToolbarContent, null, /*#__PURE__*/React.createElement(TableToolbarSearch, {
133
120
  size: "xl",
134
121
  id: "columnSearch",
135
122
  persistent: true,
@@ -137,7 +124,7 @@ export var DatagridActions = function DatagridActions(datagridState) {
137
124
  onChange: function onChange(e) {
138
125
  return setGlobalFilter(e.target.value);
139
126
  }
140
- }), /*#__PURE__*/React.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/React.createElement("div", {
127
+ }), renderFilterFlyout(), /*#__PURE__*/React.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/React.createElement("div", {
141
128
  style: style
142
129
  }, /*#__PURE__*/React.createElement(Button, {
143
130
  kind: "ghost",
@@ -169,7 +156,7 @@ export var DatagridActions = function DatagridActions(datagridState) {
169
156
  }), /*#__PURE__*/React.createElement(ButtonMenuItem, {
170
157
  itemText: "Option 3",
171
158
  onClick: action("Click on ButtonMenu Option 3")
172
- })))) : /*#__PURE__*/React.createElement(TableToolbarContent, null, /*#__PURE__*/React.createElement(TableToolbarSearch, {
159
+ }))) : /*#__PURE__*/React.createElement(TableToolbarContent, null, /*#__PURE__*/React.createElement(TableToolbarSearch, {
173
160
  size: "xl",
174
161
  id: "columnSearch",
175
162
  persistent: true,
@@ -85,5 +85,10 @@ export var ARG_TYPES = {
85
85
  customizeColumnsProps: {
86
86
  control: 'object',
87
87
  description: 'This is an object containing all of the props used with the column customization extension. _This value is set/passed inside of the `datagridState` object._'
88
+ },
89
+ filterProps: {
90
+ name: 'Filter props',
91
+ control: 'object',
92
+ description: 'This is an object for all the props passed into the filter flyout and filter panel'
88
93
  }
89
94
  };
@@ -89,8 +89,13 @@ export var getInlineEditColumns = function getInlineEditColumns() {
89
89
  accessor: 'visits',
90
90
  width: 120,
91
91
  inlineEdit: {
92
+ validator: function validator(n) {
93
+ return n && n < 10;
94
+ },
92
95
  type: 'number',
93
- inputProps: {} // These props are passed to the Carbon component used for inline editing
96
+ inputProps: {
97
+ invalidText: 'Invalid number, must be 10 or greater'
98
+ } // These props are passed to the Carbon component used for inline editing
94
99
 
95
100
  }
96
101
  }, {
@@ -12,7 +12,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
12
12
  */
13
13
  import React from 'react';
14
14
  import namor from 'namor';
15
- import { StatusIcon } from '../../StatusIcon';
16
15
  import { inlineEditSelectItems } from './getInlineEditColumns';
17
16
 
18
17
  var getRandomInteger = function getRandomInteger(min, max, decimalPlaces) {
@@ -54,27 +53,30 @@ export var range = function range(len) {
54
53
 
55
54
  return arr;
56
55
  };
56
+ /** This function is only to create a random data point when the person joined */
57
57
 
58
- var renderStatusIcon = function renderStatusIcon(statusChance) {
59
- var iconProps = {
60
- size: 'sm',
61
- theme: 'light',
62
- kind: statusChance > 0.66 ? 'critical' : statusChance > 0.33 ? 'minor-warning' : 'normal',
63
- iconDescription: statusChance > 0.66 ? 'Critical' : statusChance > 0.33 ? 'Minor warning' : 'Normal'
64
- };
65
- return /*#__PURE__*/React.createElement(StatusIcon, iconProps);
58
+ var getRandomDateJoined = function getRandomDateJoined() {
59
+ return randomDate(new Date(2022, 0, 1), new Date());
60
+ };
61
+
62
+ var getPasswordStrength = function getPasswordStrength() {
63
+ var chance = Math.random();
64
+ return chance > 0.66 ? 'critical' : chance > 0.33 ? 'minor-warning' : 'normal';
66
65
  };
67
66
 
68
- var renderDocLink = function renderDocLink(statusChance) {
67
+ var renderDocLink = function renderDocLink() {
68
+ var chance = Math.random();
69
69
  var docLinkObj = {
70
- href: statusChance > 0.66 ? 'http://carbondesignsystem.com/' : statusChance > 0.33 ? 'https://pages.github.ibm.com/cdai-design/pal/' : 'http://carbon-for-ibm-products.netlify.app/',
71
- text: statusChance > 0.66 ? 'Carbon Design System' : statusChance > 0.33 ? 'Carbon for IBM Products PAL' : 'Carbon for IBM Products storybook'
70
+ href: chance > 0.66 ? 'http://carbondesignsystem.com/' : chance > 0.33 ? 'https://pages.github.ibm.com/cdai-design/pal/' : 'http://carbon-for-ibm-products.netlify.app/',
71
+ text: chance > 0.66 ? 'Carbon Design System' : chance > 0.33 ? 'Carbon for IBM Products PAL' : 'Carbon for IBM Products storybook'
72
72
  };
73
73
  return docLinkObj;
74
74
  };
75
75
 
76
76
  var newPerson = function newPerson() {
77
77
  var statusChance = Math.random();
78
+ var roleChance = Math.random();
79
+ var activeChance = Math.random();
78
80
  var initialChartTypeIndex = getRandomInteger(0, 2);
79
81
  var activeSinceDate = new Date();
80
82
  var yesterdayDate = new Date();
@@ -93,6 +95,9 @@ var newPerson = function newPerson() {
93
95
  age: Math.floor(Math.random() * 30),
94
96
  visits: Math.floor(Math.random() * 100),
95
97
  progress: Math.floor(Math.random() * 100),
98
+ status: statusChance > 0.66 ? 'relationship' : statusChance > 0.33 ? 'complicated' : 'single',
99
+ role: roleChance > 0.66 ? 'developer' : roleChance > 0.33 ? 'designer' : 'researcher',
100
+ joined: getRandomDateJoined(),
96
101
  someone1: namor.generate({
97
102
  words: 1,
98
103
  numbers: 0
@@ -173,12 +178,11 @@ var newPerson = function newPerson() {
173
178
  words: 1,
174
179
  numbers: 0
175
180
  }),
176
- status: statusChance > 0.66 ? 'relationship' : statusChance > 0.33 ? 'complicated' : 'single',
177
181
  chartType: initialChartTypeIndex === 0 ? inlineEditSelectItems[0] : initialChartTypeIndex === 1 ? inlineEditSelectItems[1] : inlineEditSelectItems[2],
178
- activeSince: statusChance > 0.66 ? activeSinceDate : statusChance > 0.33 ? yesterdayDate : twoDaysAgoDate,
182
+ activeSince: activeChance > 0.66 ? activeSinceDate : activeChance > 0.33 ? yesterdayDate : twoDaysAgoDate,
179
183
  bonus: "$\r".concat(getRandomInteger(100, 500, 2)),
180
- status_icon: renderStatusIcon(statusChance),
181
- doc_link: renderDocLink(statusChance)
184
+ passwordStrength: getPasswordStrength(),
185
+ doc_link: renderDocLink()
182
186
  };
183
187
  };
184
188
 
@@ -197,4 +201,8 @@ export var newPersonWithTwoLines = function newPersonWithTwoLines() {
197
201
  }),
198
202
  age: Math.floor(Math.random() * 30)
199
203
  };
204
+ };
205
+
206
+ var randomDate = function randomDate(start, end) {
207
+ return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
200
208
  };
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022, 2022
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { Button } from '@carbon/react';
8
+ import React from 'react';
9
+ import PropTypes from 'prop-types';
10
+ import cx from 'classnames';
11
+ import { TagSet } from '../TagSet';
12
+ import { pkg } from '../../settings';
13
+ var blockClass = "".concat(pkg.prefix, "--filter-summary");
14
+ var FilterSummary = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
15
+ var _ref$className = _ref.className,
16
+ className = _ref$className === void 0 ? '' : _ref$className,
17
+ _ref$clearFiltersText = _ref.clearFiltersText,
18
+ clearFiltersText = _ref$clearFiltersText === void 0 ? 'Clear filters' : _ref$clearFiltersText,
19
+ _ref$clearFilters = _ref.clearFilters,
20
+ clearFilters = _ref$clearFilters === void 0 ? function () {} : _ref$clearFilters,
21
+ _ref$filters = _ref.filters,
22
+ filters = _ref$filters === void 0 ? [] : _ref$filters;
23
+ var tagFilters = filters.map(function (_ref2) {
24
+ var key = _ref2.key,
25
+ value = _ref2.value;
26
+ return {
27
+ type: 'gray',
28
+ label: "".concat(key, ": ").concat(value)
29
+ };
30
+ });
31
+ return /*#__PURE__*/React.createElement("div", {
32
+ ref: ref,
33
+ className: cx([blockClass, className])
34
+ }, /*#__PURE__*/React.createElement(TagSet, {
35
+ allTagsModalSearchLabel: "Search all tags",
36
+ allTagsModalSearchPlaceholderText: "Search all tags",
37
+ allTagsModalTitle: "All tags",
38
+ showAllTagsLabel: "View all tags",
39
+ tags: tagFilters
40
+ }), /*#__PURE__*/React.createElement(Button, {
41
+ kind: "ghost",
42
+ size: "sm",
43
+ onClick: clearFilters
44
+ }, clearFiltersText));
45
+ });
46
+ var componentName = 'FilterSummary';
47
+ FilterSummary.displayName = componentName;
48
+ FilterSummary.propTypes = {
49
+ className: PropTypes.string,
50
+ clearFilters: PropTypes.func.isRequired,
51
+ clearFiltersText: PropTypes.string,
52
+ filters: PropTypes.arrayOf(PropTypes.object).isRequired
53
+ };
54
+ export default FilterSummary;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022, 2022
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ export { default as FilterSummary } from './FilterSummary';
@@ -236,10 +236,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
236
236
 
237
237
  var removeActiveCell = (0, _react.useCallback)(function () {
238
238
  var activeCellHighlight = spreadsheetRef.current.querySelector(".".concat(blockClass, "__active-cell--highlight"));
239
-
240
- if (activeCellHighlight) {
241
- activeCellHighlight.style.display = 'none';
242
- }
239
+ activeCellHighlight.style.display = 'none';
243
240
  }, [spreadsheetRef]);
244
241
  var removeCellEditor = (0, _react.useCallback)(function () {
245
242
  setCellEditorValue('');
@@ -16,6 +16,8 @@ var _rangeWithCallback = require("../../../global/js/utils/rangeWithCallback");
16
16
  * LICENSE file in the root directory of this source tree.
17
17
  */
18
18
  var handleCellDeletion = function handleCellDeletion(_ref) {
19
+ var _selectionAreaToEmpty, _selectionAreaToEmpty2, _selectionAreaToEmpty3, _selectionAreaToEmpty4, _selectionAreaToEmpty5, _selectionAreaToEmpty6, _selectionAreaToEmpty7, _selectionAreaToEmpty8;
20
+
19
21
  var activeCellCoordinates = _ref.activeCellCoordinates,
20
22
  selectionAreas = _ref.selectionAreas,
21
23
  currentMatcher = _ref.currentMatcher,
@@ -35,10 +37,10 @@ var handleCellDeletion = function handleCellDeletion(_ref) {
35
37
  return item.matcher === currentMatcher;
36
38
  });
37
39
  var selectionAreaToEmptyContents = selectionAreaClone[indexOfCurrentSelectionArea];
38
- var lowestColumnIndex = Math.min(selectionAreaToEmptyContents.point1.column, selectionAreaToEmptyContents.point2.column);
39
- var greatestColumnIndex = Math.max(selectionAreaToEmptyContents.point1.column, selectionAreaToEmptyContents.point2.column);
40
- var lowestRowIndex = Math.min(selectionAreaToEmptyContents.point1.row, selectionAreaToEmptyContents.point2.row);
41
- var greatestRowIndex = Math.max(selectionAreaToEmptyContents.point1.row, selectionAreaToEmptyContents.point2.row);
40
+ var lowestColumnIndex = Math.min(selectionAreaToEmptyContents === null || selectionAreaToEmptyContents === void 0 ? void 0 : (_selectionAreaToEmpty = selectionAreaToEmptyContents.point1) === null || _selectionAreaToEmpty === void 0 ? void 0 : _selectionAreaToEmpty.column, selectionAreaToEmptyContents === null || selectionAreaToEmptyContents === void 0 ? void 0 : (_selectionAreaToEmpty2 = selectionAreaToEmptyContents.point2) === null || _selectionAreaToEmpty2 === void 0 ? void 0 : _selectionAreaToEmpty2.column);
41
+ var greatestColumnIndex = Math.max(selectionAreaToEmptyContents === null || selectionAreaToEmptyContents === void 0 ? void 0 : (_selectionAreaToEmpty3 = selectionAreaToEmptyContents.point1) === null || _selectionAreaToEmpty3 === void 0 ? void 0 : _selectionAreaToEmpty3.column, selectionAreaToEmptyContents === null || selectionAreaToEmptyContents === void 0 ? void 0 : (_selectionAreaToEmpty4 = selectionAreaToEmptyContents.point2) === null || _selectionAreaToEmpty4 === void 0 ? void 0 : _selectionAreaToEmpty4.column);
42
+ var lowestRowIndex = Math.min(selectionAreaToEmptyContents === null || selectionAreaToEmptyContents === void 0 ? void 0 : (_selectionAreaToEmpty5 = selectionAreaToEmptyContents.point1) === null || _selectionAreaToEmpty5 === void 0 ? void 0 : _selectionAreaToEmpty5.row, selectionAreaToEmptyContents === null || selectionAreaToEmptyContents === void 0 ? void 0 : (_selectionAreaToEmpty6 = selectionAreaToEmptyContents.point2) === null || _selectionAreaToEmpty6 === void 0 ? void 0 : _selectionAreaToEmpty6.row);
43
+ var greatestRowIndex = Math.max(selectionAreaToEmptyContents === null || selectionAreaToEmptyContents === void 0 ? void 0 : (_selectionAreaToEmpty7 = selectionAreaToEmptyContents.point1) === null || _selectionAreaToEmpty7 === void 0 ? void 0 : _selectionAreaToEmpty7.row, selectionAreaToEmptyContents === null || selectionAreaToEmptyContents === void 0 ? void 0 : (_selectionAreaToEmpty8 = selectionAreaToEmptyContents.point2) === null || _selectionAreaToEmpty8 === void 0 ? void 0 : _selectionAreaToEmpty8.row);
42
44
  (0, _rangeWithCallback.rangeWithCallback)(lowestColumnIndex, greatestColumnIndex, function (columnIndex) {
43
45
  (0, _rangeWithCallback.rangeWithCallback)(lowestRowIndex, greatestRowIndex, function (rowIndex) {
44
46
  var cellProps = rows[rowIndex].cells[columnIndex];
@@ -27,6 +27,8 @@ var _InlineEditContext = require("./addons/InlineEdit/InlineEditContext");
27
27
 
28
28
  var _DatagridContent = require("./DatagridContent");
29
29
 
30
+ var _FilterProvider = require("./addons/Filtering/FilterProvider");
31
+
30
32
  var _excluded = ["datagridState"];
31
33
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
32
34
  var componentName = 'Datagrid';
@@ -46,9 +48,12 @@ var Datagrid = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
46
48
  isFetching = datagridState.isFetching,
47
49
  tableId = datagridState.tableId,
48
50
  leftPanel = datagridState.leftPanel,
49
- className = datagridState.className;
51
+ className = datagridState.className,
52
+ filters = datagridState.state.filters;
50
53
  var rows = DatagridPagination && datagridState.page || datagridState.rows;
51
- return /*#__PURE__*/_react.default.createElement(_InlineEditContext.InlineEditProvider, null, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
54
+ return /*#__PURE__*/_react.default.createElement(_FilterProvider.FilterProvider, {
55
+ filters: filters
56
+ }, /*#__PURE__*/_react.default.createElement(_InlineEditContext.InlineEditProvider, null, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
52
57
  id: tableId,
53
58
  ref: ref,
54
59
  className: (0, _classnames.default)(className, blockClass, withVirtualScroll ? "".concat(blockClass, "__datagridWrap") : "".concat(blockClass, "__datagridWrap-simple"), !isFetching && rows.length === 0 ? "".concat(blockClass, "__empty-state") : '')
@@ -58,7 +63,7 @@ var Datagrid = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
58
63
  datagridState: datagridState
59
64
  })), leftPanel === undefined && /*#__PURE__*/_react.default.createElement(_DatagridContent.DatagridContent, {
60
65
  datagridState: datagridState
61
- })));
66
+ }))));
62
67
  }); // Return a placeholder if not released and not enabled by feature flag
63
68
 
64
69
 
@@ -76,7 +76,8 @@ var DatagridContent = function DatagridContent(_ref) {
76
76
  withInlineEdit = datagridState.withInlineEdit,
77
77
  tableId = datagridState.tableId,
78
78
  DatagridActions = datagridState.DatagridActions,
79
- totalColumnsWidth = datagridState.totalColumnsWidth;
79
+ totalColumnsWidth = datagridState.totalColumnsWidth,
80
+ gridRef = datagridState.gridRef;
80
81
  var rows = DatagridPagination && datagridState.page || datagridState.rows;
81
82
  var gridActive = state.gridActive,
82
83
  editId = state.editId;
@@ -120,7 +121,7 @@ var DatagridContent = function DatagridContent(_ref) {
120
121
  onFocus: withInlineEdit ? function () {
121
122
  return (0, _handleGridFocus.handleGridFocus)(state, dispatch);
122
123
  } : null
123
- }), /*#__PURE__*/_react.default.createElement(_DatagridHead.default, datagridState), /*#__PURE__*/_react.default.createElement(_DatagridBody.default, (0, _extends2.default)({}, datagridState, {
124
+ }), !withVirtualScroll ? /*#__PURE__*/_react.default.createElement(_DatagridHead.default, datagridState) : null, /*#__PURE__*/_react.default.createElement(_DatagridBody.default, (0, _extends2.default)({}, datagridState, {
124
125
  rows: rows
125
126
  })));
126
127
  };
@@ -158,6 +159,9 @@ var DatagridContent = function DatagridContent(_ref) {
158
159
  className: "".concat(blockClass, "__datagridLeftPanel")
159
160
  }, leftPanel.panelContent), withInlineEdit ? /*#__PURE__*/_react.default.createElement("div", {
160
161
  ref: multiKeyTrackingRef
162
+ }, renderTable()) : withVirtualScroll ? /*#__PURE__*/_react.default.createElement("div", {
163
+ className: "".concat(blockClass, "__virtualScrollContainer"),
164
+ ref: gridRef
161
165
  }, renderTable()) : renderTable())), (rows === null || rows === void 0 ? void 0 : rows.length) > 0 && !isFetching && DatagridPagination && /*#__PURE__*/_react.default.createElement(DatagridPagination, datagridState), CustomizeColumnsModal && /*#__PURE__*/_react.default.createElement(CustomizeColumnsModal, {
162
166
  instance: datagridState
163
167
  }));
@@ -183,6 +187,7 @@ DatagridContent.propTypes = {
183
187
  page: _propTypes.default.arrayOf(_propTypes.default.object),
184
188
  rows: _propTypes.default.arrayOf(_propTypes.default.object),
185
189
  tableId: _propTypes.default.string,
186
- totalColumnsWidth: _propTypes.default.number
190
+ totalColumnsWidth: _propTypes.default.number,
191
+ gridRef: _propTypes.default.object
187
192
  })
188
193
  };
@@ -15,7 +15,7 @@ var _settings = require("../../../settings");
15
15
 
16
16
  var _react2 = require("@carbon/react");
17
17
 
18
- var _NoDataEmptyState = require("../../EmptyStates/NoDataEmptyState");
18
+ var _EmptyStates = require("../../EmptyStates");
19
19
 
20
20
  /*
21
21
  * Licensed Materials - Property of IBM
@@ -35,16 +35,29 @@ var DatagridEmptyBody = function DatagridEmptyBody(datagridState) {
35
35
  emptyStateTitle = datagridState.emptyStateTitle,
36
36
  emptyStateDescription = datagridState.emptyStateDescription,
37
37
  emptyStateSize = datagridState.emptyStateSize,
38
- illustrationTheme = datagridState.illustrationTheme;
38
+ _datagridState$emptyS = datagridState.emptyStateType,
39
+ emptyStateType = _datagridState$emptyS === void 0 ? 'noData' : _datagridState$emptyS,
40
+ illustrationTheme = datagridState.illustrationTheme,
41
+ emptyStateAction = datagridState.emptyStateAction,
42
+ emptyStateLink = datagridState.emptyStateLink;
39
43
  return /*#__PURE__*/_react.default.createElement(TableBody, (0, _extends2.default)({}, getTableBodyProps(), {
40
44
  className: "".concat(blockClass, "__empty-state-body")
41
45
  }), /*#__PURE__*/_react.default.createElement(TableRow, null, /*#__PURE__*/_react.default.createElement(TableCell, {
42
46
  colSpan: headers.length
43
- }, /*#__PURE__*/_react.default.createElement(_NoDataEmptyState.NoDataEmptyState, {
47
+ }, emptyStateType === 'error' && /*#__PURE__*/_react.default.createElement(_EmptyStates.ErrorEmptyState, {
44
48
  illustrationTheme: illustrationTheme,
45
49
  size: emptyStateSize,
46
50
  title: emptyStateTitle,
47
- subtitle: emptyStateDescription
51
+ subtitle: emptyStateDescription,
52
+ action: emptyStateAction,
53
+ link: emptyStateLink
54
+ }), emptyStateType === 'noData' && /*#__PURE__*/_react.default.createElement(_EmptyStates.NoDataEmptyState, {
55
+ illustrationTheme: illustrationTheme,
56
+ size: emptyStateSize,
57
+ title: emptyStateTitle,
58
+ subtitle: emptyStateDescription,
59
+ action: emptyStateAction,
60
+ link: emptyStateLink
48
61
  }))));
49
62
  };
50
63
 
@@ -2,8 +2,6 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
@@ -15,7 +13,7 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
15
13
 
16
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
15
 
18
- var _react = _interopRequireWildcard(require("react"));
16
+ var _react = _interopRequireDefault(require("react"));
19
17
 
20
18
  var _react2 = require("@carbon/react");
21
19
 
@@ -27,16 +25,7 @@ var _classnames = _interopRequireDefault(require("classnames"));
27
25
 
28
26
  var _settings = require("../../../settings");
29
27
 
30
- var _InlineEditContext = require("./addons/InlineEdit/InlineEditContext/InlineEditContext");
31
-
32
- var _getCellIdAsObject = require("./addons/InlineEdit/InlineEditContext/getCellIdAsObject");
33
-
34
28
  var _excluded = ["children"];
35
-
36
- 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); }
37
-
38
- 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; }
39
-
40
29
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
41
30
  var TableRow = _react2.DataTable.TableRow,
42
31
  TableCell = _react2.DataTable.TableCell;
@@ -55,12 +44,6 @@ var DatagridRow = function DatagridRow(datagridState) {
55
44
  rowSize = datagridState.rowSize,
56
45
  withNestedRows = datagridState.withNestedRows;
57
46
 
58
- var _useContext = (0, _react.useContext)(_InlineEditContext.InlineEditContext),
59
- state = _useContext.state;
60
-
61
- var activeCellId = state.activeCellId;
62
- var activeCellObject = activeCellId && (0, _getCellIdAsObject.getCellIdAsObject)(activeCellId);
63
-
64
47
  var getVisibleNestedRowCount = function getVisibleNestedRowCount(_ref) {
65
48
  var isExpanded = _ref.isExpanded,
66
49
  subRows = _ref.subRows;
@@ -77,7 +60,7 @@ var DatagridRow = function DatagridRow(datagridState) {
77
60
  };
78
61
 
79
62
  return /*#__PURE__*/_react.default.createElement(TableRow, (0, _extends2.default)({
80
- className: (0, _classnames.default)("".concat(blockClass, "__carbon-row"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-expanded"), row.isExpanded), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-expandable"), row.canExpand), (0, _defineProperty2.default)(_cx, "".concat(_settings.carbon.prefix, "--data-table--selected"), row.isSelected), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-hover-active"), activeCellObject && row.index === activeCellObject.row), _cx))
63
+ className: (0, _classnames.default)("".concat(blockClass, "__carbon-row"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-expanded"), row.isExpanded), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-expandable"), row.canExpand), (0, _defineProperty2.default)(_cx, "".concat(_settings.carbon.prefix, "--data-table--selected"), row.isSelected), _cx))
81
64
  }, row.getRowProps(), {
82
65
  key: row.id,
83
66
  onMouseEnter: function onMouseEnter(event) {
@@ -27,6 +27,12 @@ var _settings = require("../../../settings");
27
27
 
28
28
  var _classnames = _interopRequireDefault(require("classnames"));
29
29
 
30
+ var _FilterSummary = require("../../FilterSummary");
31
+
32
+ var _FilterProvider = require("./addons/Filtering/FilterProvider");
33
+
34
+ var _constants = require("./addons/Filtering/constants");
35
+
30
36
  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); }
31
37
 
32
38
  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; }
@@ -164,13 +170,28 @@ var DatagridToolbar = function DatagridToolbar(datagridState) {
164
170
 
165
171
  var DatagridActions = datagridState.DatagridActions,
166
172
  DatagridBatchActions = datagridState.DatagridBatchActions,
167
- batchActions = datagridState.batchActions;
173
+ batchActions = datagridState.batchActions,
174
+ state = datagridState.state;
175
+
176
+ var _useContext = (0, _react.useContext)(_FilterProvider.FilterContext),
177
+ filterTags = _useContext.filterTags,
178
+ EventEmitter = _useContext.EventEmitter;
179
+
180
+ var renderFilterSummary = function renderFilterSummary() {
181
+ return state.filters.length > 0 && /*#__PURE__*/_react.default.createElement(_FilterSummary.FilterSummary, {
182
+ filters: filterTags,
183
+ clearFilters: function clearFilters() {
184
+ return EventEmitter.dispatch(_constants.CLEAR_FILTERS);
185
+ }
186
+ });
187
+ };
188
+
168
189
  return batchActions && DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
169
190
  ref: ref,
170
191
  className: "".concat(blockClass, "__table-toolbar")
171
- }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref))) : DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
192
+ }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref)), renderFilterSummary()) : DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
172
193
  className: "".concat(blockClass, "__table-toolbar")
173
- }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActions && DatagridBatchActions(datagridState))) : null;
194
+ }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActions && DatagridBatchActions(datagridState)), renderFilterSummary()) : null;
174
195
  };
175
196
 
176
197
  var _default = DatagridToolbar;