@carbon/ibm-products 1.47.0 → 1.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/css/index-full-carbon.css +1424 -29
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +5 -5
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +37 -15
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +2 -2
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +1424 -29
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +5 -5
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +1424 -29
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +5 -5
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/AddSelect/AddSelectBreadcrumbs.js +6 -4
  18. package/es/components/AddSelect/AddSelectList.js +15 -26
  19. package/es/components/CreateFullPage/CreateFullPage.js +3 -2
  20. package/es/components/Datagrid/Datagrid/DatagridContent.js +1 -1
  21. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +1 -1
  22. package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +14 -5
  23. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +6 -3
  24. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +15 -56
  25. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +5 -8
  26. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +105 -0
  27. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +1 -0
  28. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +17 -5
  29. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +11 -0
  30. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +8 -8
  31. package/es/components/Datagrid/index.js +8 -7
  32. package/es/components/Datagrid/useOnRowClick.js +3 -3
  33. package/es/components/Datagrid/useSortableColumns.js +26 -9
  34. package/es/components/Datagrid/utils/getAutoSizedColumnWidth.js +27 -0
  35. package/es/components/InlineEditV2/InlineEditV2.js +6 -3
  36. package/es/components/NonLinearReading/NonLinearReading.js +87 -0
  37. package/es/components/NonLinearReading/index.js +8 -0
  38. package/es/components/SidePanel/SidePanel.js +3 -4
  39. package/es/components/index.js +3 -2
  40. package/es/global/js/package-settings.js +3 -1
  41. package/es/global/js/utils/story-helper.js +9 -0
  42. package/lib/components/AddSelect/AddSelectBreadcrumbs.js +6 -4
  43. package/lib/components/AddSelect/AddSelectList.js +14 -25
  44. package/lib/components/CreateFullPage/CreateFullPage.js +2 -1
  45. package/lib/components/Datagrid/Datagrid/DatagridContent.js +1 -1
  46. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +1 -1
  47. package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +13 -4
  48. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +6 -3
  49. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +15 -56
  50. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +5 -8
  51. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +113 -0
  52. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +1 -0
  53. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +17 -5
  54. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +11 -0
  55. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +3 -1
  56. package/lib/components/Datagrid/index.js +8 -1
  57. package/lib/components/Datagrid/useOnRowClick.js +3 -3
  58. package/lib/components/Datagrid/useSortableColumns.js +26 -9
  59. package/lib/components/Datagrid/utils/getAutoSizedColumnWidth.js +35 -0
  60. package/lib/components/InlineEditV2/InlineEditV2.js +6 -3
  61. package/lib/components/NonLinearReading/NonLinearReading.js +90 -0
  62. package/lib/components/NonLinearReading/index.js +12 -0
  63. package/lib/components/SidePanel/SidePanel.js +2 -3
  64. package/lib/components/index.js +14 -1
  65. package/lib/global/js/package-settings.js +3 -1
  66. package/lib/global/js/utils/story-helper.js +12 -2
  67. package/package.json +2 -2
  68. package/scss/components/AddSelect/_add-select.scss +0 -10
  69. package/scss/components/Datagrid/styles/_datagrid.scss +5 -1
  70. package/scss/components/Datagrid/styles/_useSortableColumns.scss +8 -4
  71. package/scss/components/InlineEditV1/_inline-edit-v1.scss +1 -5
  72. package/scss/components/InlineEditV2/_inline-edit-v2.scss +41 -3
  73. package/scss/components/NonLinearReading/_index.scss +8 -0
  74. package/scss/components/NonLinearReading/_non-linear-reading.scss +157 -0
  75. package/scss/components/NonLinearReading/_storybook-styles.scss +13 -0
  76. package/scss/components/SidePanel/_side-panel.scss +7 -15
  77. package/scss/components/_index.scss +1 -0
@@ -8,7 +8,7 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
8
8
  //
9
9
 
10
10
  import React from 'react';
11
- import { Button, Checkbox, Dropdown, RadioButton, StructuredListRow, StructuredListWrapper, StructuredListBody } from 'carbon-components-react';
11
+ import { Button, Checkbox, Dropdown, RadioButton } from 'carbon-components-react';
12
12
  import { ChevronRight16, View16 } from '@carbon/icons-react';
13
13
  import PropTypes from 'prop-types';
14
14
  import cx from 'classnames';
@@ -99,33 +99,22 @@ export var AddSelectList = function AddSelectList(_ref) {
99
99
  };
100
100
  return /*#__PURE__*/React.createElement("div", {
101
101
  className: cx("".concat(blockClass, "-wrapper"), _defineProperty({}, "".concat(blockClass, "-wrapper-multi"), multi))
102
- }, /*#__PURE__*/React.createElement(StructuredListWrapper, {
103
- selection: true,
102
+ }, /*#__PURE__*/React.createElement("div", {
104
103
  className: "".concat(blockClass)
105
- }, /*#__PURE__*/React.createElement(StructuredListBody, null, filteredItems.map(function (item) {
104
+ }, /*#__PURE__*/React.createElement("div", {
105
+ className: "".concat(blockClass, "-body")
106
+ }, filteredItems.map(function (item) {
106
107
  var _cx2;
107
- return /*#__PURE__*/React.createElement(StructuredListRow, {
108
+ return /*#__PURE__*/React.createElement("div", {
108
109
  key: item.id,
109
- className: cx("".concat(blockClass, "-row"), (_cx2 = {}, _defineProperty(_cx2, "".concat(blockClass, "-row--selected"), isSelected(item.id)), _defineProperty(_cx2, "".concat(blockClass, "-row-meta--selected"), isInMetaPanel(item.id)), _cx2)),
110
- onClick: function onClick(evt) {
111
- return metaPanelHandler(item, evt);
112
- },
113
- label: true
110
+ className: cx("".concat(blockClass, "-row"), (_cx2 = {}, _defineProperty(_cx2, "".concat(blockClass, "-row--selected"), isSelected(item.id)), _defineProperty(_cx2, "".concat(blockClass, "-row-meta--selected"), isInMetaPanel(item.id)), _cx2))
114
111
  }, /*#__PURE__*/React.createElement("div", {
115
112
  className: "".concat(blockClass, "-cell")
116
113
  }, /*#__PURE__*/React.createElement("div", {
117
114
  className: "".concat(blockClass, "-cell-wrapper")
118
115
  }, multi ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
119
116
  className: "".concat(blockClass, "-checkbox")
120
- },
121
- /*#__PURE__*/
122
- // hacky way to prevent checkbox from triggering the meta onclick handler
123
- // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
124
- React.createElement("div", {
125
- onClick: function onClick(event) {
126
- return event.stopPropagation();
127
- }
128
- }, /*#__PURE__*/React.createElement(Checkbox, {
117
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Checkbox, {
129
118
  onChange: function onChange(value, id) {
130
119
  return handleMultiSelection(value, id);
131
120
  },
@@ -147,10 +136,9 @@ export var AddSelectList = function AddSelectList(_ref) {
147
136
  id: "add-select-modifier-".concat(item.id),
148
137
  type: "inline",
149
138
  items: modifiers.options,
150
- light: true,
151
139
  label: modifiers.label,
152
140
  disabled: !isSelected(item.id),
153
- className: "".concat(blockClass, "-dropdown ").concat(blockClass, "-hidden-hover"),
141
+ className: "".concat(blockClass, "-dropdown"),
154
142
  initialSelectedItem: item[modifiers.id],
155
143
  onChange: function onChange(_ref5) {
156
144
  var selectedItem = _ref5.selectedItem;
@@ -178,9 +166,7 @@ export var AddSelectList = function AddSelectList(_ref) {
178
166
  },
179
167
  kind: "ghost",
180
168
  size: "sm"
181
- }), item.meta && /*#__PURE__*/React.createElement("div", {
182
- className: "".concat(blockClass, "-hidden-hover")
183
- }, /*#__PURE__*/React.createElement(Button, {
169
+ }), item.meta && /*#__PURE__*/React.createElement(Button, {
184
170
  className: "".concat(blockClass, "-view-meta"),
185
171
  renderIcon: View16,
186
172
  iconDescription: metaIconDescription,
@@ -188,8 +174,11 @@ export var AddSelectList = function AddSelectList(_ref) {
188
174
  tooltipAlignment: "center",
189
175
  hasIconOnly: true,
190
176
  kind: "ghost",
191
- size: "sm"
192
- })))));
177
+ size: "sm",
178
+ onClick: function onClick() {
179
+ return metaPanelHandler(item);
180
+ }
181
+ }))));
193
182
  }))));
194
183
  };
195
184
  AddSelectList.propTypes = {
@@ -3,7 +3,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
4
  var _excluded = ["backButtonText", "cancelButtonText", "children", "className", "modalDangerButtonText", "modalDescription", "modalSecondaryButtonText", "modalTitle", "nextButtonText", "onClose", "onRequestSubmit", "firstFocusElement", "submitButtonText"];
5
5
  /**
6
- * Copyright IBM Corp. 2021, 2022
6
+ * Copyright IBM Corp. 2021, 2023
7
7
  *
8
8
  * This source code is licensed under the Apache-2.0 license found in the
9
9
  * LICENSE file in the root directory of this source tree.
@@ -200,7 +200,8 @@ export var CreateFullPage = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
200
200
  kind: "secondary",
201
201
  onClick: function onClick() {
202
202
  setModalIsOpen(!modalIsOpen);
203
- }
203
+ },
204
+ "data-modal-primary-focus": true
204
205
  }, modalSecondaryButtonText), /*#__PURE__*/React.createElement(Button, {
205
206
  type: "button",
206
207
  kind: "danger",
@@ -90,9 +90,9 @@ export var DatagridContent = function DatagridContent(_ref) {
90
90
  return handleGridKeyPress({
91
91
  event: event,
92
92
  dispatch: dispatch,
93
- inlineEditState: inlineEditState,
94
93
  instance: datagridState,
95
94
  keysPressedList: keysPressedList,
95
+ state: inlineEditState,
96
96
  usingMac: usingMac
97
97
  });
98
98
  } : null,
@@ -108,7 +108,7 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
108
108
  setGlobalFilter(null);
109
109
  }
110
110
  }, !displayAllInMenu && toolbarBatchActions && (toolbarBatchActions === null || toolbarBatchActions === void 0 ? void 0 : toolbarBatchActions.map(function (batchAction, index) {
111
- if (index < 2 && toolbarBatchActions.length > 3 || index < 3 && toolbarBatchActions.length === 3) {
111
+ if (index < 2 && toolbarBatchActions.length > 3 || index < 3 && toolbarBatchActions.length <= 3) {
112
112
  return /*#__PURE__*/React.createElement(TableBatchAction, {
113
113
  key: "".concat(batchAction.label, "-").concat(index),
114
114
  renderIcon: batchAction.renderIcon,
@@ -5,16 +5,17 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
5
5
  /*
6
6
  * Licensed Materials - Property of IBM
7
7
  * 5724-Q36
8
- * (c) Copyright IBM Corp. 2020 - 2021
8
+ * (c) Copyright IBM Corp. 2020 - 2023
9
9
  * US Government Users Restricted Rights - Use, duplication or disclosure
10
10
  * restricted by GSA ADP Schedule Contract with IBM Corp.
11
11
  */
12
12
  import React, { useEffect } from 'react';
13
13
  import { VariableSizeList } from 'react-window';
14
14
  import { DataTable } from 'carbon-components-react';
15
+ import { px } from '@carbon/layout';
16
+ import { useResizeDetector } from 'react-resize-detector';
15
17
  import { pkg } from '../../../settings';
16
18
  import DatagridHead from './DatagridHead';
17
- import { px } from '@carbon/layout';
18
19
  var blockClass = "".concat(pkg.prefix, "--datagrid");
19
20
  var TableBody = DataTable.TableBody;
20
21
  var rowSizeMap = {
@@ -46,10 +47,18 @@ var DatagridVirtualBody = function DatagridVirtualBody(datagridState) {
46
47
  page = datagridState.page,
47
48
  handleResize = datagridState.handleResize,
48
49
  gridRef = datagridState.gridRef;
50
+ var handleVirtualGridResize = function handleVirtualGridResize() {
51
+ var gridRefElement = gridRef === null || gridRef === void 0 ? void 0 : gridRef.current;
52
+ gridRefElement.style.width = gridRefElement === null || gridRefElement === void 0 ? void 0 : gridRefElement.clientWidth;
53
+ };
54
+ useResizeDetector({
55
+ onResize: handleVirtualGridResize,
56
+ targetRef: gridRef
57
+ });
49
58
  var syncScroll = function syncScroll(e) {
50
59
  var virtualBody = e.target;
51
- document.querySelector(".".concat(blockClass, "__head-warp")).scrollLeft = virtualBody.scrollLeft;
52
- var spacerColumn = document.querySelector(".".concat(blockClass, "__head-warp thead th:last-child"));
60
+ document.querySelector(".".concat(blockClass, "__head-wrap")).scrollLeft = virtualBody.scrollLeft;
61
+ var spacerColumn = document.querySelector(".".concat(blockClass, "__head-wrap thead th:last-child"));
53
62
  spacerColumn.style.width = px(32 + (virtualBody.offsetWidth - virtualBody.clientWidth)); // scrollbar width to header column to fix header alignment
54
63
  };
55
64
 
@@ -62,7 +71,7 @@ var DatagridVirtualBody = function DatagridVirtualBody(datagridState) {
62
71
  }
63
72
  var visibleRows = DatagridPagination && page || rows;
64
73
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
65
- className: "".concat(blockClass, "__head-warp"),
74
+ className: "".concat(blockClass, "__head-wrap"),
66
75
  style: {
67
76
  width: (_gridRef$current = gridRef.current) === null || _gridRef$current === void 0 ? void 0 : _gridRef$current.clientWidth,
68
77
  overflow: 'hidden'
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- var _excluded = ["onClick", "setIsTearsheetOpen", "isTearsheetOpen", "iconTooltipLabel"];
3
+ var _excluded = ["onClick", "setIsTearsheetOpen", "isTearsheetOpen", "iconTooltipLabel", "tooltipPosition"];
4
4
  /**
5
5
  * Copyright IBM Corp. 2022, 2022
6
6
  *
@@ -20,11 +20,13 @@ var ButtonWrapper = function ButtonWrapper(_ref) {
20
20
  isTearsheetOpen = _ref.isTearsheetOpen,
21
21
  _ref$iconTooltipLabel = _ref.iconTooltipLabel,
22
22
  iconTooltipLabel = _ref$iconTooltipLabel === void 0 ? 'Customize columns' : _ref$iconTooltipLabel,
23
+ _ref$tooltipPosition = _ref.tooltipPosition,
24
+ tooltipPosition = _ref$tooltipPosition === void 0 ? 'bottom' : _ref$tooltipPosition,
23
25
  rest = _objectWithoutProperties(_ref, _excluded);
24
26
  return /*#__PURE__*/React.createElement(Button, _extends({}, rest, {
25
27
  renderIcon: Column16,
26
28
  iconDescription: iconTooltipLabel,
27
- tooltipPosition: "left",
29
+ tooltipPosition: tooltipPosition,
28
30
  kind: "ghost",
29
31
  hasIconOnly: true,
30
32
  "test-id": "".concat(blockClass, "__customize-columns-trigger"),
@@ -40,6 +42,7 @@ ButtonWrapper.propTypes = {
40
42
  iconTooltipLabel: PropTypes.string,
41
43
  isTearsheetOpen: PropTypes.bool.isRequired,
42
44
  onClick: PropTypes.func.isRequired,
43
- setIsTearsheetOpen: PropTypes.func.isRequired
45
+ setIsTearsheetOpen: PropTypes.func.isRequired,
46
+ tooltipPosition: Button.propTypes.tooltipPosition
44
47
  };
45
48
  export default ButtonWrapper;
@@ -14,9 +14,8 @@ import { HTML5Backend } from 'react-dnd-html5-backend';
14
14
  import { Checkbox } from 'carbon-components-react';
15
15
  import update from 'immutability-helper';
16
16
  import { pkg } from '../../../../../settings';
17
- import DraggableElement from '../../DraggableElement';
18
- import { isColumnVisible } from './common';
19
17
  import classNames from 'classnames';
18
+ import { DraggableItemsList } from './DraggableItemsList';
20
19
  var blockClass = "".concat(pkg.prefix, "--datagrid");
21
20
  var getNextIndex = function getNextIndex(array, currentIndex, key) {
22
21
  var newIndex = -1;
@@ -36,7 +35,8 @@ var Columns = function Columns(_ref) {
36
35
  onSelectColumn = _ref.onSelectColumn,
37
36
  assistiveTextInstructionsLabel = _ref.assistiveTextInstructionsLabel,
38
37
  assistiveTextDisabledInstructionsLabel = _ref.assistiveTextDisabledInstructionsLabel,
39
- selectAllLabel = _ref.selectAllLabel;
38
+ selectAllLabel = _ref.selectAllLabel,
39
+ isTableSortable = _ref.isTableSortable;
40
40
  var _React$useState = React.useState(''),
41
41
  _React$useState2 = _slicedToArray(_React$useState, 2),
42
42
  ariaRegionText = _React$useState2[0],
@@ -87,59 +87,17 @@ var Columns = function Columns(_ref) {
87
87
  },
88
88
  id: "".concat(blockClass, "__customization-column-select-all"),
89
89
  labelText: selectAllLabel
90
- })), columns.filter(function (colDef) {
91
- return filterString.length === 0 || colDef.Header.props.title.toLowerCase().includes(filterString);
92
- }).map(function (colDef, i) {
93
- var searchString = new RegExp('(' + filterString + ')');
94
- var res = filterString.length ? colDef.Header.props.title.toLowerCase().split(searchString) : null;
95
- 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;
96
- var highlightedText = res !== null ? res[0] === '' ? "<strong>".concat(firstWord, "</strong>") + res[2] : firstWord + "<strong>".concat(res[1], "</strong>") + res[2] : colDef.Header.props.title;
97
- var isFrozenColumn = !!colDef.sticky;
98
- var listContents = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Checkbox, {
99
- wrapperClassName: "".concat(blockClass, "__customize-columns-checkbox-wrapper"),
100
- checked: isColumnVisible(colDef),
101
- disabled: isFrozenColumn,
102
- onChange: onSelectColumn.bind(null, colDef),
103
- id: "".concat(blockClass, "__customization-column-").concat(colDef.id),
104
- labelText: colDef.Header.props.title,
105
- title: colDef.Header.props.title,
106
- className: "".concat(blockClass, "__customize-columns-checkbox"),
107
- hideLabel: true
108
- }), /*#__PURE__*/React.createElement("div", {
109
- dangerouslySetInnerHTML: {
110
- __html: highlightedText
111
- }
112
- }));
113
- return /*#__PURE__*/React.createElement(DraggableElement, {
114
- key: colDef.id,
115
- index: i,
116
- listData: columns,
117
- setListData: setColumnsObject,
118
- id: "dnd-datagrid-columns-".concat(colDef.id),
119
- type: "column-customization",
120
- disabled: filterString.length > 0 || isFrozenColumn,
121
- ariaLabel: colDef.Header.props.title,
122
- onGrab: setAriaRegionText,
123
- isFocused: focusIndex === i,
124
- moveElement: moveElement,
125
- onArrowKeyDown: function onArrowKeyDown(e, isGrabbed, currentIndex) {
126
- if (isGrabbed) {
127
- var _columns$nextIndex;
128
- var nextIndex = getNextIndex(columns, currentIndex, e.key);
129
- e.preventDefault();
130
- e.stopPropagation();
131
- if (nextIndex >= 0 && !((_columns$nextIndex = columns[nextIndex]) !== null && _columns$nextIndex !== void 0 && _columns$nextIndex.sticky)) {
132
- setFocusIndex(nextIndex);
133
- moveElement(currentIndex, nextIndex);
134
- e.target.scrollIntoView({
135
- block: 'center'
136
- });
137
- }
138
- }
139
- },
140
- isSticky: isFrozenColumn,
141
- selected: isColumnVisible(colDef)
142
- }, listContents);
90
+ })), /*#__PURE__*/React.createElement(DraggableItemsList, {
91
+ columns: columns,
92
+ filterString: filterString,
93
+ focusIndex: focusIndex,
94
+ getNextIndex: getNextIndex,
95
+ isTableSortable: isTableSortable,
96
+ moveElement: moveElement,
97
+ onSelectColumn: onSelectColumn,
98
+ setAriaRegionText: setAriaRegionText,
99
+ setColumnsObject: setColumnsObject,
100
+ setFocusIndex: setFocusIndex
143
101
  }))));
144
102
  };
145
103
  Columns.propTypes = {
@@ -150,6 +108,7 @@ Columns.propTypes = {
150
108
  filterString: PropTypes.string.isRequired,
151
109
  getVisibleColumnsCount: PropTypes.func.isRequired,
152
110
  instructionsLabel: PropTypes.string,
111
+ isTableSortable: PropTypes.bool.isRequired,
153
112
  onSelectColumn: PropTypes.func.isRequired,
154
113
  selectAllLabel: PropTypes.string,
155
114
  setColumnStatus: PropTypes.func,
@@ -41,7 +41,8 @@ var CustomizeColumnsTearsheet = function CustomizeColumnsTearsheet(_ref) {
41
41
  _ref$assistiveTextDis = _ref.assistiveTextDisabledInstructionsLabel,
42
42
  assistiveTextDisabledInstructionsLabel = _ref$assistiveTextDis === void 0 ? 'Reordering columns are disabled because they are filtered currently.' : _ref$assistiveTextDis,
43
43
  _ref$selectAllLabel = _ref.selectAllLabel,
44
- selectAllLabel = _ref$selectAllLabel === void 0 ? 'Column name' : _ref$selectAllLabel;
44
+ selectAllLabel = _ref$selectAllLabel === void 0 ? 'Column name' : _ref$selectAllLabel,
45
+ isTableSortable = _ref.isTableSortable;
45
46
  var _useState = useState(''),
46
47
  _useState2 = _slicedToArray(_useState, 2),
47
48
  visibleColumnsCount = _useState2[0],
@@ -55,12 +56,6 @@ var CustomizeColumnsTearsheet = function CustomizeColumnsTearsheet(_ref) {
55
56
  searchText = _useState6[0],
56
57
  setSearchText = _useState6[1];
57
58
  var _useState7 = useState(columnDefinitions
58
- // hide the columns without Header, e.g the sticky actions, spacer
59
- .filter(function (colDef) {
60
- return !!colDef.Header.props && !!colDef.Header.props.title;
61
- }).filter(function (colDef) {
62
- return !colDef.isAction;
63
- })
64
59
  // only sort the hidden column to the end when modal reopen
65
60
  .sort(function (defA, defB) {
66
61
  var isVisibleA = isColumnVisible(defA);
@@ -157,7 +152,8 @@ var CustomizeColumnsTearsheet = function CustomizeColumnsTearsheet(_ref) {
157
152
  setColumnObjects(cols);
158
153
  setDirty();
159
154
  },
160
- selectAllLabel: selectAllLabel
155
+ selectAllLabel: selectAllLabel,
156
+ isTableSortable: isTableSortable
161
157
  }));
162
158
  };
163
159
  CustomizeColumnsTearsheet.propTypes = {
@@ -168,6 +164,7 @@ CustomizeColumnsTearsheet.propTypes = {
168
164
  findColumnPlaceholderLabel: PropTypes.string,
169
165
  instructionsLabel: PropTypes.string,
170
166
  isOpen: PropTypes.bool.isRequired,
167
+ isTableSortable: PropTypes.bool.isRequired,
171
168
  onSaveColumnPrefs: PropTypes.func.isRequired,
172
169
  originalColumnDefinitions: PropTypes.array.isRequired,
173
170
  primaryButtonTextLabel: PropTypes.string,
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Copyright IBM Corp. 2023, 2023
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
+ import React from 'react';
9
+ import { PropTypes } from 'prop-types';
10
+ import { Checkbox } from 'carbon-components-react';
11
+ import { isColumnVisible } from './common';
12
+ import DraggableElement from '../../DraggableElement';
13
+ import { pkg } from '../../../../../settings';
14
+ var blockClass = "".concat(pkg.prefix, "--datagrid");
15
+ export var DraggableItemsList = function DraggableItemsList(_ref) {
16
+ var columns = _ref.columns,
17
+ filterString = _ref.filterString,
18
+ focusIndex = _ref.focusIndex,
19
+ getNextIndex = _ref.getNextIndex,
20
+ isTableSortable = _ref.isTableSortable,
21
+ moveElement = _ref.moveElement,
22
+ onSelectColumn = _ref.onSelectColumn,
23
+ setAriaRegionText = _ref.setAriaRegionText,
24
+ setColumnsObject = _ref.setColumnsObject,
25
+ setFocusIndex = _ref.setFocusIndex;
26
+ return /*#__PURE__*/React.createElement(React.Fragment, null, columns
27
+ // hide the columns without Header, e.g the sticky actions, spacer
28
+ .filter(function (colDef) {
29
+ var _colDef$Header$props$, _colDef$Header$props;
30
+ var sortableTitle = isTableSortable && ((_colDef$Header$props$ = colDef.Header().props.children.props) === null || _colDef$Header$props$ === void 0 ? void 0 : _colDef$Header$props$.title);
31
+ return !!colDef.Header.props && !!((_colDef$Header$props = colDef.Header.props) !== null && _colDef$Header$props !== void 0 && _colDef$Header$props.title) || isTableSortable && !!sortableTitle;
32
+ }).filter(function (colDef) {
33
+ return !colDef.isAction;
34
+ }).filter(function (colDef) {
35
+ var _colDef$Header$props$2, _colDef$Header$props2, _colDef$Header$props3;
36
+ var sortableTitle = isTableSortable && ((_colDef$Header$props$2 = colDef.Header().props.children.props) === null || _colDef$Header$props$2 === void 0 ? void 0 : _colDef$Header$props$2.title);
37
+ return filterString.length === 0 || (isTableSortable ? sortableTitle === null || sortableTitle === void 0 ? void 0 : sortableTitle.toLowerCase().includes(filterString) : (_colDef$Header$props2 = colDef.Header.props) === null || _colDef$Header$props2 === void 0 ? void 0 : (_colDef$Header$props3 = _colDef$Header$props2.title) === null || _colDef$Header$props3 === void 0 ? void 0 : _colDef$Header$props3.toLowerCase().includes(filterString)) && colDef.id !== 'spacer';
38
+ }).map(function (colDef, i) {
39
+ var _colDef$Header$props$3, _colDef$Header$props4, _colDef$Header$props5, _colDef$Header$props6, _colDef$Header$props7;
40
+ var isSortableColumn = !!colDef.canSort && !!isTableSortable;
41
+ var sortableTitle = isTableSortable && ((_colDef$Header$props$3 = colDef.Header().props.children.props) === null || _colDef$Header$props$3 === void 0 ? void 0 : _colDef$Header$props$3.title);
42
+ var searchString = new RegExp('(' + filterString + ')');
43
+ var res = filterString.length ? isSortableColumn ? sortableTitle.toLowerCase().split(searchString) : colDef.Header.props.title.toLowerCase().split(searchString) : null;
44
+ 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;
45
+ var highlightedText = res !== null ? res[0] === '' ? "<strong>".concat(firstWord, "</strong>") + res[2] : firstWord + "<strong>".concat(res[1], "</strong>") + res[2] : isSortableColumn ? sortableTitle : (_colDef$Header$props4 = colDef.Header.props) === null || _colDef$Header$props4 === void 0 ? void 0 : _colDef$Header$props4.title;
46
+ var isFrozenColumn = !!colDef.sticky;
47
+ var listContents = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Checkbox, {
48
+ wrapperClassName: "".concat(blockClass, "__customize-columns-checkbox-wrapper"),
49
+ checked: isColumnVisible(colDef),
50
+ disabled: isFrozenColumn,
51
+ onChange: onSelectColumn.bind(null, colDef),
52
+ id: "".concat(blockClass, "__customization-column-").concat(colDef.id),
53
+ labelText: isSortableColumn ? sortableTitle : (_colDef$Header$props5 = colDef.Header.props) === null || _colDef$Header$props5 === void 0 ? void 0 : _colDef$Header$props5.title,
54
+ title: isSortableColumn ? sortableTitle : (_colDef$Header$props6 = colDef.Header.props) === null || _colDef$Header$props6 === void 0 ? void 0 : _colDef$Header$props6.title,
55
+ className: "".concat(blockClass, "__customize-columns-checkbox"),
56
+ hideLabel: true
57
+ }), /*#__PURE__*/React.createElement("div", {
58
+ dangerouslySetInnerHTML: {
59
+ __html: highlightedText
60
+ }
61
+ }));
62
+ return /*#__PURE__*/React.createElement(DraggableElement, {
63
+ key: colDef.id,
64
+ index: i,
65
+ listData: columns,
66
+ setListData: setColumnsObject,
67
+ id: "dnd-datagrid-columns-".concat(colDef.id),
68
+ type: "column-customization",
69
+ disabled: filterString.length > 0 || isFrozenColumn,
70
+ ariaLabel: isSortableColumn ? sortableTitle : (_colDef$Header$props7 = colDef.Header.props) === null || _colDef$Header$props7 === void 0 ? void 0 : _colDef$Header$props7.title,
71
+ onGrab: setAriaRegionText,
72
+ isFocused: focusIndex === i,
73
+ moveElement: moveElement,
74
+ onArrowKeyDown: function onArrowKeyDown(e, isGrabbed, currentIndex) {
75
+ if (isGrabbed) {
76
+ var _columns$nextIndex;
77
+ var nextIndex = getNextIndex(columns, currentIndex, e.key);
78
+ e.preventDefault();
79
+ e.stopPropagation();
80
+ if (nextIndex >= 0 && !((_columns$nextIndex = columns[nextIndex]) !== null && _columns$nextIndex !== void 0 && _columns$nextIndex.sticky)) {
81
+ setFocusIndex(nextIndex);
82
+ moveElement(currentIndex, nextIndex);
83
+ e.target.scrollIntoView({
84
+ block: 'center'
85
+ });
86
+ }
87
+ }
88
+ },
89
+ isSticky: isFrozenColumn,
90
+ selected: isColumnVisible(colDef)
91
+ }, listContents);
92
+ }));
93
+ };
94
+ DraggableItemsList.propTypes = {
95
+ columns: PropTypes.array.isRequired,
96
+ filterString: PropTypes.string.isRequired,
97
+ focusIndex: PropTypes.number.isRequired,
98
+ getNextIndex: PropTypes.func.isRequired,
99
+ isTableSortable: PropTypes.bool,
100
+ moveElement: PropTypes.func.isRequired,
101
+ onSelectColumn: PropTypes.func.isRequired,
102
+ setAriaRegionText: PropTypes.func.isRequired,
103
+ setColumnsObject: PropTypes.func.isRequired,
104
+ setFocusIndex: PropTypes.func.isRequired
105
+ };
@@ -21,6 +21,7 @@ var TearsheetWrapper = function TearsheetWrapper(_ref) {
21
21
  rest = _objectWithoutProperties(_instance$customizeCo, _excluded);
22
22
  return /*#__PURE__*/React.createElement(CustomizeColumnsTearsheet, _extends({}, rest, labels, {
23
23
  isOpen: isTearsheetOpen,
24
+ isTableSortable: instance === null || instance === void 0 ? void 0 : instance.isTableSortable,
24
25
  setIsTearsheetOpen: setIsTearsheetOpen,
25
26
  columnDefinitions: instance.allColumns,
26
27
  originalColumnDefinitions: instance.columns,
@@ -45,7 +45,15 @@ var FilterPanel = function FilterPanel(_ref) {
45
45
  _ref$showFilterSearch = _ref.showFilterSearch,
46
46
  showFilterSearch = _ref$showFilterSearch === void 0 ? false : _ref$showFilterSearch,
47
47
  _ref$filterPanelMinHe = _ref.filterPanelMinHeight,
48
- filterPanelMinHeight = _ref$filterPanelMinHe === void 0 ? 600 : _ref$filterPanelMinHe;
48
+ filterPanelMinHeight = _ref$filterPanelMinHe === void 0 ? 600 : _ref$filterPanelMinHe,
49
+ _ref$primaryActionLab = _ref.primaryActionLabel,
50
+ primaryActionLabel = _ref$primaryActionLab === void 0 ? 'Apply' : _ref$primaryActionLab,
51
+ _ref$secondaryActionL = _ref.secondaryActionLabel,
52
+ secondaryActionLabel = _ref$secondaryActionL === void 0 ? 'Cancel' : _ref$secondaryActionL,
53
+ _ref$searchLabelText = _ref.searchLabelText,
54
+ searchLabelText = _ref$searchLabelText === void 0 ? 'Filter search' : _ref$searchLabelText,
55
+ _ref$searchPlaceholde = _ref.searchPlaceholder,
56
+ searchPlaceholder = _ref$searchPlaceholde === void 0 ? 'Find filters' : _ref$searchPlaceholde;
49
57
  /** State */
50
58
  var _useState = useState(false),
51
59
  _useState2 = _slicedToArray(_useState, 2),
@@ -120,13 +128,13 @@ var FilterPanel = function FilterPanel(_ref) {
120
128
  actions: [{
121
129
  key: 1,
122
130
  kind: 'primary',
123
- label: 'Apply',
131
+ label: primaryActionLabel,
124
132
  onClick: apply,
125
133
  disabled: shouldDisableButtons
126
134
  }, {
127
135
  key: 2,
128
136
  kind: 'secondary',
129
- label: 'Cancel',
137
+ label: secondaryActionLabel,
130
138
  onClick: cancel,
131
139
  disabled: shouldDisableButtons
132
140
  }],
@@ -189,8 +197,8 @@ var FilterPanel = function FilterPanel(_ref) {
189
197
  ref: filterSearchRef,
190
198
  className: "".concat(componentClass, "__search")
191
199
  }, /*#__PURE__*/React.createElement(Search, {
192
- labelText: "Filter search",
193
- placeHolderText: "Find filters",
200
+ labelText: searchLabelText,
201
+ placeHolderText: searchPlaceholder,
194
202
  light: true,
195
203
  size: "sm"
196
204
  }))), /*#__PURE__*/React.createElement("div", {
@@ -231,6 +239,10 @@ FilterPanel.propTypes = {
231
239
  onPanelClose: PropTypes.func,
232
240
  onPanelOpen: PropTypes.func,
233
241
  open: PropTypes.bool,
242
+ primaryActionLabel: PropTypes.string,
243
+ searchLabelText: PropTypes.string,
244
+ searchPlaceholder: PropTypes.string,
245
+ secondaryActionLabel: PropTypes.string,
234
246
  setAllFilters: PropTypes.func.isRequired,
235
247
  showFilterSearch: PropTypes.bool,
236
248
  title: PropTypes.string,
@@ -125,6 +125,17 @@ var useFilters = function useFilters(_ref) {
125
125
  // Remove it from the filters array
126
126
  filtersObjectArrayCopy.splice(_index2, 1);
127
127
  }
128
+ } else if (type === NUMBER) {
129
+ // If the value is empty remove it from the filtersObjectArray
130
+ if (value === '') {
131
+ // Find the column that uses number and displays an empty string
132
+ var _index3 = filtersObjectArrayCopy.findIndex(function (filter) {
133
+ return filter.id === column;
134
+ });
135
+
136
+ // Remove it from the filters array
137
+ filtersObjectArrayCopy.splice(_index3, 1);
138
+ }
128
139
  }
129
140
  setFiltersObjectArray(filtersObjectArrayCopy);
130
141
 
@@ -3,13 +3,11 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
5
  var _excluded = ["legendText"];
6
- // @flow
7
- /*
8
- * Licensed Materials - Property of IBM
9
- * 5724-Q36
10
- * (c) Copyright IBM Corp. 2021
11
- * US Government Users Restricted Rights - Use, duplication or disclosure
12
- * restricted by GSA ADP Schedule Contract with IBM Corp.
6
+ /**
7
+ * Copyright IBM Corp. 2021, 2023
8
+ *
9
+ * This source code is licensed under the Apache-2.0 license found in the
10
+ * LICENSE file in the root directory of this source tree.
13
11
  */
14
12
 
15
13
  import * as React from 'react';
@@ -36,7 +34,9 @@ var RowSizeDropdown = function RowSizeDropdown(_ref) {
36
34
  tooltipPosition: "bottom",
37
35
  renderIcon: Settings16,
38
36
  onClick: function onClick() {
39
- return setIsOpen(!isOpen);
37
+ return setIsOpen(function (prevOpen) {
38
+ return !prevOpen;
39
+ });
40
40
  },
41
41
  iconDescription: legendText,
42
42
  className: cx("".concat(blockClass, "__row-size-button"), _defineProperty({}, "".concat(blockClass, "__row-size-button--open"), isOpen))
@@ -1,10 +1,10 @@
1
- /*
2
- * Licensed Materials - Property of IBM
3
- * 5724-Q36
4
- * (c) Copyright IBM Corp. 2020
5
- * US Government Users Restricted Rights - Use, duplication or disclosure
6
- * restricted by GSA ADP Schedule Contract with IBM Corp.
1
+ /**
2
+ * Copyright IBM Corp. 2020, 2023
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.
7
6
  */
7
+
8
8
  export { Datagrid } from './Datagrid';
9
9
  export { default as useDatagrid } from './useDatagrid';
10
10
  export { default as useInfiniteScroll } from './useInfiniteScroll';
@@ -23,4 +23,5 @@ export { default as useSelectAllWithToggle } from './useSelectAllToggle';
23
23
  export { default as useColumnCenterAlign } from './useColumnCenterAlign';
24
24
  export { default as useColumnOrder } from './useColumnOrder';
25
25
  export { default as useInlineEdit } from './useInlineEdit';
26
- export { default as useFiltering } from './useFiltering';
26
+ export { default as useFiltering } from './useFiltering';
27
+ export { getAutoSizedColumnWidth } from './utils/getAutoSizedColumnWidth';
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * Licensed Materials - Property of IBM
3
3
  * 5724-Q36
4
- * (c) Copyright IBM Corp. 2020
4
+ * (c) Copyright IBM Corp. 2020, 2023
5
5
  * US Government Users Restricted Rights - Use, duplication or disclosure
6
6
  * restricted by GSA ADP Schedule Contract with IBM Corp.
7
7
  */
@@ -15,9 +15,9 @@ var useOnRowClick = function useOnRowClick(hooks) {
15
15
  instance = datagridState.instance;
16
16
  var id = row.id,
17
17
  toggleRowSelected = row.toggleRowSelected;
18
- var onClick = function onClick() {
18
+ var onClick = function onClick(event) {
19
19
  if (!isFetching && onRowClick) {
20
- onRowClick(row);
20
+ onRowClick(row, event);
21
21
  instance.selectedFlatRows && instance.selectedFlatRows.map(function (toggleRow) {
22
22
  return toggleRow.toggleRowSelected(false);
23
23
  });