@carbon/ibm-products 1.48.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 (55) hide show
  1. package/css/index-full-carbon.css +37 -5
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +3 -3
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +36 -4
  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 +37 -5
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +3 -3
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +37 -5
  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/DatagridToolbar.js +1 -1
  18. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +6 -3
  19. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +15 -62
  20. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +5 -2
  21. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +105 -0
  22. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +1 -0
  23. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +17 -5
  24. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +11 -0
  25. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +8 -8
  26. package/es/components/Datagrid/index.js +8 -7
  27. package/es/components/Datagrid/useOnRowClick.js +3 -3
  28. package/es/components/Datagrid/useSortableColumns.js +6 -5
  29. package/es/components/Datagrid/utils/getAutoSizedColumnWidth.js +27 -0
  30. package/es/components/InlineEditV2/InlineEditV2.js +6 -3
  31. package/es/components/SidePanel/SidePanel.js +1 -1
  32. package/es/components/index.js +1 -1
  33. package/es/global/js/utils/story-helper.js +9 -0
  34. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +1 -1
  35. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +6 -3
  36. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +15 -62
  37. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +5 -2
  38. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +113 -0
  39. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +1 -0
  40. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +17 -5
  41. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +11 -0
  42. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +3 -1
  43. package/lib/components/Datagrid/index.js +8 -1
  44. package/lib/components/Datagrid/useOnRowClick.js +3 -3
  45. package/lib/components/Datagrid/useSortableColumns.js +6 -5
  46. package/lib/components/Datagrid/utils/getAutoSizedColumnWidth.js +35 -0
  47. package/lib/components/InlineEditV2/InlineEditV2.js +6 -3
  48. package/lib/components/SidePanel/SidePanel.js +1 -1
  49. package/lib/components/index.js +6 -0
  50. package/lib/global/js/utils/story-helper.js +12 -2
  51. package/package.json +2 -2
  52. package/scss/components/Datagrid/styles/_datagrid.scss +1 -1
  53. package/scss/components/InlineEditV1/_inline-edit-v1.scss +1 -5
  54. package/scss/components/InlineEditV2/_inline-edit-v2.scss +41 -3
  55. package/scss/components/SidePanel/_side-panel.scss +2 -1
@@ -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,65 +87,17 @@ var Columns = function Columns(_ref) {
87
87
  },
88
88
  id: "".concat(blockClass, "__customization-column-select-all"),
89
89
  labelText: selectAllLabel
90
- })), columns
91
- // hide the columns without Header, e.g the sticky actions, spacer
92
- .filter(function (colDef) {
93
- return !!colDef.Header.props && !!colDef.Header.props.title;
94
- }).filter(function (colDef) {
95
- return !colDef.isAction;
96
- }).filter(function (colDef) {
97
- return filterString.length === 0 || colDef.Header.props.title.toLowerCase().includes(filterString);
98
- }).map(function (colDef, i) {
99
- var searchString = new RegExp('(' + filterString + ')');
100
- var res = filterString.length ? colDef.Header.props.title.toLowerCase().split(searchString) : null;
101
- 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;
102
- var highlightedText = res !== null ? res[0] === '' ? "<strong>".concat(firstWord, "</strong>") + res[2] : firstWord + "<strong>".concat(res[1], "</strong>") + res[2] : colDef.Header.props.title;
103
- var isFrozenColumn = !!colDef.sticky;
104
- var listContents = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Checkbox, {
105
- wrapperClassName: "".concat(blockClass, "__customize-columns-checkbox-wrapper"),
106
- checked: isColumnVisible(colDef),
107
- disabled: isFrozenColumn,
108
- onChange: onSelectColumn.bind(null, colDef),
109
- id: "".concat(blockClass, "__customization-column-").concat(colDef.id),
110
- labelText: colDef.Header.props.title,
111
- title: colDef.Header.props.title,
112
- className: "".concat(blockClass, "__customize-columns-checkbox"),
113
- hideLabel: true
114
- }), /*#__PURE__*/React.createElement("div", {
115
- dangerouslySetInnerHTML: {
116
- __html: highlightedText
117
- }
118
- }));
119
- return /*#__PURE__*/React.createElement(DraggableElement, {
120
- key: colDef.id,
121
- index: i,
122
- listData: columns,
123
- setListData: setColumnsObject,
124
- id: "dnd-datagrid-columns-".concat(colDef.id),
125
- type: "column-customization",
126
- disabled: filterString.length > 0 || isFrozenColumn,
127
- ariaLabel: colDef.Header.props.title,
128
- onGrab: setAriaRegionText,
129
- isFocused: focusIndex === i,
130
- moveElement: moveElement,
131
- onArrowKeyDown: function onArrowKeyDown(e, isGrabbed, currentIndex) {
132
- if (isGrabbed) {
133
- var _columns$nextIndex;
134
- var nextIndex = getNextIndex(columns, currentIndex, e.key);
135
- e.preventDefault();
136
- e.stopPropagation();
137
- if (nextIndex >= 0 && !((_columns$nextIndex = columns[nextIndex]) !== null && _columns$nextIndex !== void 0 && _columns$nextIndex.sticky)) {
138
- setFocusIndex(nextIndex);
139
- moveElement(currentIndex, nextIndex);
140
- e.target.scrollIntoView({
141
- block: 'center'
142
- });
143
- }
144
- }
145
- },
146
- isSticky: isFrozenColumn,
147
- selected: isColumnVisible(colDef)
148
- }, 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
149
101
  }))));
150
102
  };
151
103
  Columns.propTypes = {
@@ -156,6 +108,7 @@ Columns.propTypes = {
156
108
  filterString: PropTypes.string.isRequired,
157
109
  getVisibleColumnsCount: PropTypes.func.isRequired,
158
110
  instructionsLabel: PropTypes.string,
111
+ isTableSortable: PropTypes.bool.isRequired,
159
112
  onSelectColumn: PropTypes.func.isRequired,
160
113
  selectAllLabel: PropTypes.string,
161
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],
@@ -151,7 +152,8 @@ var CustomizeColumnsTearsheet = function CustomizeColumnsTearsheet(_ref) {
151
152
  setColumnObjects(cols);
152
153
  setDirty();
153
154
  },
154
- selectAllLabel: selectAllLabel
155
+ selectAllLabel: selectAllLabel,
156
+ isTableSortable: isTableSortable
155
157
  }));
156
158
  };
157
159
  CustomizeColumnsTearsheet.propTypes = {
@@ -162,6 +164,7 @@ CustomizeColumnsTearsheet.propTypes = {
162
164
  findColumnPlaceholderLabel: PropTypes.string,
163
165
  instructionsLabel: PropTypes.string,
164
166
  isOpen: PropTypes.bool.isRequired,
167
+ isTableSortable: PropTypes.bool.isRequired,
165
168
  onSaveColumnPrefs: PropTypes.func.isRequired,
166
169
  originalColumnDefinitions: PropTypes.array.isRequired,
167
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
  });
@@ -22,6 +22,7 @@ var ordering = {
22
22
  };
23
23
  var useSortableColumns = function useSortableColumns(hooks) {
24
24
  var sortableVisibleColumns = function sortableVisibleColumns(visibleColumns, _ref) {
25
+ var _instance$customizeCo;
25
26
  var instance = _ref.instance;
26
27
  var onSort = instance.onSort;
27
28
  var onSortClick = function onSortClick(column) {
@@ -37,7 +38,7 @@ var useSortableColumns = function useSortableColumns(hooks) {
37
38
  };
38
39
  var sortableColumns = visibleColumns.map(function (column) {
39
40
  var icon = function icon(col) {
40
- if (col.isSorted) {
41
+ if (col !== null && col !== void 0 && col.isSorted) {
41
42
  switch (col.isSortedDesc) {
42
43
  case false:
43
44
  return function () {
@@ -69,11 +70,11 @@ var useSortableColumns = function useSortableColumns(hooks) {
69
70
  var _cx;
70
71
  return column.disableSortBy === true ? column.Header : /*#__PURE__*/React.createElement(Button, {
71
72
  onClick: function onClick() {
72
- return onSortClick(headerProp.column);
73
+ return onSortClick(headerProp === null || headerProp === void 0 ? void 0 : headerProp.column);
73
74
  },
74
75
  kind: "ghost",
75
- renderIcon: icon(headerProp.column),
76
- className: cx("".concat(carbon.prefix, "--table-sort ").concat(blockClass, "--table-sort"), (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "--table-sort--desc"), headerProp.column.isSortedDesc), _defineProperty(_cx, "".concat(blockClass, "--table-sort--asc"), headerProp.column.isSortedDesc === false), _cx))
76
+ renderIcon: icon(headerProp === null || headerProp === void 0 ? void 0 : headerProp.column),
77
+ className: cx("".concat(carbon.prefix, "--table-sort ").concat(blockClass, "--table-sort"), (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "--table-sort--desc"), headerProp === null || headerProp === void 0 ? void 0 : headerProp.column.isSortedDesc), _defineProperty(_cx, "".concat(blockClass, "--table-sort--asc"), (headerProp === null || headerProp === void 0 ? void 0 : headerProp.column.isSortedDesc) === false), _cx))
77
78
  }, column.Header);
78
79
  };
79
80
  return _objectSpread(_objectSpread({}, column), {}, {
@@ -81,7 +82,7 @@ var useSortableColumns = function useSortableColumns(hooks) {
81
82
  minWidth: column.disableSortBy === true ? 0 : 90
82
83
  });
83
84
  });
84
- return _toConsumableArray(sortableColumns);
85
+ return (_instance$customizeCo = instance.customizeColumnsProps) !== null && _instance$customizeCo !== void 0 && _instance$customizeCo.isTearsheetOpen ? visibleColumns : _toConsumableArray(sortableColumns);
85
86
  };
86
87
  var sortInstanceProps = function sortInstanceProps(instance) {
87
88
  var onSort = instance.onSort;
@@ -0,0 +1,27 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ /**
3
+ * Copyright IBM Corp. 2023, 2023
4
+ *
5
+ * This source code is licensed under the Apache-2.0 license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
9
+ /**
10
+ * Calculates the auto sized width of a column
11
+ * @param {Array<object>} rows - The datagrid rows
12
+ * @param {string} accessor - The accessor for the column
13
+ * @param {string} headerText - The header text for the column
14
+ */
15
+
16
+ export var getAutoSizedColumnWidth = function getAutoSizedColumnWidth(rows, accessor, headerText) {
17
+ var maxWidth = 400;
18
+ var minWidth = 58;
19
+ var letterSpacing = 10;
20
+ var cellLength = Math.max.apply(Math, _toConsumableArray(rows.map(function (row) {
21
+ return ("".concat(row[accessor]) || '').length;
22
+ })).concat([headerText.length]));
23
+ if (cellLength <= 3) {
24
+ return minWidth;
25
+ }
26
+ return Math.min(maxWidth, cellLength * letterSpacing + 16);
27
+ };
@@ -22,6 +22,7 @@ import { getDevtoolsProps } from '../../global/js/utils/devtools';
22
22
  var componentName = 'InlineEditV2';
23
23
  var blockClass = "".concat(pkg.prefix, "--inline-edit-v2");
24
24
  export var InlineEditV2 = /*#__PURE__*/forwardRef(function (_ref, ref) {
25
+ var _cx;
25
26
  var cancelLabel = _ref.cancelLabel,
26
27
  editLabel = _ref.editLabel,
27
28
  id = _ref.id,
@@ -128,7 +129,7 @@ export var InlineEditV2 = /*#__PURE__*/forwardRef(function (_ref, ref) {
128
129
  return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
129
130
  ref: ref
130
131
  }, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement("div", {
131
- className: cx(blockClass, _defineProperty({}, "".concat(blockClass, "-focused"), focused)),
132
+ className: cx(blockClass, (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "--focused"), focused), _defineProperty(_cx, "".concat(blockClass, "--invalid"), invalid), _cx)),
132
133
  onFocus: onFocusHandler,
133
134
  onBlur: onBlurHandler
134
135
  }, /*#__PURE__*/React.createElement("label", {
@@ -144,7 +145,9 @@ export var InlineEditV2 = /*#__PURE__*/forwardRef(function (_ref, ref) {
144
145
  // readOnly={readOnly}
145
146
  ,
146
147
  onKeyDown: onKeyHandler
147
- }), focused ? /*#__PURE__*/React.createElement(React.Fragment, null, invalid && /*#__PURE__*/React.createElement(WarningFilled16, {
148
+ }), /*#__PURE__*/React.createElement("div", {
149
+ className: "".concat(blockClass, "__toolbar")
150
+ }, focused ? /*#__PURE__*/React.createElement(React.Fragment, null, invalid && /*#__PURE__*/React.createElement(WarningFilled16, {
148
151
  className: "".concat(blockClass, "__warning-icon")
149
152
  }), /*#__PURE__*/React.createElement(Button, {
150
153
  hasIconOnly: true,
@@ -181,7 +184,7 @@ export var InlineEditV2 = /*#__PURE__*/forwardRef(function (_ref, ref) {
181
184
  kind: "ghost",
182
185
  tabIndex: 0,
183
186
  key: "edit"
184
- })), focused && invalid && /*#__PURE__*/React.createElement("p", {
187
+ }))), focused && invalid && /*#__PURE__*/React.createElement("p", {
185
188
  className: "".concat(blockClass, "__warning-text")
186
189
  }, invalidLabel));
187
190
  });
@@ -415,7 +415,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
415
415
  renderIcon: icon,
416
416
  iconDescription: label,
417
417
  tooltipPosition: tooltipPosition || 'bottom',
418
- tooltipAlignment: tooltipAlignment || 'center',
418
+ tooltipAlignment: tooltipAlignment || 'start',
419
419
  hasIconOnly: !leading,
420
420
  disabled: disabled,
421
421
  className: cx(["".concat(blockClass, "__action-toolbar-button"), className, _defineProperty({}, "".concat(blockClass, "__action-toolbar-leading-button"), leading)]),
@@ -37,7 +37,7 @@ export { WebTerminal, WebTerminalContentWrapper, useWebTerminal, WebTerminalProv
37
37
  export { EditSidePanel } from './EditSidePanel';
38
38
  export { OptionsTile } from './OptionsTile';
39
39
  export { DataSpreadsheet } from './DataSpreadsheet';
40
- export { Datagrid, useDatagrid, useInfiniteScroll, useNestedRows, useSelectRows, useExpandedRow, useOnRowClick, useSortableColumns, useRowIsMouseOver, useColumnCenterAlign, useColumnRightAlign, useDisableSelectRows, useStickyColumn, useActionsColumn, useCustomizeColumns, useSelectAllWithToggle, useColumnOrder, useInlineEdit, useFiltering } from './Datagrid';
40
+ export { Datagrid, useDatagrid, useInfiniteScroll, useNestedRows, useSelectRows, useExpandedRow, useOnRowClick, useSortableColumns, useRowIsMouseOver, useColumnCenterAlign, useColumnRightAlign, useDisableSelectRows, useStickyColumn, useActionsColumn, useCustomizeColumns, useSelectAllWithToggle, useColumnOrder, useInlineEdit, useFiltering, getAutoSizedColumnWidth } from './Datagrid';
41
41
  export { EditTearsheet } from './EditTearsheet';
42
42
  export { EditTearsheetNarrow } from './EditTearsheetNarrow';
43
43
  export { EditFullPage } from './EditFullPage';
@@ -77,4 +77,13 @@ CodesandboxLink.propTypes = {
77
77
  * directory withing examples codesandbox will be found
78
78
  */
79
79
  exampleDirectory: PropTypes.string
80
+ };
81
+
82
+ /**
83
+ * A helper function that finds the designated theme on the Storybook canvas.
84
+ * @returns "dark" or "light"
85
+ */
86
+ export var getSelectedCarbonTheme = function getSelectedCarbonTheme() {
87
+ var themeId = document.querySelector('html').getAttribute('storybook-carbon-theme');
88
+ return themeId === 'g90' || themeId === 'g100' ? 'dark' : 'light';
80
89
  };
@@ -118,7 +118,7 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
118
118
  setGlobalFilter(null);
119
119
  }
120
120
  }, !displayAllInMenu && toolbarBatchActions && (toolbarBatchActions === null || toolbarBatchActions === void 0 ? void 0 : toolbarBatchActions.map(function (batchAction, index) {
121
- if (index < 2 && toolbarBatchActions.length > 3 || index < 3 && toolbarBatchActions.length === 3) {
121
+ if (index < 2 && toolbarBatchActions.length > 3 || index < 3 && toolbarBatchActions.length <= 3) {
122
122
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TableBatchAction, {
123
123
  key: "".concat(batchAction.label, "-").concat(index),
124
124
  renderIcon: batchAction.renderIcon,
@@ -13,7 +13,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
  var _iconsReact = require("@carbon/icons-react");
14
14
  var _carbonComponentsReact = require("carbon-components-react");
15
15
  var _settings = require("../../../../../settings");
16
- var _excluded = ["onClick", "setIsTearsheetOpen", "isTearsheetOpen", "iconTooltipLabel"];
16
+ var _excluded = ["onClick", "setIsTearsheetOpen", "isTearsheetOpen", "iconTooltipLabel", "tooltipPosition"];
17
17
  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); }
18
18
  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
19
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
@@ -23,11 +23,13 @@ var ButtonWrapper = function ButtonWrapper(_ref) {
23
23
  isTearsheetOpen = _ref.isTearsheetOpen,
24
24
  _ref$iconTooltipLabel = _ref.iconTooltipLabel,
25
25
  iconTooltipLabel = _ref$iconTooltipLabel === void 0 ? 'Customize columns' : _ref$iconTooltipLabel,
26
+ _ref$tooltipPosition = _ref.tooltipPosition,
27
+ tooltipPosition = _ref$tooltipPosition === void 0 ? 'bottom' : _ref$tooltipPosition,
26
28
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
27
29
  return /*#__PURE__*/React.createElement(_carbonComponentsReact.Button, (0, _extends2.default)({}, rest, {
28
30
  renderIcon: _iconsReact.Column16,
29
31
  iconDescription: iconTooltipLabel,
30
- tooltipPosition: "left",
32
+ tooltipPosition: tooltipPosition,
31
33
  kind: "ghost",
32
34
  hasIconOnly: true,
33
35
  "test-id": "".concat(blockClass, "__customize-columns-trigger"),
@@ -43,7 +45,8 @@ ButtonWrapper.propTypes = {
43
45
  iconTooltipLabel: _propTypes.default.string,
44
46
  isTearsheetOpen: _propTypes.default.bool.isRequired,
45
47
  onClick: _propTypes.default.func.isRequired,
46
- setIsTearsheetOpen: _propTypes.default.func.isRequired
48
+ setIsTearsheetOpen: _propTypes.default.func.isRequired,
49
+ tooltipPosition: _carbonComponentsReact.Button.propTypes.tooltipPosition
47
50
  };
48
51
  var _default = ButtonWrapper;
49
52
  exports.default = _default;