@carbon/ibm-products 1.44.1 → 1.46.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 (36) hide show
  1. package/css/index-full-carbon.css +30 -19
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +1 -1
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon.css +30 -19
  6. package/css/index-without-carbon.css.map +1 -1
  7. package/css/index-without-carbon.min.css +1 -1
  8. package/css/index-without-carbon.min.css.map +1 -1
  9. package/css/index.css +30 -19
  10. package/css/index.css.map +1 -1
  11. package/css/index.min.css +1 -1
  12. package/css/index.min.css.map +1 -1
  13. package/es/components/Datagrid/Datagrid/DatagridContent.js +2 -2
  14. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +39 -217
  15. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +61 -258
  16. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +4 -4
  17. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +10 -1
  18. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +276 -0
  19. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useShouldDisableButtons.js +34 -0
  20. package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +6 -6
  21. package/es/components/Datagrid/useSortableColumns.js +16 -10
  22. package/es/components/Datagrid/utils/DatagridActions.js +6 -38
  23. package/lib/components/Datagrid/Datagrid/DatagridContent.js +2 -2
  24. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +37 -207
  25. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +60 -255
  26. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +4 -4
  27. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +15 -1
  28. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +280 -0
  29. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useShouldDisableButtons.js +41 -0
  30. package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +5 -5
  31. package/lib/components/Datagrid/useSortableColumns.js +9 -3
  32. package/lib/components/Datagrid/utils/DatagridActions.js +6 -38
  33. package/package.json +8 -8
  34. package/scss/components/Datagrid/styles/_datagrid.scss +1 -1
  35. package/scss/components/Datagrid/styles/_useSortableColumns.scss +33 -17
  36. package/scss/components/Datagrid/styles/addons/_RowSizeDropdown.scss +1 -1
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+ var _react = _interopRequireWildcard(require("react"));
14
+ var _carbonComponentsReact = require("carbon-components-react");
15
+ var _constants = require("../constants");
16
+ var _useInitialStateFromFilters = _interopRequireDefault(require("./useInitialStateFromFilters"));
17
+ var _utils = require("../utils");
18
+ 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); }
19
+ 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; }
20
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
22
+ var useFilters = function useFilters(_ref) {
23
+ var updateMethod = _ref.updateMethod,
24
+ _ref$filters = _ref.filters,
25
+ filters = _ref$filters === void 0 ? [] : _ref$filters,
26
+ setAllFilters = _ref.setAllFilters,
27
+ variation = _ref.variation;
28
+ /** State */
29
+ var _useInitialStateFromF = (0, _useInitialStateFromFilters.default)(filters, variation),
30
+ _useInitialStateFromF2 = (0, _slicedToArray2.default)(_useInitialStateFromF, 2),
31
+ filtersState = _useInitialStateFromF2[0],
32
+ setFiltersState = _useInitialStateFromF2[1];
33
+ var _useState = (0, _react.useState)([]),
34
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
35
+ filtersObjectArray = _useState2[0],
36
+ setFiltersObjectArray = _useState2[1];
37
+
38
+ // When using batch actions we have to store the filters to then apply them later
39
+ var prevFiltersRef = (0, _react.useRef)(JSON.stringify(filtersState));
40
+ var prevFiltersObjectArrayRef = (0, _react.useRef)(JSON.stringify(filtersObjectArray));
41
+
42
+ /** Methods */
43
+ // If the user decides to cancel or click outside the flyout, it reverts back to the filters that were
44
+ // there when they opened the flyout
45
+ var revertToPreviousFilters = function revertToPreviousFilters() {
46
+ setFiltersState(JSON.parse(prevFiltersRef.current));
47
+ setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
48
+ };
49
+ var reset = function reset() {
50
+ // Get the initial values for the filters
51
+ var initialFiltersState = (0, _utils.getInitialStateFromFilters)(filters, variation);
52
+ var initialFiltersObjectArray = [];
53
+
54
+ // Set the state to the initial values
55
+ setFiltersState(initialFiltersState);
56
+ setFiltersObjectArray(initialFiltersObjectArray);
57
+ setAllFilters([]);
58
+
59
+ // Update their respective refs so everything is in sync
60
+ prevFiltersRef.current = JSON.stringify(initialFiltersState);
61
+ prevFiltersObjectArrayRef.current = JSON.stringify(initialFiltersObjectArray);
62
+ };
63
+ var applyFilters = function applyFilters(_ref2) {
64
+ var column = _ref2.column,
65
+ value = _ref2.value,
66
+ type = _ref2.type;
67
+ // If no end date is selected return because we need the end date to do computations
68
+ if (type === _constants.DATE && value.length > 0 && !value[1]) {
69
+ return;
70
+ }
71
+ var filtersObjectArrayCopy = (0, _toConsumableArray2.default)(filtersObjectArray);
72
+ // // check if the filter already exists in the array
73
+ var filter = filtersObjectArrayCopy.find(function (item) {
74
+ return item.id === column;
75
+ });
76
+
77
+ // // if filter exists in array then update the filter's new value
78
+ if (filter) {
79
+ filter.value = value;
80
+ } else {
81
+ filtersObjectArrayCopy.push({
82
+ id: column,
83
+ value: value,
84
+ type: type
85
+ });
86
+ }
87
+
88
+ // ATTENTION: this is where you would reset or remove individual filters from the filters array
89
+ if (type === _constants.CHECKBOX) {
90
+ /**
91
+ When all checkboxes of a group are all unselected the value still exists in the filtersObjectArray
92
+ This checks if all the checkboxes are selected = false and removes it from the array
93
+ */
94
+ var index = filtersObjectArrayCopy.findIndex(function (filter) {
95
+ return filter.id === column;
96
+ });
97
+
98
+ // If all the selected state is false remove from array
99
+ var shouldRemoveFromArray = filtersObjectArrayCopy[index].value.every(function (val) {
100
+ return val.selected === false;
101
+ });
102
+ if (shouldRemoveFromArray) {
103
+ filtersObjectArrayCopy.splice(index, 1);
104
+ }
105
+ } else if (type === _constants.DATE) {
106
+ if (value.length === 0) {
107
+ /**
108
+ Checks to see if the date value is an empty array, if it is that means the user wants
109
+ to reset the date filter
110
+ */
111
+ var _index = filtersObjectArrayCopy.findIndex(function (filter) {
112
+ return filter.id === column;
113
+ });
114
+
115
+ // Remove it from the filters array since there is nothing to filter
116
+ filtersObjectArrayCopy.splice(_index, 1);
117
+ }
118
+ } else if (type === _constants.DROPDOWN || type === _constants.RADIO) {
119
+ if (value === 'Any') {
120
+ /**
121
+ Checks to see if the selected value is 'Any', that means the user wants
122
+ to reset specific filter
123
+ */
124
+ var _index2 = filtersObjectArrayCopy.findIndex(function (filter) {
125
+ return filter.id === column;
126
+ });
127
+
128
+ // Remove it from the filters array
129
+ filtersObjectArrayCopy.splice(_index2, 1);
130
+ }
131
+ }
132
+ setFiltersObjectArray(filtersObjectArrayCopy);
133
+
134
+ // // Automatically apply the filters if the updateMethod is instant
135
+ if (updateMethod === _constants.INSTANT) {
136
+ setAllFilters(filtersObjectArrayCopy);
137
+ }
138
+ };
139
+ /** Render the individual filter component */
140
+ var renderFilter = function renderFilter(_ref3) {
141
+ var _filtersState$column, _filtersState$column2;
142
+ var type = _ref3.type,
143
+ column = _ref3.column,
144
+ components = _ref3.props;
145
+ var isPanel = variation === _constants.PANEL;
146
+ switch (type) {
147
+ case _constants.DATE:
148
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePicker, (0, _extends2.default)({}, components.DatePicker, {
149
+ onChange: function onChange(value) {
150
+ var _components$DatePicke, _components$DatePicke2;
151
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
152
+ value: value,
153
+ type: type
154
+ })));
155
+ applyFilters({
156
+ column: column,
157
+ value: value,
158
+ type: type
159
+ });
160
+ (_components$DatePicke = (_components$DatePicke2 = components.DatePicker).onChange) === null || _components$DatePicke === void 0 ? void 0 : _components$DatePicke.call(_components$DatePicke2, value);
161
+ },
162
+ value: filtersState[column].value,
163
+ datePickerType: "range",
164
+ light: isPanel
165
+ }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePickerInput, (0, _extends2.default)({
166
+ placeholder: "mm/dd/yyyy",
167
+ labelText: "Start date"
168
+ }, components.DatePickerInput.start)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePickerInput, (0, _extends2.default)({
169
+ placeholder: "mm/dd/yyyy",
170
+ labelText: "End date"
171
+ }, components.DatePickerInput.end)));
172
+ case _constants.NUMBER:
173
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.NumberInput, (0, _extends2.default)({
174
+ step: 1,
175
+ allowEmpty: true,
176
+ hideSteppers: true
177
+ }, components.NumberInput, {
178
+ onChange: function onChange(event) {
179
+ var _components$NumberInp, _components$NumberInp2;
180
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
181
+ value: event.target.value,
182
+ type: type
183
+ })));
184
+ applyFilters({
185
+ column: column,
186
+ value: event.target.value,
187
+ type: type
188
+ });
189
+ (_components$NumberInp = (_components$NumberInp2 = components.NumberInput).onChange) === null || _components$NumberInp === void 0 ? void 0 : _components$NumberInp.call(_components$NumberInp2, event);
190
+ },
191
+ value: filtersState[column].value,
192
+ light: isPanel
193
+ }));
194
+ case _constants.CHECKBOX:
195
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
196
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, (0, _extends2.default)({
197
+ key: option.labelText
198
+ }, option, {
199
+ onChange: function onChange(isSelected) {
200
+ var _option$onChange;
201
+ var checkboxCopy = filtersState[column].value;
202
+ var foundCheckbox = checkboxCopy.find(function (checkbox) {
203
+ return checkbox.value === option.value;
204
+ });
205
+ foundCheckbox.selected = isSelected;
206
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
207
+ value: checkboxCopy,
208
+ type: type
209
+ })));
210
+ applyFilters({
211
+ column: column,
212
+ value: (0, _toConsumableArray2.default)(filtersState[column].value),
213
+ type: type
214
+ });
215
+ (_option$onChange = option.onChange) === null || _option$onChange === void 0 ? void 0 : _option$onChange.call(option, isSelected);
216
+ },
217
+ checked: option.selected
218
+ }));
219
+ }));
220
+ case _constants.RADIO:
221
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButtonGroup, (0, _extends2.default)({}, components.RadioButtonGroup, {
222
+ valueSelected: ((_filtersState$column = filtersState[column]) === null || _filtersState$column === void 0 ? void 0 : _filtersState$column.value) === '' ? 'Any' : (_filtersState$column2 = filtersState[column]) === null || _filtersState$column2 === void 0 ? void 0 : _filtersState$column2.value,
223
+ onChange: function onChange(selected) {
224
+ var _components$RadioButt, _components$RadioButt2;
225
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
226
+ value: selected,
227
+ type: type
228
+ })));
229
+ applyFilters({
230
+ column: column,
231
+ value: selected,
232
+ type: type
233
+ });
234
+ (_components$RadioButt = (_components$RadioButt2 = components.RadioButtonGroup).onChange) === null || _components$RadioButt === void 0 ? void 0 : _components$RadioButt.call(_components$RadioButt2, selected);
235
+ }
236
+ }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, {
237
+ id: "any",
238
+ labelText: "Any",
239
+ value: "Any"
240
+ }), components.RadioButton.map(function (radio) {
241
+ var _ref4, _radio$id;
242
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, (0, _extends2.default)({
243
+ key: (_ref4 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref4 !== void 0 ? _ref4 : radio.value
244
+ }, radio));
245
+ })));
246
+ case _constants.DROPDOWN:
247
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Dropdown, (0, _extends2.default)({}, components.Dropdown, {
248
+ items: ['Any'].concat((0, _toConsumableArray2.default)(components.Dropdown.items)),
249
+ selectedItem: filtersState[column].value === '' ? 'Any' : filtersState[column].value,
250
+ onChange: function onChange(_ref5) {
251
+ var _components$Dropdown$, _components$Dropdown;
252
+ var selectedItem = _ref5.selectedItem;
253
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
254
+ value: selectedItem,
255
+ type: type
256
+ })));
257
+ applyFilters({
258
+ column: column,
259
+ value: selectedItem,
260
+ type: type
261
+ });
262
+ (_components$Dropdown$ = (_components$Dropdown = components.Dropdown).onChange) === null || _components$Dropdown$ === void 0 ? void 0 : _components$Dropdown$.call(_components$Dropdown, selectedItem);
263
+ },
264
+ light: isPanel
265
+ }));
266
+ }
267
+ };
268
+ return {
269
+ filtersState: filtersState,
270
+ setFiltersState: setFiltersState,
271
+ prevFiltersObjectArrayRef: prevFiltersObjectArrayRef,
272
+ prevFiltersRef: prevFiltersRef,
273
+ revertToPreviousFilters: revertToPreviousFilters,
274
+ reset: reset,
275
+ renderFilter: renderFilter,
276
+ filtersObjectArray: filtersObjectArray
277
+ };
278
+ };
279
+ var _default = useFilters;
280
+ exports.default = _default;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _react = require("react");
10
+ var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
11
+ /**
12
+ * Copyright IBM Corp. 2023, 2023
13
+ *
14
+ * This source code is licensed under the Apache-2.0 license found in the
15
+ * LICENSE file in the root directory of this source tree.
16
+ */
17
+ /* eslint-disable jsdoc/check-param-names */
18
+
19
+ /**
20
+ * Keeps track of the button disabled state
21
+ * @param {string} initialValue - the initial value if the buttons should be enabled or disabled
22
+ * @param {object} filtersState - the filter state from the filter panel or flyout
23
+ * @param {object} prevFiltersRef - reference of the prev filterState
24
+ * @returns {Array} returns a tuple of the state and setter function
25
+ */
26
+ var useShouldDisableButtons = function useShouldDisableButtons(_ref) {
27
+ var _ref$initialValue = _ref.initialValue,
28
+ initialValue = _ref$initialValue === void 0 ? true : _ref$initialValue,
29
+ filtersState = _ref.filtersState,
30
+ prevFiltersRef = _ref.prevFiltersRef;
31
+ var _useState = (0, _react.useState)(initialValue),
32
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
33
+ shouldDisableButtons = _useState2[0],
34
+ setShouldDisableButtons = _useState2[1];
35
+ (0, _react.useEffect)(function updateDisabledButtonsState() {
36
+ setShouldDisableButtons((0, _isEqual.default)(filtersState, JSON.parse(prevFiltersRef.current)));
37
+ }, [filtersState, prevFiltersRef]);
38
+ return [shouldDisableButtons, setShouldDisableButtons];
39
+ };
40
+ var _default = useShouldDisableButtons;
41
+ exports.default = _default;
@@ -20,7 +20,7 @@ var getInitialStateFromFilters = function getInitialStateFromFilters(filters) {
20
20
  var type = _ref.type,
21
21
  column = _ref.column,
22
22
  props = _ref.props;
23
- if (type === 'checkbox') {
23
+ if (type === _constants.CHECKBOX) {
24
24
  initialFilterState[column] = {
25
25
  value: props.Checkbox.map(function (_ref2) {
26
26
  var id = _ref2.id,
@@ -35,22 +35,22 @@ var getInitialStateFromFilters = function getInitialStateFromFilters(filters) {
35
35
  }),
36
36
  type: type
37
37
  };
38
- } else if (type === 'date') {
38
+ } else if (type === _constants.DATE) {
39
39
  initialFilterState[column] = {
40
40
  value: [null, null],
41
41
  type: type
42
42
  };
43
- } else if (type === 'number') {
43
+ } else if (type === _constants.NUMBER) {
44
44
  initialFilterState[column] = {
45
45
  value: '',
46
46
  type: type
47
47
  };
48
- } else if (type === 'radio') {
48
+ } else if (type === _constants.RADIO) {
49
49
  initialFilterState[column] = {
50
50
  value: '',
51
51
  type: type
52
52
  };
53
- } else if (type === 'dropdown') {
53
+ } else if (type === _constants.DROPDOWN) {
54
54
  initialFilterState[column] = {
55
55
  value: '',
56
56
  type: type
@@ -8,10 +8,13 @@ exports.default = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
10
  var _react = _interopRequireDefault(require("react"));
11
+ var _classnames = _interopRequireDefault(require("classnames"));
12
+ var _settings = require("../../settings");
11
13
  var _carbonComponentsReact = require("carbon-components-react");
12
14
  var _iconsReact = require("@carbon/icons-react");
13
15
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14
16
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17
+ var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
15
18
  var ordering = {
16
19
  ASC: 'ASC',
17
20
  DESC: 'DESC',
@@ -39,7 +42,7 @@ var useSortableColumns = function useSortableColumns(hooks) {
39
42
  case false:
40
43
  return _iconsReact.ArrowUp16;
41
44
  case true:
42
- return _iconsReact.ArrowDown16;
45
+ return _iconsReact.ArrowUp16;
43
46
  default:
44
47
  return _iconsReact.Arrows16;
45
48
  }
@@ -47,16 +50,19 @@ var useSortableColumns = function useSortableColumns(hooks) {
47
50
  return _iconsReact.Arrows16;
48
51
  };
49
52
  var Header = function Header(headerProp) {
53
+ var _cx;
50
54
  return column.disableSortBy === true ? column.Header : /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
51
55
  onClick: function onClick() {
52
56
  return onSortClick(headerProp.column);
53
57
  },
54
58
  kind: "ghost",
55
- renderIcon: icon(headerProp.column)
59
+ renderIcon: icon(headerProp.column),
60
+ className: (0, _classnames.default)("".concat(_settings.carbon.prefix, "--table-sort ").concat(blockClass, "--table-sort"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--table-sort--desc"), headerProp.column.isSortedDesc), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--table-sort--asc"), headerProp.column.isSortedDesc === false), _cx))
56
61
  }, column.Header);
57
62
  };
58
63
  return _objectSpread(_objectSpread({}, column), {}, {
59
- Header: Header
64
+ Header: Header,
65
+ minWidth: column.disableSortBy === true ? 0 : 90
60
66
  });
61
67
  });
62
68
  return (0, _toConsumableArray2.default)(sortableColumns);
@@ -26,7 +26,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
26
26
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
27
27
  var DatagridActions = function DatagridActions(datagridState) {
28
28
  var _useContext = (0, _react.useContext)(_Filtering.FilterContext),
29
- setLeftPanelOpen = _useContext.setLeftPanelOpen;
29
+ setPanelOpen = _useContext.setPanelOpen;
30
30
  var selectedFlatRows = datagridState.selectedFlatRows,
31
31
  setGlobalFilter = datagridState.setGlobalFilter,
32
32
  CustomizeColumnsButton = datagridState.CustomizeColumnsButton,
@@ -68,7 +68,7 @@ var DatagridActions = function DatagridActions(datagridState) {
68
68
  iconDescription: filterProps.panelIconDescription,
69
69
  className: "".concat(blockClass, "-filter-panel-open-button"),
70
70
  onClick: function onClick() {
71
- return setLeftPanelOpen(function (open) {
71
+ return setPanelOpen(function (open) {
72
72
  return !open;
73
73
  });
74
74
  },
@@ -150,7 +150,7 @@ var DatagridActions = function DatagridActions(datagridState) {
150
150
  onChange: function onChange(e) {
151
151
  return setGlobalFilter(e.target.value);
152
152
  }
153
- }), renderFilterFlyout(), /*#__PURE__*/_react.default.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/_react.default.createElement("div", {
153
+ }), renderFilterFlyout(), /*#__PURE__*/_react.default.createElement("div", {
154
154
  style: style
155
155
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
156
156
  kind: "ghost",
@@ -170,7 +170,7 @@ var DatagridActions = function DatagridActions(datagridState) {
170
170
  onClick: downloadCsv
171
171
  })), CustomizeColumnsButton && /*#__PURE__*/_react.default.createElement("div", {
172
172
  style: style
173
- }, /*#__PURE__*/_react.default.createElement(CustomizeColumnsButton, null)), /*#__PURE__*/_react.default.createElement(_ButtonMenu.ButtonMenu, {
173
+ }, /*#__PURE__*/_react.default.createElement(CustomizeColumnsButton, null)), /*#__PURE__*/_react.default.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/_react.default.createElement(_ButtonMenu.ButtonMenu, {
174
174
  label: "Primary button",
175
175
  size: "lg",
176
176
  light: true,
@@ -184,7 +184,7 @@ var DatagridActions = function DatagridActions(datagridState) {
184
184
  }), /*#__PURE__*/_react.default.createElement(_ButtonMenu.ButtonMenuItem, {
185
185
  itemText: "Option 3",
186
186
  onClick: (0, _addonActions.action)("Click on ButtonMenu Option 3")
187
- }))) : /*#__PURE__*/_react.default.createElement(TableToolbarContent, null, renderFilterPanelButton(), /*#__PURE__*/_react.default.createElement(TableToolbarSearch, {
187
+ }))) : /*#__PURE__*/_react.default.createElement(TableToolbarContent, null, /*#__PURE__*/_react.default.createElement(TableToolbarSearch, {
188
188
  size: "xl",
189
189
  id: "columnSearch",
190
190
  persistent: true,
@@ -192,39 +192,7 @@ var DatagridActions = function DatagridActions(datagridState) {
192
192
  onChange: function onChange(e) {
193
193
  return setGlobalFilter(e.target.value);
194
194
  }
195
- }), renderFilterFlyout(), /*#__PURE__*/_react.default.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/_react.default.createElement("div", {
196
- style: style
197
- }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
198
- kind: "ghost",
199
- hasIconOnly: true,
200
- tooltipPosition: "bottom",
201
- renderIcon: _iconsReact.Restart16,
202
- iconDescription: 'Refresh',
203
- onClick: refreshColumns
204
- })), /*#__PURE__*/_react.default.createElement("div", {
205
- style: style
206
- }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
207
- kind: "ghost",
208
- hasIconOnly: true,
209
- tooltipPosition: "bottom",
210
- renderIcon: _iconsReact.Download16,
211
- iconDescription: 'Download CSV',
212
- onClick: downloadCsv
213
- })), CustomizeColumnsButton && /*#__PURE__*/_react.default.createElement("div", {
214
- style: style
215
- }, /*#__PURE__*/_react.default.createElement(CustomizeColumnsButton, null)), /*#__PURE__*/_react.default.createElement(_ButtonMenu.ButtonMenu, {
216
- label: "Primary button",
217
- renderIcon: _iconsReact.Add16
218
- }, /*#__PURE__*/_react.default.createElement(_ButtonMenu.ButtonMenuItem, {
219
- itemText: "Option 1",
220
- onClick: (0, _addonActions.action)("Click on ButtonMenu Option 1")
221
- }), /*#__PURE__*/_react.default.createElement(_ButtonMenu.ButtonMenuItem, {
222
- itemText: "Option 2",
223
- onClick: (0, _addonActions.action)("Click on ButtonMenu Option 2")
224
- }), /*#__PURE__*/_react.default.createElement(_ButtonMenu.ButtonMenuItem, {
225
- itemText: "Option 3",
226
- onClick: (0, _addonActions.action)("Click on ButtonMenu Option 3")
227
- })), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, {
195
+ }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, {
228
196
  ariaLabel: "Tools",
229
197
  size: "lg",
230
198
  flipped: true,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/ibm-products",
3
3
  "description": "Carbon for IBM Products",
4
- "version": "1.44.1",
4
+ "version": "1.46.0",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
@@ -53,21 +53,21 @@
53
53
  "devDependencies": {
54
54
  "@babel/cli": "^7.20.7",
55
55
  "@babel/core": "^7.20.12",
56
- "babel-preset-ibm-cloud-cognitive": "^0.14.26",
56
+ "babel-preset-ibm-cloud-cognitive": "^0.14.27",
57
57
  "chalk": "^4.1.2",
58
58
  "change-case": "^4.1.2",
59
59
  "copyfiles": "^2.4.1",
60
60
  "cross-env": "^7.0.3",
61
61
  "fs-extra": "^11.1.0",
62
62
  "glob": "^8.1.0",
63
- "jest": "^29.4.1",
64
- "jest-config-ibm-cloud-cognitive": "^0.24.12",
65
- "jest-environment-jsdom": "^29.4.1",
63
+ "jest": "^29.4.2",
64
+ "jest-config-ibm-cloud-cognitive": "^0.24.13",
65
+ "jest-environment-jsdom": "^29.4.2",
66
66
  "namor": "^1.1.2",
67
- "npm-check-updates": "^16.6.3",
67
+ "npm-check-updates": "^16.7.4",
68
68
  "npm-run-all": "^4.1.5",
69
69
  "rimraf": "~3 || > 4.1",
70
- "sass": "^1.58.0",
70
+ "sass": "^1.58.1",
71
71
  "yargs": "^17.6.2"
72
72
  },
73
73
  "dependencies": {
@@ -95,5 +95,5 @@
95
95
  "react": "^16.8.6 || ^17.0.1",
96
96
  "react-dom": "^16.8.6 || ^17.0.1"
97
97
  },
98
- "gitHead": "fc263168325ad92efaa868582b43760e317d9a33"
98
+ "gitHead": "ff776c9f98e52d84bf0f50a60bb113e3d6f64c10"
99
99
  }
@@ -447,7 +447,7 @@
447
447
  }
448
448
 
449
449
  .#{$block-class}__table-toolbar {
450
- flex: 0 0 auto;
450
+ flex: 1 0 auto;
451
451
  }
452
452
  .#{$carbon-prefix}--table-toolbar {
453
453
  background: transparent;
@@ -1,10 +1,9 @@
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.
7
- */
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.
6
+ */
8
7
 
9
8
  @import './variables';
10
9
 
@@ -18,38 +17,55 @@
18
17
  width: 100%;
19
18
  height: 100%;
20
19
  }
21
- .#{$carbon-prefix}--table-header-label button:focus,
22
- .#{$carbon-prefix}--table-header-label button:active,
23
- .#{$carbon-prefix}--table-header-label button:focus svg {
20
+ .#{$carbon-prefix}--table-header-label .#{$carbon-prefix}--table-sort:focus,
21
+ .#{$carbon-prefix}--table-header-label .#{$carbon-prefix}--table-sort:active,
22
+ .#{$carbon-prefix}--table-header-label
23
+ .#{$carbon-prefix}--table-sort:focus
24
+ svg {
24
25
  /* stylelint-disable-next-line declaration-no-important */
25
26
  background: none !important;
26
27
  /* stylelint-disable-next-line declaration-no-important */
27
28
  color: $text-01 !important;
28
- /* stylelint-disable-next-line declaration-no-important */
29
- outline: none !important;
30
29
  }
31
- .#{$carbon-prefix}--table-header-label button {
30
+ .#{$carbon-prefix}--table-header-label .#{$carbon-prefix}--table-sort:focus,
31
+ .#{$carbon-prefix}--table-header-label .#{$carbon-prefix}--table-sort:active {
32
+ + .#{$block-class}__resizer {
33
+ z-index: -1;
34
+ }
35
+ }
36
+ .#{$carbon-prefix}--table-header-label .#{$carbon-prefix}--table-sort {
32
37
  width: 100%;
33
38
  min-width: 100%;
34
- min-height: 0;
35
- padding: 0;
39
+ padding: 0 $spacing-05;
36
40
  border: none;
37
41
  /* stylelint-disable-next-line declaration-no-important */
38
42
  background: none !important;
39
- box-shadow: none;
40
43
  /* stylelint-disable-next-line declaration-no-important */
41
44
  color: $text-01 !important;
42
45
  font: inherit;
43
46
  }
44
- .#{$carbon-prefix}--table-header-label button svg {
47
+ .#{$carbon-prefix}--table-header-label .#{$carbon-prefix}--table-sort svg {
45
48
  fill: $text-01;
49
+ opacity: 0;
50
+ transition: transform $duration--fast-02 motion(standard, productive);
46
51
  visibility: hidden;
47
52
  }
53
+
54
+ .#{$carbon-prefix}--table-sort.#{$block-class}--table-sort {
55
+ width: calc(100% + #{$spacing-07}); // offset due to inner label
56
+ margin: 0 calc(-1 * #{$spacing-05}); // fill width of parent table column header
57
+ }
48
58
  }
49
59
 
50
60
  .#{$block-class}__sortableColumn:hover,
61
+ .#{$block-class}__sortableColumn:focus-within,
51
62
  .#{$block-class}__sortableColumn.#{$block-class}__isSorted {
52
63
  .#{$carbon-prefix}--table-header-label svg {
64
+ opacity: 1;
53
65
  visibility: visible;
54
66
  }
55
67
  }
68
+
69
+ .#{$block-class}__sortableColumn .#{$block-class}--table-sort--desc svg {
70
+ transform: rotate(180deg);
71
+ }
@@ -16,7 +16,7 @@
16
16
  box-shadow: 1px 4px 8px -3px $overlay-01, -1px 6px 8px -5px $overlay-01;
17
17
  }
18
18
 
19
- .#{$block-class}__row-size-button--open {
19
+ .#{$carbon-prefix}--btn--ghost.#{$block-class}__row-size-button--open {
20
20
  background-color: $ui-background;
21
21
 
22
22
  box-shadow: 1px 4px 8px -3px $overlay-01, -1px 6px 8px -5px $overlay-01;