@carbon/ibm-products 1.59.1 → 1.61.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. package/css/index-full-carbon.css +99 -45
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +4 -4
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +9 -3
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +1 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +89 -30
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +2 -2
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +89 -45
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +3 -3
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/Datagrid/Datagrid/Datagrid.js +2 -1
  18. package/es/components/Datagrid/Datagrid/DatagridContent.js +10 -2
  19. package/es/components/Datagrid/Datagrid/DatagridEmptyBody.js +4 -4
  20. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +2 -2
  21. package/es/components/Datagrid/Datagrid/DatagridSelectAll.js +13 -1
  22. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +3 -15
  23. package/es/components/Datagrid/Datagrid/DraggableElement.js +32 -135
  24. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +14 -38
  25. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +1 -0
  26. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +134 -45
  27. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +7 -6
  28. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +104 -18
  29. package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +1 -0
  30. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +37 -4
  31. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.js +6 -12
  32. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.js +0 -5
  33. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +17 -5
  34. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +4 -3
  35. package/es/components/Datagrid/useFiltering.js +4 -1
  36. package/es/components/Datagrid/useInlineEdit.js +1 -6
  37. package/es/components/Datagrid/useNestedRowExpander.js +22 -9
  38. package/es/components/Datagrid/useRowExpander.js +22 -9
  39. package/es/components/Datagrid/useSortableColumns.js +5 -4
  40. package/es/components/Datagrid/utils/getArgTypes.js +12 -0
  41. package/es/components/EmptyStates/EmptyState.js +1 -1
  42. package/es/components/EmptyStates/ErrorEmptyState/ErrorEmptyState.js +1 -1
  43. package/es/components/EmptyStates/NoDataEmptyState/NoDataEmptyState.js +1 -1
  44. package/es/components/EmptyStates/NoTagsEmptyState/NoTagsEmptyState.js +1 -1
  45. package/es/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.js +1 -1
  46. package/es/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.js +1 -1
  47. package/es/components/EmptyStates/UnauthorizedEmptyState/UnauthorizedEmptyState.js +1 -1
  48. package/es/components/EmptyStates/assets/ErrorIllustration.js +6 -11
  49. package/es/components/EmptyStates/assets/NoDataIllustration.js +6 -11
  50. package/es/components/EmptyStates/assets/NoTagsIllustration.js +6 -12
  51. package/es/components/EmptyStates/assets/NotFoundIllustration.js +6 -12
  52. package/es/components/EmptyStates/assets/NotificationsIllustration.js +6 -12
  53. package/es/components/EmptyStates/assets/UnauthorizedIllustration.js +6 -12
  54. package/es/components/FilterSummary/FilterSummary.js +15 -5
  55. package/es/components/TagSet/TagSet.js +14 -10
  56. package/es/components/TagSet/TagSetOverflow.js +16 -5
  57. package/es/global/js/hooks/useWindowScroll.js +5 -0
  58. package/es/global/js/utils/getNodeTextContent.js +51 -0
  59. package/lib/components/Datagrid/Datagrid/Datagrid.js +2 -1
  60. package/lib/components/Datagrid/Datagrid/DatagridContent.js +9 -1
  61. package/lib/components/Datagrid/Datagrid/DatagridEmptyBody.js +3 -3
  62. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +2 -2
  63. package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +13 -1
  64. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +3 -15
  65. package/lib/components/Datagrid/Datagrid/DraggableElement.js +34 -140
  66. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +17 -38
  67. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +1 -0
  68. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +134 -52
  69. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +7 -6
  70. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +104 -24
  71. package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +4 -2
  72. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +36 -3
  73. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.js +6 -12
  74. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.js +0 -5
  75. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +15 -3
  76. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +7 -3
  77. package/lib/components/Datagrid/useFiltering.js +4 -1
  78. package/lib/components/Datagrid/useInlineEdit.js +1 -6
  79. package/lib/components/Datagrid/useNestedRowExpander.js +24 -9
  80. package/lib/components/Datagrid/useRowExpander.js +24 -9
  81. package/lib/components/Datagrid/useSortableColumns.js +5 -4
  82. package/lib/components/Datagrid/utils/getArgTypes.js +12 -0
  83. package/lib/components/EmptyStates/EmptyState.js +1 -1
  84. package/lib/components/EmptyStates/ErrorEmptyState/ErrorEmptyState.js +1 -1
  85. package/lib/components/EmptyStates/NoDataEmptyState/NoDataEmptyState.js +1 -1
  86. package/lib/components/EmptyStates/NoTagsEmptyState/NoTagsEmptyState.js +1 -1
  87. package/lib/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.js +1 -1
  88. package/lib/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.js +1 -1
  89. package/lib/components/EmptyStates/UnauthorizedEmptyState/UnauthorizedEmptyState.js +1 -1
  90. package/lib/components/EmptyStates/assets/ErrorIllustration.js +6 -11
  91. package/lib/components/EmptyStates/assets/NoDataIllustration.js +6 -11
  92. package/lib/components/EmptyStates/assets/NoTagsIllustration.js +6 -12
  93. package/lib/components/EmptyStates/assets/NotFoundIllustration.js +6 -12
  94. package/lib/components/EmptyStates/assets/NotificationsIllustration.js +6 -12
  95. package/lib/components/EmptyStates/assets/UnauthorizedIllustration.js +6 -12
  96. package/lib/components/FilterSummary/FilterSummary.js +15 -12
  97. package/lib/components/TagSet/TagSet.js +13 -9
  98. package/lib/components/TagSet/TagSetOverflow.js +16 -5
  99. package/lib/global/js/hooks/useWindowScroll.js +6 -0
  100. package/lib/global/js/utils/getNodeTextContent.js +59 -0
  101. package/package.json +8 -7
  102. package/scss/components/Datagrid/_datagrid.scss +2 -1
  103. package/scss/components/Datagrid/styles/_draggableElement.scss +44 -20
  104. package/scss/components/Datagrid/styles/_useInlineEdit.scss +7 -11
  105. package/scss/components/Datagrid/styles/addons/_CustomizeColumnsTearsheet.scss +0 -1
  106. package/scss/components/Datagrid/styles/addons/_RowSizeDropdown.scss +42 -1
  107. package/scss/components/TagSet/_tag-set.scss +13 -3
  108. package/es/components/Datagrid/utils/getColTitle.js +0 -25
  109. package/lib/components/Datagrid/utils/getColTitle.js +0 -32
@@ -1,39 +1,31 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.default = void 0;
8
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
- var _react = _interopRequireDefault(require("react"));
11
+ var _react = _interopRequireWildcard(require("react"));
11
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
- var _reactDnd = require("react-dnd");
13
- var _reactDndHtml5Backend = require("react-dnd-html5-backend");
14
13
  var _carbonComponentsReact = require("carbon-components-react");
15
14
  var _immutabilityHelper = _interopRequireDefault(require("immutability-helper"));
16
15
  var _settings = require("../../../../../settings");
17
16
  var _classnames = _interopRequireDefault(require("classnames"));
18
17
  var _DraggableItemsList = require("./DraggableItemsList");
18
+ var _uuidv = _interopRequireDefault(require("../../../../../global/js/utils/uuidv4"));
19
+ 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); }
20
+ 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; }
19
21
  /**
20
- * Copyright IBM Corp. 2022, 2022
22
+ * Copyright IBM Corp. 2022, 2023
21
23
  *
22
24
  * This source code is licensed under the Apache-2.0 license found in the
23
25
  * LICENSE file in the root directory of this source tree.
24
26
  */
25
27
 
26
28
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
27
- var getNextIndex = function getNextIndex(array, currentIndex, key) {
28
- var newIndex = -1;
29
- if (key === 'ArrowUp') {
30
- newIndex = currentIndex - 1 >= 0 ? currentIndex - 1 : array.length - 1;
31
- }
32
- if (key === 'ArrowDown') {
33
- newIndex = currentIndex + 1 < array.length ? currentIndex + 1 : 0;
34
- }
35
- return newIndex;
36
- };
37
29
  var Columns = function Columns(_ref) {
38
30
  var getVisibleColumnsCount = _ref.getVisibleColumnsCount,
39
31
  filterString = _ref.filterString,
@@ -43,36 +35,26 @@ var Columns = function Columns(_ref) {
43
35
  assistiveTextInstructionsLabel = _ref.assistiveTextInstructionsLabel,
44
36
  assistiveTextDisabledInstructionsLabel = _ref.assistiveTextDisabledInstructionsLabel,
45
37
  selectAllLabel = _ref.selectAllLabel;
38
+ var listId = (0, _react.useRef)((0, _uuidv.default)()); // keep id between renders
39
+ var listRef = (0, _react.useRef)(null);
46
40
  var _React$useState = _react.default.useState(''),
47
41
  _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
48
42
  ariaRegionText = _React$useState2[0],
49
43
  setAriaRegionText = _React$useState2[1];
50
- var _React$useState3 = _react.default.useState(-1),
51
- _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
52
- focusIndex = _React$useState4[0],
53
- setFocusIndex = _React$useState4[1];
54
- var moveElement = _react.default.useCallback(function (dragIndex, hoverIndex) {
55
- var dragCard = columns[dragIndex];
44
+ // after a drag/drop action set the columns
45
+ var moveElement = _react.default.useCallback(function (from, to) {
46
+ var fromCol = columns[from];
56
47
  setColumnsObject((0, _immutabilityHelper.default)(columns, {
57
- $splice: [[dragIndex, 1], [hoverIndex, 0, dragCard]]
48
+ $splice: [[from, 1], [to, 0, fromCol]]
58
49
  }));
59
50
  }, [columns, setColumnsObject]);
60
51
  return /*#__PURE__*/_react.default.createElement("div", {
61
- className: "".concat(blockClass, "__customize-columns-column-list")
62
- }, /*#__PURE__*/_react.default.createElement(_reactDnd.DndProvider, {
63
- backend: _reactDndHtml5Backend.HTML5Backend
52
+ className: "".concat(blockClass, "__customize-columns-column-list"),
53
+ ref: listRef
64
54
  }, /*#__PURE__*/_react.default.createElement("ol", {
65
55
  className: "".concat(blockClass, "__customize-columns-column-list--focus"),
66
56
  role: "listbox",
67
57
  "aria-describedby": "".concat(blockClass, "__customize-columns--instructions"),
68
- onKeyDown: function onKeyDown(e) {
69
- var nextIndex = getNextIndex(columns, focusIndex, e.key);
70
- if (nextIndex >= 0) {
71
- setFocusIndex(nextIndex);
72
- e.preventDefault();
73
- e.stopPropagation();
74
- }
75
- },
76
58
  tabIndex: 0
77
59
  }, /*#__PURE__*/_react.default.createElement("span", {
78
60
  "aria-live": "assertive",
@@ -94,16 +76,13 @@ var Columns = function Columns(_ref) {
94
76
  id: "".concat(blockClass, "__customization-column-select-all"),
95
77
  labelText: selectAllLabel
96
78
  })), /*#__PURE__*/_react.default.createElement(_DraggableItemsList.DraggableItemsList, {
79
+ id: listId.current,
97
80
  columns: columns,
98
81
  filterString: filterString,
99
- focusIndex: focusIndex,
100
- getNextIndex: getNextIndex,
101
82
  moveElement: moveElement,
102
- onSelectColumn: onSelectColumn,
103
83
  setAriaRegionText: setAriaRegionText,
104
- setColumnsObject: setColumnsObject,
105
- setFocusIndex: setFocusIndex
106
- }))));
84
+ onSelectColumn: onSelectColumn
85
+ })));
107
86
  };
108
87
  Columns.propTypes = {
109
88
  assistiveTextDisabledInstructionsLabel: _propTypes.default.string,
@@ -77,6 +77,7 @@ var CustomizeColumnsTearsheet = function CustomizeColumnsTearsheet(_ref) {
77
77
  isDirty = _useState10[0],
78
78
  setIsDirty = _useState10[1];
79
79
  var onRequestClose = function onRequestClose() {
80
+ setColumnObjects(columnDefinitions);
80
81
  setIsTearsheetOpen(false);
81
82
  };
82
83
  var onRequestSubmit = function onRequestSubmit() {
@@ -5,103 +5,185 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.DraggableItemsList = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
9
  var _react = _interopRequireDefault(require("react"));
9
10
  var _propTypes = require("prop-types");
10
11
  var _carbonComponentsReact = require("carbon-components-react");
11
12
  var _common = require("./common");
12
13
  var _DraggableElement = _interopRequireDefault(require("../../DraggableElement"));
13
14
  var _settings = require("../../../../../settings");
14
- var _getColTitle2 = _interopRequireDefault(require("../../../utils/getColTitle"));
15
- /**
16
- * Copyright IBM Corp. 2023, 2023
17
- *
18
- * This source code is licensed under the Apache-2.0 license found in the
19
- * LICENSE file in the root directory of this source tree.
20
- */
21
-
15
+ var _getNodeTextContent = require("../../../../../global/js/utils/getNodeTextContent");
16
+ var _core = require("@dnd-kit/core");
17
+ var _sortable = require("@dnd-kit/sortable");
18
+ 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; }
19
+ 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) { (0, _defineProperty2.default)(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; }
22
20
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
21
+ var matchedColsById = function matchedColsById(col1, col2) {
22
+ return col1 && col2 && col1.id === col2.id;
23
+ };
23
24
  var DraggableItemsList = function DraggableItemsList(_ref) {
24
25
  var columns = _ref.columns,
25
26
  filterString = _ref.filterString,
26
- focusIndex = _ref.focusIndex,
27
- getNextIndex = _ref.getNextIndex,
27
+ id = _ref.id,
28
28
  moveElement = _ref.moveElement,
29
29
  onSelectColumn = _ref.onSelectColumn,
30
- setAriaRegionText = _ref.setAriaRegionText,
31
- setColumnsObject = _ref.setColumnsObject,
32
- setFocusIndex = _ref.setFocusIndex;
33
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, columns
30
+ setAriaRegionText = _ref.setAriaRegionText;
31
+ var draggableClass = "".concat(blockClass, "__draggable-item");
32
+ var visibleCols = columns
34
33
  // hide the columns without Header, e.g the sticky actions, spacer
35
34
  .filter(function (colDef) {
36
- return !!(0, _getColTitle2.default)(colDef);
35
+ return (0, _getNodeTextContent.getNodeTextContent)(colDef.Header).trim().length !== 0;
37
36
  }).filter(Boolean).filter(function (colDef) {
38
37
  return !colDef.isAction;
39
38
  }).filter(function (colDef) {
40
- var _getColTitle;
41
- return filterString.length === 0 || ((_getColTitle = (0, _getColTitle2.default)(colDef)) === null || _getColTitle === void 0 ? void 0 : _getColTitle.toLowerCase().includes(filterString)) && colDef.id !== 'spacer';
42
- }).map(function (colDef, i) {
43
- var colHeaderTitle = (0, _getColTitle2.default)(colDef);
39
+ return colDef.id !== 'spacer';
40
+ }).filter(function (colDef) {
41
+ return filterString.length === 0 || (0, _getNodeTextContent.getNodeTextContent)(colDef.Header).toLowerCase().includes(filterString);
42
+ });
43
+
44
+ // let localRefCopy;
45
+ var handleDragEnd = function handleDragEnd(event) {
46
+ var active = event.active,
47
+ over = event.over;
48
+ var fromVisibleIndex = columns.findIndex(function (col) {
49
+ return matchedColsById(col, active);
50
+ });
51
+ var toVisibleIndex = columns.findIndex(function (col) {
52
+ return matchedColsById(col, over);
53
+ });
54
+ var colTitle = (0, _getNodeTextContent.getNodeTextContent)(visibleCols[fromVisibleIndex].Header);
55
+ setAriaRegionText("".concat(colTitle, " dropped. New position ").concat(toVisibleIndex + 1, " of ").concat(visibleCols.length, "."));
56
+ var fromIndex = columns.findIndex(function (col) {
57
+ return matchedColsById(col, active);
58
+ });
59
+ var toIndex = columns.findIndex(function (col) {
60
+ return matchedColsById(col, over);
61
+ });
62
+ moveElement(fromIndex, toIndex);
63
+ };
64
+ var handleDragStart = function handleDragStart(event) {
65
+ var active = event.active;
66
+ var fromIndex = visibleCols.findIndex(function (col) {
67
+ return matchedColsById(col, active);
68
+ });
69
+ var colTitle = (0, _getNodeTextContent.getNodeTextContent)(visibleCols[fromIndex].Header);
70
+ setAriaRegionText("".concat(colTitle, " grabbed. Current position ").concat(fromIndex + 1, " of ").concat(visibleCols.length, "."));
71
+ };
72
+ var handleDragUpdate = function handleDragUpdate(event) {
73
+ var active = event.active,
74
+ over = event.over;
75
+ var fromIndex = visibleCols.findIndex(function (col) {
76
+ return matchedColsById(col, active);
77
+ });
78
+ var toIndex = visibleCols.findIndex(function (col) {
79
+ return matchedColsById(col, over);
80
+ });
81
+ var colTitle = (0, _getNodeTextContent.getNodeTextContent)(visibleCols[fromIndex].Header);
82
+ setAriaRegionText("".concat(colTitle, " grabbed. Original position ").concat(fromIndex + 1, ", new position ").concat(toIndex + 1, " of ").concat(visibleCols.length, "."));
83
+ };
84
+ var pointerSensor = (0, _core.useSensor)(_core.PointerSensor, {
85
+ // Require the mouse to move by 10 pixels before activating
86
+ activationConstraint: {
87
+ distance: 4
88
+ }
89
+ });
90
+ var keyboardSensor = (0, _core.useSensor)(_core.KeyboardSensor, {
91
+ coordinateGetter: function coordinateGetter(event, args) {
92
+ var currentCoordinates = args.currentCoordinates;
93
+ var target = event.target;
94
+ while (target && !target.classList.contains(draggableClass)) {
95
+ target = target.parentNode;
96
+ }
97
+ var delta = target.offsetHeight;
98
+ switch (event.code) {
99
+ case 'ArrowRight':
100
+ case 'ArrowLeft':
101
+ // ignore right and left
102
+ return currentCoordinates;
103
+ case 'ArrowUp':
104
+ return _objectSpread(_objectSpread({}, currentCoordinates), {}, {
105
+ y: currentCoordinates.y - delta
106
+ });
107
+ case 'ArrowDown':
108
+ return _objectSpread(_objectSpread({}, currentCoordinates), {}, {
109
+ y: currentCoordinates.y + delta
110
+ });
111
+ case 'Space':
112
+ break;
113
+ }
114
+ }
115
+ });
116
+ var sensors = (0, _core.useSensors)(pointerSensor, keyboardSensor);
117
+ var handleCheckboxKeydown = function handleCheckboxKeydown(event, colDef) {
118
+ if (event.code === 'Space') {
119
+ onSelectColumn(colDef, !(0, _common.isColumnVisible)(colDef));
120
+ event.preventDefault();
121
+ event.stopPropagation();
122
+ return false;
123
+ }
124
+ };
125
+ return /*#__PURE__*/_react.default.createElement(_core.DndContext, {
126
+ collisionDetection: _core.closestCenter,
127
+ onDragEnd: handleDragEnd,
128
+ onDragStart: handleDragStart,
129
+ onDragMove: handleDragUpdate,
130
+ sensors: sensors
131
+ }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
132
+ className: "".concat(blockClass, "__draggable-underlay"),
133
+ "aria-hidden": "true",
134
+ key: "draggable-underlay-".concat(id)
135
+ }, visibleCols.map(function (colDef) {
136
+ return /*#__PURE__*/_react.default.createElement("div", {
137
+ className: "".concat(blockClass, "__draggable-underlay-item"),
138
+ key: colDef.id
139
+ });
140
+ })), /*#__PURE__*/_react.default.createElement(_sortable.SortableContext, {
141
+ items: visibleCols,
142
+ strategy: _sortable.verticalListSortingStrategy
143
+ }, visibleCols.map(function (colDef) {
144
+ var colHeaderTitle = (0, _getNodeTextContent.getNodeTextContent)(colDef.Header);
44
145
  var searchString = new RegExp('(' + filterString + ')');
45
146
  var res = filterString.length ? colHeaderTitle.toLowerCase().split(searchString) : null;
46
147
  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;
47
148
  var highlightedText = res !== null ? res[0] === '' ? "<strong>".concat(firstWord, "</strong>") + res[2] : firstWord + "<strong>".concat(res[1], "</strong>") + res[2] : colHeaderTitle;
48
149
  var isFrozenColumn = !!colDef.sticky;
49
150
  var listContents = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, {
50
- wrapperClassName: "".concat(blockClass, "__customize-columns-checkbox-wrapper"),
51
151
  checked: (0, _common.isColumnVisible)(colDef),
52
152
  disabled: isFrozenColumn,
53
- onChange: onSelectColumn.bind(null, colDef),
153
+ onChange: function onChange(checked) {
154
+ return onSelectColumn(colDef, checked);
155
+ },
54
156
  id: "".concat(blockClass, "__customization-column-").concat(colDef.id),
55
157
  labelText: colHeaderTitle,
56
158
  title: colHeaderTitle,
57
159
  className: "".concat(blockClass, "__customize-columns-checkbox"),
58
- hideLabel: true
160
+ hideLabel: true,
161
+ onKeyDown: function onKeyDown(event) {
162
+ return handleCheckboxKeydown(event, colDef);
163
+ }
59
164
  }), /*#__PURE__*/_react.default.createElement("div", {
60
165
  dangerouslySetInnerHTML: {
61
166
  __html: highlightedText
62
- }
167
+ },
168
+ className: "".concat(blockClass, "__customize-columns-checkbox-visible-label")
63
169
  }));
64
170
  return /*#__PURE__*/_react.default.createElement(_DraggableElement.default, {
171
+ classList: draggableClass,
65
172
  key: colDef.id,
66
- index: i,
67
- listData: columns,
68
- setListData: setColumnsObject,
69
- id: "dnd-datagrid-columns-".concat(colDef.id),
70
- type: "column-customization",
173
+ id: colDef.id,
71
174
  disabled: filterString.length > 0 || isFrozenColumn,
72
175
  ariaLabel: colHeaderTitle,
73
- onGrab: setAriaRegionText,
74
- isFocused: focusIndex === i,
75
- moveElement: moveElement,
76
- onArrowKeyDown: function onArrowKeyDown(e, isGrabbed, currentIndex) {
77
- if (isGrabbed) {
78
- var _columns$nextIndex;
79
- var nextIndex = getNextIndex(columns, currentIndex, e.key);
80
- e.preventDefault();
81
- e.stopPropagation();
82
- if (nextIndex >= 0 && !((_columns$nextIndex = columns[nextIndex]) !== null && _columns$nextIndex !== void 0 && _columns$nextIndex.sticky)) {
83
- setFocusIndex(nextIndex);
84
- moveElement(currentIndex, nextIndex);
85
- e.target.scrollIntoView({
86
- block: 'center'
87
- });
88
- }
89
- }
90
- },
91
176
  isSticky: isFrozenColumn,
92
177
  selected: (0, _common.isColumnVisible)(colDef)
93
178
  }, listContents);
94
- }));
179
+ }))));
95
180
  };
96
181
  exports.DraggableItemsList = DraggableItemsList;
97
182
  DraggableItemsList.propTypes = {
98
183
  columns: _propTypes.PropTypes.array.isRequired,
99
184
  filterString: _propTypes.PropTypes.string.isRequired,
100
- focusIndex: _propTypes.PropTypes.number.isRequired,
101
- getNextIndex: _propTypes.PropTypes.func.isRequired,
185
+ id: _propTypes.PropTypes.string.isRequired,
102
186
  moveElement: _propTypes.PropTypes.func.isRequired,
103
187
  onSelectColumn: _propTypes.PropTypes.func.isRequired,
104
- setAriaRegionText: _propTypes.PropTypes.func.isRequired,
105
- setColumnsObject: _propTypes.PropTypes.func.isRequired,
106
- setFocusIndex: _propTypes.PropTypes.func.isRequired
188
+ setAriaRegionText: _propTypes.PropTypes.func.isRequired
107
189
  };
@@ -71,13 +71,19 @@ var FilterPanel = function FilterPanel(_ref) {
71
71
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
72
72
  showDividerLine = _useState2[0],
73
73
  setShowDividerLine = _useState2[1];
74
+
75
+ /** Context */
76
+ var _useContext = (0, _react.useContext)(_.FilterContext),
77
+ panelOpen = _useContext.panelOpen,
78
+ setPanelOpen = _useContext.setPanelOpen;
74
79
  var _useFilters = (0, _hooks.useFilters)({
75
80
  updateMethod: updateMethod,
76
81
  filters: filterSections,
77
82
  setAllFilters: setAllFilters,
78
83
  variation: _constants.PANEL,
79
84
  reactTableFiltersState: reactTableFiltersState,
80
- onCancel: onCancel
85
+ onCancel: onCancel,
86
+ panelOpen: panelOpen
81
87
  }),
82
88
  filtersState = _useFilters.filtersState,
83
89
  prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
@@ -109,11 +115,6 @@ var FilterPanel = function FilterPanel(_ref) {
109
115
  return updateMethod === _constants.BATCH;
110
116
  }, [updateMethod]);
111
117
 
112
- /** Context */
113
- var _useContext = (0, _react.useContext)(_.FilterContext),
114
- panelOpen = _useContext.panelOpen,
115
- setPanelOpen = _useContext.setPanelOpen;
116
-
117
118
  /** Methods */
118
119
  var closePanel = function closePanel() {
119
120
  cancel();
@@ -5,20 +5,17 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.FilterProvider = exports.FilterContext = void 0;
8
+ exports.clearSingleFilter = exports.FilterProvider = exports.FilterContext = void 0;
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
12
  var _react = _interopRequireWildcard(require("react"));
11
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
14
  var _constants = require("./constants");
13
15
  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); }
14
16
  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; }
15
- /**
16
- * Copyright IBM Corp. 2022, 2022
17
- *
18
- * This source code is licensed under the Apache-2.0 license found in the
19
- * LICENSE file in the root directory of this source tree.
20
- */
21
-
17
+ 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; }
18
+ 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) { (0, _defineProperty2.default)(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; }
22
19
  var FilterContext = /*#__PURE__*/(0, _react.createContext)();
23
20
  exports.FilterContext = FilterContext;
24
21
  var EventEmitter = {
@@ -39,42 +36,124 @@ var EventEmitter = {
39
36
  }
40
37
  }
41
38
  };
42
- var prepareFiltersForTags = function prepareFiltersForTags(filters) {
39
+ var removeFilterItem = function removeFilterItem(state, index) {
40
+ return state.splice(index, 1);
41
+ };
42
+ var updateFilterState = function updateFilterState(state, type, value) {
43
+ if (type === _constants.CHECKBOX) {
44
+ return;
45
+ }
46
+ if (type === _constants.DATE) {
47
+ var _filterTagIndex = state.findIndex(function (val) {
48
+ return formatDateRange(val.value[0], val.value[1]) === formatDateRange(value[0], value[1]);
49
+ });
50
+ return removeFilterItem(state, _filterTagIndex);
51
+ }
52
+ var filterTagIndex = state.findIndex(function (val) {
53
+ return val.value === value;
54
+ });
55
+ return removeFilterItem(state, filterTagIndex);
56
+ };
57
+ var clearSingleFilter = function clearSingleFilter(_ref, setAllFilters, state) {
58
+ var key = _ref.key,
59
+ value = _ref.value;
60
+ var tempState = (0, _toConsumableArray2.default)(state.filters);
61
+ tempState.forEach(function (f, filterIndex) {
62
+ if (f.id === key) {
63
+ var filterValues = f.value;
64
+ var filterType = f.type;
65
+ updateFilterState(tempState, filterType, value);
66
+ if (filterType === _constants.CHECKBOX) {
67
+ /**
68
+ When all checkboxes of a group are all unselected the value still exists in the filtersObjectArray
69
+ This checks if all the checkboxes are selected = false and removes it from the array
70
+ */
71
+ var valueIndex = filterValues.findIndex(function (val) {
72
+ return val.id === value;
73
+ });
74
+ filterValues[valueIndex].selected = false;
75
+ var updatedFilterObject = _objectSpread(_objectSpread({}, f), {}, {
76
+ value: (0, _toConsumableArray2.default)(filterValues)
77
+ });
78
+ tempState[filterIndex] = updatedFilterObject;
79
+ var index = tempState.findIndex(function (filter) {
80
+ return filter.id === key;
81
+ });
82
+
83
+ // If all the selected state is false remove from array
84
+ var shouldRemoveFromArray = tempState[index].value.every(function (val) {
85
+ return val.selected === false;
86
+ });
87
+ if (shouldRemoveFromArray) {
88
+ removeFilterItem(tempState, index);
89
+ }
90
+ }
91
+ }
92
+ });
93
+ setAllFilters(tempState);
94
+ };
95
+ exports.clearSingleFilter = clearSingleFilter;
96
+ var handleSingleFilterRemoval = function handleSingleFilterRemoval(key, value) {
97
+ EventEmitter.dispatch(_constants.CLEAR_SINGLE_FILTER, {
98
+ key: key,
99
+ value: value
100
+ });
101
+ };
102
+ var formatDateRange = function formatDateRange(startDate, endDate) {
103
+ var startDateObj = new Date(startDate);
104
+ var endDateObj = new Date(endDate);
105
+ return "".concat(startDateObj.toLocaleDateString(), " - ").concat(endDateObj.toLocaleDateString());
106
+ };
107
+ var prepareFiltersForTags = function prepareFiltersForTags(filters, renderDateLabel) {
43
108
  var tags = [];
44
- filters.forEach(function (_ref) {
45
- var id = _ref.id,
46
- type = _ref.type,
47
- value = _ref.value;
109
+ filters.forEach(function (_ref2) {
110
+ var id = _ref2.id,
111
+ type = _ref2.type,
112
+ value = _ref2.value;
113
+ var sharedFilterProps = {
114
+ filter: true,
115
+ onClose: function onClose() {
116
+ return handleSingleFilterRemoval(id, value);
117
+ }
118
+ };
48
119
  if (type === _constants.DROPDOWN || type === _constants.RADIO || type === _constants.NUMBER) {
49
- tags.push({
120
+ tags.push(_objectSpread({
50
121
  key: id,
51
122
  value: value
52
- });
123
+ }, sharedFilterProps));
53
124
  } else if (type === _constants.DATE) {
125
+ var _renderDateLabel;
54
126
  var _value = (0, _slicedToArray2.default)(value, 2),
55
127
  startDate = _value[0],
56
128
  endDate = _value[1];
57
- tags.push({
129
+ tags.push(_objectSpread({
58
130
  key: id,
59
- value: "".concat(startDate.toLocaleDateString(), " - ").concat(endDate.toLocaleDateString())
60
- });
131
+ value: (_renderDateLabel = renderDateLabel === null || renderDateLabel === void 0 ? void 0 : renderDateLabel(startDate, endDate)) !== null && _renderDateLabel !== void 0 ? _renderDateLabel : formatDateRange(startDate, endDate)
132
+ }, sharedFilterProps));
61
133
  } else if (type === _constants.CHECKBOX) {
62
134
  value.forEach(function (checkbox) {
63
135
  if (checkbox.selected) {
64
- tags.push({
136
+ tags.push(_objectSpread(_objectSpread({
65
137
  key: id,
66
138
  value: checkbox.value
67
- });
139
+ }, sharedFilterProps), {}, {
140
+ onClose: function onClose() {
141
+ return handleSingleFilterRemoval(id, checkbox.value);
142
+ }
143
+ }));
68
144
  }
69
145
  });
70
146
  }
71
147
  });
72
148
  return tags;
73
149
  };
74
- var FilterProvider = function FilterProvider(_ref2) {
75
- var children = _ref2.children,
76
- filters = _ref2.filters;
77
- var filterTags = prepareFiltersForTags(filters);
150
+ var FilterProvider = function FilterProvider(_ref3) {
151
+ var children = _ref3.children,
152
+ filters = _ref3.filters,
153
+ filterProps = _ref3.filterProps;
154
+ var _ref4 = filterProps || {},
155
+ renderDateLabel = _ref4.renderDateLabel;
156
+ var filterTags = prepareFiltersForTags(filters, renderDateLabel);
78
157
  var _useState = (0, _react.useState)(false),
79
158
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
80
159
  panelOpen = _useState2[0],
@@ -92,5 +171,6 @@ var FilterProvider = function FilterProvider(_ref2) {
92
171
  exports.FilterProvider = FilterProvider;
93
172
  FilterProvider.propTypes = {
94
173
  children: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.node), _propTypes.default.node]).isRequired,
174
+ filterProps: _propTypes.default.object,
95
175
  filters: _propTypes.default.arrayOf(_propTypes.default.object).isRequired
96
176
  };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.RADIO = exports.PANEL_WIDTH = exports.PANEL = exports.NUMBER = exports.INSTANT = exports.FLYOUT = exports.DROPDOWN = exports.DATE = exports.CLEAR_FILTERS = exports.CHECKBOX = exports.BATCH = exports.ACTION_SET_HEIGHT = void 0;
6
+ exports.RADIO = exports.PANEL_WIDTH = exports.PANEL = exports.NUMBER = exports.INSTANT = exports.FLYOUT = exports.DROPDOWN = exports.DATE = exports.CLEAR_SINGLE_FILTER = exports.CLEAR_FILTERS = exports.CHECKBOX = exports.BATCH = exports.ACTION_SET_HEIGHT = void 0;
7
7
  /**
8
8
  * Copyright IBM Corp. 2022, 2022
9
9
  *
@@ -36,9 +36,11 @@ var DROPDOWN = 'dropdown';
36
36
  /** Constants for event emitters */
37
37
  exports.DROPDOWN = DROPDOWN;
38
38
  var CLEAR_FILTERS = 'clearFilters';
39
+ exports.CLEAR_FILTERS = CLEAR_FILTERS;
40
+ var CLEAR_SINGLE_FILTER = 'clearSingleFilter';
39
41
 
40
42
  /** Constants for panel dimensions */
41
- exports.CLEAR_FILTERS = CLEAR_FILTERS;
43
+ exports.CLEAR_SINGLE_FILTER = CLEAR_SINGLE_FILTER;
42
44
  var PANEL_WIDTH = 320;
43
45
  exports.PANEL_WIDTH = PANEL_WIDTH;
44
46
  var ACTION_SET_HEIGHT = 64;