@carbon/ibm-products 1.38.0 → 1.39.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. package/css/index-full-carbon.css +123 -3
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +3 -1
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css.map +1 -1
  6. package/css/index-without-carbon-released-only.min.css.map +1 -1
  7. package/css/index-without-carbon.css +123 -3
  8. package/css/index-without-carbon.css.map +1 -1
  9. package/css/index-without-carbon.min.css +3 -1
  10. package/css/index-without-carbon.min.css.map +1 -1
  11. package/css/index.css +123 -3
  12. package/css/index.css.map +1 -1
  13. package/css/index.min.css +3 -1
  14. package/css/index.min.css.map +1 -1
  15. package/es/components/ActionBar/ActionBarOverflowItems.js +1 -0
  16. package/es/components/CreateFullPage/CreateFullPage.js +4 -1
  17. package/es/components/Datagrid/Datagrid/Datagrid.js +7 -3
  18. package/es/components/Datagrid/Datagrid/DatagridRow.js +35 -2
  19. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +19 -3
  20. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +384 -0
  21. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +35 -46
  22. package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +19 -0
  23. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +18 -0
  24. package/es/components/Datagrid/Datagrid/addons/Filtering/index.js +7 -0
  25. package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +38 -0
  26. package/es/components/Datagrid/index.js +2 -1
  27. package/es/components/Datagrid/useFiltering.js +83 -0
  28. package/es/components/Datagrid/useNestedRows.js +11 -2
  29. package/es/components/Datagrid/utils/DatagridActions.js +134 -33
  30. package/es/components/Datagrid/utils/makeData.js +23 -16
  31. package/lib/components/ActionBar/ActionBarOverflowItems.js +1 -0
  32. package/lib/components/CreateFullPage/CreateFullPage.js +4 -1
  33. package/lib/components/Datagrid/Datagrid/Datagrid.js +7 -3
  34. package/lib/components/Datagrid/Datagrid/DatagridRow.js +35 -2
  35. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +18 -3
  36. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +385 -0
  37. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +35 -46
  38. package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +33 -0
  39. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +27 -0
  40. package/lib/components/Datagrid/Datagrid/addons/Filtering/index.js +13 -0
  41. package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +45 -0
  42. package/lib/components/Datagrid/index.js +8 -1
  43. package/lib/components/Datagrid/useFiltering.js +83 -0
  44. package/lib/components/Datagrid/useNestedRows.js +11 -2
  45. package/lib/components/Datagrid/utils/DatagridActions.js +135 -31
  46. package/lib/components/Datagrid/utils/makeData.js +24 -17
  47. package/package.json +2 -2
  48. package/scss/components/ActionSet/_action-set.scss +3 -1
  49. package/scss/components/AddSelect/_add-select.scss +3 -1
  50. package/scss/components/Datagrid/_datagrid.scss +0 -1
  51. package/scss/components/Datagrid/_storybook-styles.scss +4 -0
  52. package/scss/components/Datagrid/styles/_datagrid.scss +47 -4
  53. package/scss/components/Datagrid/styles/_index.scss +1 -0
  54. package/scss/components/Datagrid/styles/_useInlineEdit.scss +9 -3
  55. package/scss/components/Datagrid/styles/addons/_FilterFlyout.scss +80 -0
  56. package/scss/components/InlineEditV1/_inline-edit-v1.scss +3 -1
  57. package/scss/components/PageHeader/_page-header.scss +6 -2
@@ -0,0 +1,38 @@
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
+
8
+ // This functions takes the filters passed in and makes an object to track it's state
9
+ export var getInitialStateFromFilters = function getInitialStateFromFilters(filters) {
10
+ var initialFilterState = {};
11
+ filters.forEach(function (_ref) {
12
+ var type = _ref.type,
13
+ column = _ref.column,
14
+ props = _ref.props;
15
+ if (type === 'checkbox') {
16
+ initialFilterState[column] = props.Checkbox.map(function (_ref2) {
17
+ var id = _ref2.id,
18
+ labelText = _ref2.labelText,
19
+ value = _ref2.value;
20
+ return {
21
+ id: id,
22
+ labelText: labelText,
23
+ value: value,
24
+ selected: false
25
+ };
26
+ });
27
+ } else if (type === 'date') {
28
+ initialFilterState[column] = [undefined, undefined];
29
+ } else if (type === 'number') {
30
+ initialFilterState[column] = '';
31
+ } else if (type === 'radio') {
32
+ initialFilterState[column] = '';
33
+ } else if (type === 'dropdown') {
34
+ initialFilterState[column] = '';
35
+ }
36
+ });
37
+ return initialFilterState;
38
+ };
@@ -22,4 +22,5 @@ export { default as useCustomizeColumns } from './useCustomizeColumns';
22
22
  export { default as useSelectAllWithToggle } from './useSelectAllToggle';
23
23
  export { default as useColumnCenterAlign } from './useColumnCenterAlign';
24
24
  export { default as useColumnOrder } from './useColumnOrder';
25
- export { default as useInlineEdit } from './useInlineEdit';
25
+ export { default as useInlineEdit } from './useInlineEdit';
26
+ export { default as useFiltering } from './useFiltering';
@@ -0,0 +1,83 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ 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; }
4
+ 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; }
5
+ // @flow
6
+ /*
7
+ * Licensed Materials - Property of IBM
8
+ * 5724-Q36
9
+ * (c) Copyright IBM Corp. 2022
10
+ * US Government Users Restricted Rights - Use, duplication or disclosure
11
+ * restricted by GSA ADP Schedule Contract with IBM Corp.
12
+ */
13
+ import { useMemo } from 'react';
14
+ var useFiltering = function useFiltering(hooks) {
15
+ var filterTypes = useMemo(function () {
16
+ return {
17
+ date: function date(rows, id, _ref) {
18
+ var _ref2 = _slicedToArray(_ref, 2),
19
+ startDate = _ref2[0],
20
+ endDate = _ref2[1];
21
+ return rows.filter(function (row) {
22
+ var rowValue = row.values[id];
23
+ if (rowValue.getTime() <= endDate.getTime() && rowValue.getTime() >= startDate.getTime()) {
24
+ // In date range
25
+ return true;
26
+ } else {
27
+ // Not in date range
28
+ return false;
29
+ }
30
+ });
31
+ },
32
+ number: function number(rows, id, value) {
33
+ if (value === '') {
34
+ return rows;
35
+ }
36
+ var parsedValue = parseInt(value);
37
+ return rows.filter(function (row) {
38
+ var rowValue = row.values[id];
39
+ return rowValue === parsedValue;
40
+ });
41
+ },
42
+ checkbox: function checkbox(rows, id, value) {
43
+ // gets all the items that are selected and returns their value
44
+ var selectedItems = value.filter(function (item) {
45
+ return item.selected;
46
+ }).map(function (item) {
47
+ return item.value;
48
+ });
49
+
50
+ // if the user removed all checkboxes then display all rows
51
+ if (selectedItems.length === 0) {
52
+ return rows;
53
+ }
54
+ return rows.filter(function (row) {
55
+ var rowValue = row.values[id];
56
+ return selectedItems.includes(rowValue);
57
+ });
58
+ }
59
+ };
60
+ }, []);
61
+ hooks.useInstance.push(function (instance) {
62
+ var filterProps = instance.filterProps,
63
+ setAllFilters = instance.setAllFilters,
64
+ setFilter = instance.setFilter,
65
+ headers = instance.headers;
66
+ var defaultProps = {
67
+ variation: 'flyout'
68
+ };
69
+ var getFilterFlyoutProps = function getFilterFlyoutProps() {
70
+ return _objectSpread(_objectSpread(_objectSpread({}, defaultProps), filterProps), {}, {
71
+ setAllFilters: setAllFilters,
72
+ setFilter: setFilter,
73
+ headers: headers
74
+ });
75
+ };
76
+ Object.assign(instance, {
77
+ filterProps: _objectSpread(_objectSpread({}, defaultProps), instance.filterProps),
78
+ filterTypes: filterTypes,
79
+ getFilterFlyoutProps: getFilterFlyoutProps
80
+ });
81
+ });
82
+ };
83
+ export default useFiltering;
@@ -1,3 +1,4 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  /*
2
3
  * Licensed Materials - Property of IBM
3
4
  * 5724-Q36
@@ -6,15 +7,17 @@
6
7
  * restricted by GSA ADP Schedule Contract with IBM Corp.
7
8
  */
8
9
  import { pkg } from '../../settings';
10
+ import cx from 'classnames';
9
11
  import useNestedRowExpander from './useNestedRowExpander';
10
12
  var blockClass = "".concat(pkg.prefix, "--datagrid");
11
13
  var useNestedRows = function useNestedRows(hooks) {
12
14
  useNestedRowExpander(hooks);
13
15
  var marginLeft = 24;
14
16
  var getRowProps = function getRowProps(props, _ref) {
17
+ var _cx;
15
18
  var row = _ref.row;
16
19
  return [props, {
17
- className: row.depth > 0 ? "".concat(blockClass, "__carbon-nested-row") : ''
20
+ className: cx((_cx = {}, _defineProperty(_cx, "".concat(blockClass, "__carbon-nested-row"), row.depth > 0), _defineProperty(_cx, "".concat(blockClass, "__carbon-row-expanded"), row.isExpanded), _cx))
18
21
  }];
19
22
  };
20
23
  var getRowStyles = function getRowStyles(props, _ref2) {
@@ -22,7 +25,7 @@ var useNestedRows = function useNestedRows(hooks) {
22
25
  return [props, {
23
26
  style: {
24
27
  marginLeft: "".concat(row.depth > 0 ? marginLeft : 0, "px"),
25
- paddingLeft: "".concat(row.depth > 1 ? marginLeft * (row.depth - 1) + marginLeft : row.depth === 1 ? marginLeft : 0, "px"),
28
+ paddingLeft: "".concat(row.depth === 2 ? marginLeft * (row.depth - 1) + marginLeft - 8 : row.depth > 2 ? marginLeft * (row.depth - 1) + marginLeft : row.depth === 1 ? marginLeft - 16 : 0, "px"),
26
29
  maxWidth: "calc(100% - ".concat(marginLeft * row.depth, "px)")
27
30
  }
28
31
  }];
@@ -40,8 +43,14 @@ var useNestedRows = function useNestedRows(hooks) {
40
43
  }
41
44
  }];
42
45
  };
46
+ var useInstance = function useInstance(instance) {
47
+ Object.assign(instance, {
48
+ withNestedRows: true
49
+ });
50
+ };
43
51
  hooks.getRowProps.push(getRowProps);
44
52
  hooks.getRowProps.push(getRowStyles);
45
53
  hooks.getCellProps.push(getCellProps);
54
+ hooks.useInstance.push(useInstance);
46
55
  };
47
56
  export default useNestedRows;
@@ -1,3 +1,4 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
1
2
  /**
2
3
  * Copyright IBM Corp. 2020, 2022
3
4
  *
@@ -5,12 +6,13 @@
5
6
  * LICENSE file in the root directory of this source tree.
6
7
  */
7
8
 
8
- import React from 'react';
9
- import { DataTable, Button } from 'carbon-components-react';
10
- import { Download16, Filter16, Add16, Restart16 } from '@carbon/icons-react';
9
+ import React, { useLayoutEffect, useMemo, useState } from 'react';
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
12
  import { action } from '@storybook/addon-actions';
12
13
  import { pkg } from '../../../settings';
13
14
  import { ButtonMenu, ButtonMenuItem } from '../../ButtonMenu';
15
+ import { FilterFlyout } from '../Datagrid/addons/Filtering';
14
16
  var blockClass = "".concat(pkg.prefix, "--datagrid");
15
17
  export var DatagridActions = function DatagridActions(datagridState) {
16
18
  var selectedFlatRows = datagridState.selectedFlatRows,
@@ -18,7 +20,9 @@ export var DatagridActions = function DatagridActions(datagridState) {
18
20
  CustomizeColumnsButton = datagridState.CustomizeColumnsButton,
19
21
  RowSizeDropdown = datagridState.RowSizeDropdown,
20
22
  rowSizeDropdownProps = datagridState.rowSizeDropdownProps,
21
- useDenseHeader = datagridState.useDenseHeader;
23
+ useDenseHeader = datagridState.useDenseHeader,
24
+ filterProps = datagridState.filterProps,
25
+ getFilterFlyoutProps = datagridState.getFilterFlyoutProps;
22
26
  var downloadCsv = function downloadCsv() {
23
27
  alert('Downloading...');
24
28
  };
@@ -27,19 +31,42 @@ export var DatagridActions = function DatagridActions(datagridState) {
27
31
  var refreshColumns = function refreshColumns() {
28
32
  alert('refreshing...');
29
33
  };
30
- var leftPanelClick = function leftPanelClick() {
31
- alert('open/close left panel...');
32
- };
33
34
  var searchForAColumn = 'Search';
34
- var isNothingSelected = selectedFlatRows.length === 0;
35
- var style = {
36
- 'button:nth-child(1) > span:nth-child(1)': {
37
- bottom: '-37px'
38
- }
35
+ var isNothingSelected = useMemo(function () {
36
+ return selectedFlatRows.length === 0;
37
+ }, [selectedFlatRows]);
38
+ var style = useMemo(function () {
39
+ return {
40
+ 'button:nthChild(1) > span:nthChild(1)': {
41
+ bottom: '-37px'
42
+ }
43
+ };
44
+ }, []);
45
+ var renderFilterFlyout = function renderFilterFlyout() {
46
+ return (filterProps === null || filterProps === void 0 ? void 0 : filterProps.variation) === 'flyout' && /*#__PURE__*/React.createElement(FilterFlyout, getFilterFlyoutProps());
39
47
  };
48
+ var _useState = useState(false),
49
+ _useState2 = _slicedToArray(_useState, 2),
50
+ modalOpen = _useState2[0],
51
+ setModalOpen = _useState2[1];
52
+ var _useState3 = useState(window.innerWidth),
53
+ _useState4 = _slicedToArray(_useState3, 2),
54
+ size = _useState4[0],
55
+ setSize = _useState4[1];
56
+ useLayoutEffect(function () {
57
+ function updateSize() {
58
+ setSize(window.innerWidth);
59
+ }
60
+ window.addEventListener('resize', updateSize);
61
+ return function () {
62
+ return window.removeEventListener('resize', updateSize);
63
+ };
64
+ }, []);
65
+ var mobileToolbar = size < 672 ? true : false;
66
+ var items = ['Option 1', 'Option 2', 'Option 3'];
40
67
  return isNothingSelected && (useDenseHeader && useDenseHeader ? /*#__PURE__*/React.createElement(TableToolbarContent, {
41
68
  size: "sm"
42
- }, /*#__PURE__*/React.createElement("div", {
69
+ }, !mobileToolbar ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
43
70
  style: style
44
71
  }, /*#__PURE__*/React.createElement(Button, {
45
72
  kind: "ghost",
@@ -48,16 +75,7 @@ export var DatagridActions = function DatagridActions(datagridState) {
48
75
  renderIcon: Download16,
49
76
  iconDescription: 'Download CSV',
50
77
  onClick: downloadCsv
51
- })), /*#__PURE__*/React.createElement("div", {
52
- style: style
53
- }, /*#__PURE__*/React.createElement(Button, {
54
- kind: "ghost",
55
- hasIconOnly: true,
56
- tooltipPosition: "bottom",
57
- renderIcon: Filter16,
58
- iconDescription: 'Left panel',
59
- onClick: leftPanelClick
60
- })), /*#__PURE__*/React.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/React.createElement("div", {
78
+ })), renderFilterFlyout(), /*#__PURE__*/React.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/React.createElement("div", {
61
79
  style: style,
62
80
  className: "".concat(blockClass, "__toolbar-divider")
63
81
  }, /*#__PURE__*/React.createElement(Button, {
@@ -66,14 +84,34 @@ export var DatagridActions = function DatagridActions(datagridState) {
66
84
  iconDescription: 'Action'
67
85
  }, "Ghost button")), CustomizeColumnsButton && /*#__PURE__*/React.createElement("div", {
68
86
  style: style
69
- }, /*#__PURE__*/React.createElement(CustomizeColumnsButton, null))) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
70
- kind: "ghost",
71
- hasIconOnly: true,
72
- tooltipPosition: "bottom",
73
- renderIcon: Filter16,
74
- iconDescription: 'Left panel',
75
- onClick: leftPanelClick
76
- }), /*#__PURE__*/React.createElement(TableToolbarContent, null, /*#__PURE__*/React.createElement(TableToolbarSearch, {
87
+ }, /*#__PURE__*/React.createElement(CustomizeColumnsButton, null))) : /*#__PURE__*/React.createElement(OverflowMenu, {
88
+ ariaLabel: "Tools",
89
+ size: "md",
90
+ flipped: true
91
+ }, /*#__PURE__*/React.createElement(OverflowMenuItem, {
92
+ itemText: "Filter",
93
+ hasDivider: true,
94
+ requireTitle: true,
95
+ onClick: function onClick() {
96
+ return setModalOpen(true);
97
+ }
98
+ }), /*#__PURE__*/React.createElement(OverflowMenuItem, {
99
+ itemText: "Export",
100
+ hasDivider: true,
101
+ requireTitle: true
102
+ }), /*#__PURE__*/React.createElement(OverflowMenuItem, {
103
+ itemText: "Settings",
104
+ hasDivider: true,
105
+ requireTitle: true
106
+ }), /*#__PURE__*/React.createElement(OverflowMenuItem, {
107
+ itemText: "Import items",
108
+ hasDivider: true,
109
+ requireTitle: true
110
+ }), /*#__PURE__*/React.createElement(OverflowMenuItem, {
111
+ itemText: "Create",
112
+ hasDivider: true,
113
+ requireTitle: true
114
+ }))) : !mobileToolbar ? /*#__PURE__*/React.createElement(TableToolbarContent, null, /*#__PURE__*/React.createElement(TableToolbarSearch, {
77
115
  size: "xl",
78
116
  id: "columnSearch",
79
117
  persistent: true,
@@ -81,7 +119,7 @@ export var DatagridActions = function DatagridActions(datagridState) {
81
119
  onChange: function onChange(e) {
82
120
  return setGlobalFilter(e.target.value);
83
121
  }
84
- }), /*#__PURE__*/React.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/React.createElement("div", {
122
+ }), renderFilterFlyout(), /*#__PURE__*/React.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/React.createElement("div", {
85
123
  style: style
86
124
  }, /*#__PURE__*/React.createElement(Button, {
87
125
  kind: "ghost",
@@ -113,5 +151,68 @@ export var DatagridActions = function DatagridActions(datagridState) {
113
151
  }), /*#__PURE__*/React.createElement(ButtonMenuItem, {
114
152
  itemText: "Option 3",
115
153
  onClick: action("Click on ButtonMenu Option 3")
116
- })))));
154
+ }))) : /*#__PURE__*/React.createElement(TableToolbarContent, null, /*#__PURE__*/React.createElement(TableToolbarSearch, {
155
+ size: "xl",
156
+ id: "columnSearch",
157
+ persistent: true,
158
+ placeHolderText: searchForAColumn,
159
+ onChange: function onChange(e) {
160
+ return setGlobalFilter(e.target.value);
161
+ }
162
+ }), /*#__PURE__*/React.createElement(OverflowMenu, {
163
+ ariaLabel: "Tools",
164
+ size: "lg",
165
+ flipped: true,
166
+ renderIcon: ChevronDown16,
167
+ className: "".concat(blockClass, "__toolbar-menu__trigger"),
168
+ menuOptionsClass: "".concat(blockClass, "__toolbar-options")
169
+ }, /*#__PURE__*/React.createElement(OverflowMenuItem, {
170
+ itemText: "Filter",
171
+ hasDivider: true,
172
+ requireTitle: true,
173
+ onClick: function onClick() {
174
+ return setModalOpen(true);
175
+ }
176
+ }), /*#__PURE__*/React.createElement(OverflowMenuItem, {
177
+ itemText: "Export",
178
+ hasDivider: true,
179
+ requireTitle: true
180
+ }), /*#__PURE__*/React.createElement(OverflowMenuItem, {
181
+ itemText: "Settings",
182
+ hasDivider: true,
183
+ requireTitle: true
184
+ }), /*#__PURE__*/React.createElement(OverflowMenuItem, {
185
+ itemText: "Import items",
186
+ hasDivider: true,
187
+ requireTitle: true
188
+ }), /*#__PURE__*/React.createElement(OverflowMenuItem, {
189
+ itemText: "Create",
190
+ hasDivider: true,
191
+ requireTitle: true
192
+ })), modalOpen && /*#__PURE__*/React.createElement(ComposedModal, {
193
+ size: "lg",
194
+ open: modalOpen && modalOpen,
195
+ onClose: function onClose() {
196
+ return setModalOpen(false);
197
+ },
198
+ className: "".concat(blockClass, "__mobile-toolbar-modal")
199
+ }, /*#__PURE__*/React.createElement(ModalHeader, null, /*#__PURE__*/React.createElement("h4", null, "Filters")), /*#__PURE__*/React.createElement(ModalBody, null, /*#__PURE__*/React.createElement(Dropdown, {
200
+ initialSelectedItem: items[2],
201
+ items: items,
202
+ titleText: "Label",
203
+ id: "filter1"
204
+ }), /*#__PURE__*/React.createElement(Dropdown, {
205
+ initialSelectedItem: items[2],
206
+ items: items,
207
+ titleText: "Label",
208
+ id: "filter2"
209
+ }), /*#__PURE__*/React.createElement(Dropdown, {
210
+ initialSelectedItem: items[2],
211
+ items: items,
212
+ titleText: "Label",
213
+ id: "filter3"
214
+ })), /*#__PURE__*/React.createElement(ModalFooter, {
215
+ primaryButtonText: "Apply",
216
+ secondaryButtonText: "Cancel"
217
+ }))));
117
218
  };
@@ -10,7 +10,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
10
10
 
11
11
  import React from 'react';
12
12
  import namor from 'namor';
13
- import { StatusIcon } from '../../StatusIcon';
14
13
  import { inlineEditSelectItems } from './getInlineEditColumns';
15
14
  var getRandomInteger = function getRandomInteger(min, max, decimalPlaces) {
16
15
  var roundedMin = Math.ceil(min);
@@ -44,24 +43,27 @@ export var range = function range(len) {
44
43
  }
45
44
  return arr;
46
45
  };
47
- var renderStatusIcon = function renderStatusIcon(statusChance) {
48
- var iconProps = {
49
- size: 'sm',
50
- theme: 'light',
51
- kind: statusChance > 0.66 ? 'critical' : statusChance > 0.33 ? 'minor-warning' : 'normal',
52
- iconDescription: statusChance > 0.66 ? 'Critical' : statusChance > 0.33 ? 'Minor warning' : 'Normal'
53
- };
54
- return /*#__PURE__*/React.createElement(StatusIcon, iconProps);
46
+
47
+ /** This function is only to create a random data point when the person joined */
48
+ var getRandomDateJoined = function getRandomDateJoined() {
49
+ return randomDate(new Date(2022, 0, 1), new Date());
50
+ };
51
+ var getPasswordStrength = function getPasswordStrength() {
52
+ var chance = Math.random();
53
+ return chance > 0.66 ? 'critical' : chance > 0.33 ? 'minor-warning' : 'normal';
55
54
  };
56
- var renderDocLink = function renderDocLink(statusChance) {
55
+ var renderDocLink = function renderDocLink() {
56
+ var chance = Math.random();
57
57
  var docLinkObj = {
58
- 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/',
59
- text: statusChance > 0.66 ? 'Carbon Design System' : statusChance > 0.33 ? 'Carbon for IBM Products PAL' : 'Carbon for IBM Products storybook'
58
+ 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/',
59
+ text: chance > 0.66 ? 'Carbon Design System' : chance > 0.33 ? 'Carbon for IBM Products PAL' : 'Carbon for IBM Products storybook'
60
60
  };
61
61
  return docLinkObj;
62
62
  };
63
63
  var newPerson = function newPerson() {
64
64
  var statusChance = Math.random();
65
+ var roleChance = Math.random();
66
+ var activeChance = Math.random();
65
67
  var initialChartTypeIndex = getRandomInteger(0, 2);
66
68
  var activeSinceDate = new Date();
67
69
  var yesterdayDate = new Date();
@@ -80,6 +82,9 @@ var newPerson = function newPerson() {
80
82
  age: Math.floor(Math.random() * 30),
81
83
  visits: Math.floor(Math.random() * 100),
82
84
  progress: Math.floor(Math.random() * 100),
85
+ status: statusChance > 0.66 ? 'relationship' : statusChance > 0.33 ? 'complicated' : 'single',
86
+ role: roleChance > 0.66 ? 'developer' : roleChance > 0.33 ? 'designer' : 'researcher',
87
+ joined: getRandomDateJoined(),
83
88
  someone1: namor.generate({
84
89
  words: 1,
85
90
  numbers: 0
@@ -160,12 +165,11 @@ var newPerson = function newPerson() {
160
165
  words: 1,
161
166
  numbers: 0
162
167
  }),
163
- status: statusChance > 0.66 ? 'relationship' : statusChance > 0.33 ? 'complicated' : 'single',
164
168
  chartType: initialChartTypeIndex === 0 ? inlineEditSelectItems[0] : initialChartTypeIndex === 1 ? inlineEditSelectItems[1] : inlineEditSelectItems[2],
165
- activeSince: statusChance > 0.66 ? activeSinceDate : statusChance > 0.33 ? yesterdayDate : twoDaysAgoDate,
169
+ activeSince: activeChance > 0.66 ? activeSinceDate : activeChance > 0.33 ? yesterdayDate : twoDaysAgoDate,
166
170
  bonus: "$\r".concat(getRandomInteger(100, 500, 2)),
167
- status_icon: renderStatusIcon(statusChance),
168
- doc_link: renderDocLink(statusChance)
171
+ passwordStrength: getPasswordStrength(),
172
+ doc_link: renderDocLink()
169
173
  };
170
174
  };
171
175
  export var newPersonWithTwoLines = function newPersonWithTwoLines() {
@@ -183,4 +187,7 @@ export var newPersonWithTwoLines = function newPersonWithTwoLines() {
183
187
  }),
184
188
  age: Math.floor(Math.random() * 30)
185
189
  };
190
+ };
191
+ var randomDate = function randomDate(start, end) {
192
+ return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
186
193
  };
@@ -51,6 +51,7 @@ var ActionBarOverflowItems = function ActionBarOverflowItems(_ref) {
51
51
  // div equivalent below is based on Carbon 10.25.0
52
52
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenuItem, {
53
53
  className: "".concat(blockClass, "__item"),
54
+ onClick: item.props.onClick,
54
55
  itemText: /*#__PURE__*/_react.default.createElement("div", {
55
56
  className: "".concat(blockClass, "__item-content"),
56
57
  "aria-describedby": "".concat(internalId.current, "-").concat(index, "--item-label")
@@ -187,7 +187,10 @@ var CreateFullPage = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
187
187
  className: "".concat(blockClass, "__modal"),
188
188
  size: "sm",
189
189
  open: modalIsOpen,
190
- "aria-label": modalTitle
190
+ "aria-label": modalTitle,
191
+ onClose: function onClose() {
192
+ setModalIsOpen(false);
193
+ }
191
194
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.ModalHeader, {
192
195
  title: modalTitle
193
196
  }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.ModalBody, null, /*#__PURE__*/_react.default.createElement("p", null, modalDescription)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.ModalFooter, null, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
@@ -15,6 +15,7 @@ var _settings = require("../../../settings");
15
15
  var _pconsole = _interopRequireDefault(require("../../../global/js/utils/pconsole"));
16
16
  var _InlineEditContext = require("./addons/InlineEdit/InlineEditContext");
17
17
  var _DatagridContent = require("./DatagridContent");
18
+ var _FilterProvider = require("./addons/Filtering/FilterProvider");
18
19
  var _excluded = ["datagridState"];
19
20
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
20
21
  var componentName = 'Datagrid';
@@ -30,9 +31,12 @@ var Datagrid = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
30
31
  isFetching = datagridState.isFetching,
31
32
  tableId = datagridState.tableId,
32
33
  leftPanel = datagridState.leftPanel,
33
- className = datagridState.className;
34
+ className = datagridState.className,
35
+ filters = datagridState.state.filters;
34
36
  var rows = DatagridPagination && datagridState.page || datagridState.rows;
35
- return /*#__PURE__*/_react.default.createElement(_InlineEditContext.InlineEditProvider, null, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
37
+ return /*#__PURE__*/_react.default.createElement(_FilterProvider.FilterProvider, {
38
+ filters: filters
39
+ }, /*#__PURE__*/_react.default.createElement(_InlineEditContext.InlineEditProvider, null, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
36
40
  id: tableId,
37
41
  ref: ref,
38
42
  className: (0, _classnames.default)(className, blockClass, withVirtualScroll ? "".concat(blockClass, "__datagridWrap") : "".concat(blockClass, "__datagridWrap-simple"), !isFetching && rows.length === 0 ? "".concat(blockClass, "__empty-state") : '')
@@ -42,7 +46,7 @@ var Datagrid = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
42
46
  datagridState: datagridState
43
47
  })), leftPanel === undefined && /*#__PURE__*/_react.default.createElement(_DatagridContent.DatagridContent, {
44
48
  datagridState: datagridState
45
- })));
49
+ }))));
46
50
  });
47
51
 
48
52
  // Return a placeholder if not released and not enabled by feature flag
@@ -11,8 +11,9 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
11
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
12
  var _react = _interopRequireWildcard(require("react"));
13
13
  var _carbonComponentsReact = require("carbon-components-react");
14
- var _commonColumnIds = require("../common-column-ids");
14
+ var _layout = require("@carbon/layout");
15
15
  var _classnames = _interopRequireDefault(require("classnames"));
16
+ var _commonColumnIds = require("../common-column-ids");
16
17
  var _settings = require("../../../settings");
17
18
  var _InlineEditContext = require("./addons/InlineEdit/InlineEditContext/InlineEditContext");
18
19
  var _getCellIdAsObject = require("./addons/InlineEdit/InlineEditContext/getCellIdAsObject");
@@ -22,22 +23,54 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
22
23
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
23
24
  var TableRow = _carbonComponentsReact.DataTable.TableRow,
24
25
  TableCell = _carbonComponentsReact.DataTable.TableCell;
26
+ var rowHeights = {
27
+ xs: 24,
28
+ sm: 32,
29
+ md: 40,
30
+ lg: 48,
31
+ xl: 64
32
+ };
25
33
 
26
34
  // eslint-disable-next-line react/prop-types
27
35
  var DatagridRow = function DatagridRow(datagridState) {
28
36
  var _cx;
29
- var row = datagridState.row;
37
+ var row = datagridState.row,
38
+ rowSize = datagridState.rowSize,
39
+ withNestedRows = datagridState.withNestedRows;
30
40
  var _useContext = (0, _react.useContext)(_InlineEditContext.InlineEditContext),
31
41
  state = _useContext.state;
32
42
  var activeCellId = state.activeCellId;
33
43
  var activeCellObject = activeCellId && (0, _getCellIdAsObject.getCellIdAsObject)(activeCellId);
44
+ var getVisibleNestedRowCount = function getVisibleNestedRowCount(_ref) {
45
+ var isExpanded = _ref.isExpanded,
46
+ subRows = _ref.subRows;
47
+ var size = 0;
48
+ if (isExpanded && subRows) {
49
+ size += subRows.length;
50
+ subRows.forEach(function (child) {
51
+ size += getVisibleNestedRowCount(child);
52
+ });
53
+ }
54
+ return size;
55
+ };
34
56
  return /*#__PURE__*/_react.default.createElement(TableRow, (0, _extends2.default)({
35
57
  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))
36
58
  }, row.getRowProps(), {
37
59
  key: row.id,
38
60
  onMouseEnter: function onMouseEnter(event) {
61
+ var _hoverRow$style, _hoverRow$style2, _hoverRow$style3;
62
+ if (!withNestedRows) {
63
+ return;
64
+ }
65
+ var subRowCount = getVisibleNestedRowCount(row);
66
+ var totalNestedRowIndicatorHeight = (0, _layout.px)(subRowCount * rowHeights[rowSize]);
39
67
  var hoverRow = event.target.closest(".".concat(blockClass, "__carbon-row-expanded"));
40
68
  hoverRow === null || hoverRow === void 0 ? void 0 : hoverRow.classList.add("".concat(blockClass, "__carbon-row-expanded-hover-active"));
69
+ var rowExpanderButton = hoverRow === null || hoverRow === void 0 ? void 0 : hoverRow.querySelector(".".concat(blockClass, "__row-expander"));
70
+ var rowSizeValue = rowSize || 'lg';
71
+ hoverRow === null || hoverRow === void 0 ? void 0 : (_hoverRow$style = hoverRow.style) === null || _hoverRow$style === void 0 ? void 0 : _hoverRow$style.setProperty("--".concat(blockClass, "--indicator-height"), totalNestedRowIndicatorHeight);
72
+ hoverRow === null || hoverRow === void 0 ? void 0 : (_hoverRow$style2 = hoverRow.style) === null || _hoverRow$style2 === void 0 ? void 0 : _hoverRow$style2.setProperty("--".concat(blockClass, "--row-height"), (0, _layout.px)(rowHeights[rowSizeValue]));
73
+ hoverRow === null || hoverRow === void 0 ? void 0 : (_hoverRow$style3 = hoverRow.style) === null || _hoverRow$style3 === void 0 ? void 0 : _hoverRow$style3.setProperty("--".concat(blockClass, "--indicator-offset-amount"), (0, _layout.px)((rowExpanderButton === null || rowExpanderButton === void 0 ? void 0 : rowExpanderButton.offsetLeft) || 0));
41
74
  },
42
75
  onMouseLeave: function onMouseLeave(event) {
43
76
  var hoverRow = event.target.closest(".".concat(blockClass, "__carbon-row-expanded"));
@@ -15,6 +15,9 @@ 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");
18
21
  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); }
19
22
  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; }
20
23
  /**
@@ -139,13 +142,25 @@ var DatagridToolbar = function DatagridToolbar(datagridState) {
139
142
  ref = _useResizeDetector.ref;
140
143
  var DatagridActions = datagridState.DatagridActions,
141
144
  DatagridBatchActions = datagridState.DatagridBatchActions,
142
- batchActions = datagridState.batchActions;
145
+ batchActions = datagridState.batchActions,
146
+ state = datagridState.state;
147
+ var _useContext = (0, _react.useContext)(_FilterProvider.FilterContext),
148
+ filterTags = _useContext.filterTags,
149
+ EventEmitter = _useContext.EventEmitter;
150
+ var renderFilterSummary = function renderFilterSummary() {
151
+ return state.filters.length > 0 && /*#__PURE__*/_react.default.createElement(_FilterSummary.FilterSummary, {
152
+ filters: filterTags,
153
+ clearFilters: function clearFilters() {
154
+ return EventEmitter.dispatch(_constants.CLEAR_FILTERS);
155
+ }
156
+ });
157
+ };
143
158
  return batchActions && DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
144
159
  ref: ref,
145
160
  className: "".concat(blockClass, "__table-toolbar")
146
- }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref))) : DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
161
+ }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref)), renderFilterSummary()) : DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
147
162
  className: "".concat(blockClass, "__table-toolbar")
148
- }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActions && DatagridBatchActions(datagridState))) : null;
163
+ }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActions && DatagridBatchActions(datagridState)), renderFilterSummary()) : null;
149
164
  };
150
165
  var _default = DatagridToolbar;
151
166
  exports.default = _default;