@carbon/ibm-products 1.44.1 → 1.46.0

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