@carbon/ibm-products 1.48.0 → 1.49.0

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