@carbon/ibm-products 1.47.0 → 1.49.0

Sign up to get free protection for your applications and to get access to all the features.
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
  });