@carbon/ibm-products 1.45.0 → 1.46.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. package/css/index-full-carbon.css +28 -17
  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 +28 -17
  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 +28 -17
  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 +18 -228
  15. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +39 -268
  16. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +4 -4
  17. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +2 -1
  18. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +276 -0
  19. package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +6 -6
  20. package/es/components/Datagrid/useSortableColumns.js +16 -10
  21. package/es/components/Datagrid/utils/DatagridActions.js +2 -2
  22. package/lib/components/Datagrid/Datagrid/DatagridContent.js +2 -2
  23. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +22 -224
  24. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +44 -265
  25. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +4 -4
  26. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +8 -1
  27. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +280 -0
  28. package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +5 -5
  29. package/lib/components/Datagrid/useSortableColumns.js +9 -3
  30. package/lib/components/Datagrid/utils/DatagridActions.js +2 -2
  31. package/package.json +8 -8
  32. package/scss/components/Datagrid/styles/_useSortableColumns.scss +33 -17
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.default = void 0;
9
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
11
  var _iconsReact = require("@carbon/icons-react");
14
12
  var _carbonComponentsReact = require("carbon-components-react");
@@ -20,11 +18,16 @@ var _settings = require("../../../../../settings");
20
18
  var _ActionSet = require("../../../../ActionSet");
21
19
  var _constants = require("./constants");
22
20
  var _hooks2 = require("./hooks");
23
- var _utils = require("./utils");
24
21
  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); }
25
22
  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; }
26
- 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; }
27
- 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; }
23
+ // @flow
24
+ /**
25
+ * Copyright IBM Corp. 2022, 2023
26
+ *
27
+ * This source code is licensed under the Apache-2.0 license found in the
28
+ * LICENSE file in the root directory of this source tree.
29
+ */
30
+
28
31
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
29
32
  var componentClass = "".concat(blockClass, "-filter-flyout");
30
33
  var FilterFlyout = function FilterFlyout(_ref) {
@@ -57,20 +60,22 @@ var FilterFlyout = function FilterFlyout(_ref) {
57
60
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
58
61
  open = _useState2[0],
59
62
  setOpen = _useState2[1];
60
- var _useInitialStateFromF = (0, _hooks2.useInitialStateFromFilters)(filters, _constants.FLYOUT),
61
- _useInitialStateFromF2 = (0, _slicedToArray2.default)(_useInitialStateFromF, 2),
62
- filtersState = _useInitialStateFromF2[0],
63
- setFiltersState = _useInitialStateFromF2[1];
64
- var _useState3 = (0, _react.useState)([]),
65
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
66
- filtersObjectArray = _useState4[0],
67
- setFiltersObjectArray = _useState4[1];
63
+ var _useFilters = (0, _hooks2.useFilters)({
64
+ updateMethod: updateMethod,
65
+ filters: filters,
66
+ setAllFilters: setAllFilters,
67
+ variation: _constants.FLYOUT
68
+ }),
69
+ filtersState = _useFilters.filtersState,
70
+ prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
71
+ prevFiltersRef = _useFilters.prevFiltersRef,
72
+ revertToPreviousFilters = _useFilters.revertToPreviousFilters,
73
+ reset = _useFilters.reset,
74
+ renderFilter = _useFilters.renderFilter,
75
+ filtersObjectArray = _useFilters.filtersObjectArray;
68
76
 
69
77
  /** Refs */
70
78
  var filterFlyoutRef = (0, _react.useRef)(null);
71
- // When using batch actions we have to store the filters to then apply them later
72
- var prevFiltersRef = (0, _react.useRef)(JSON.stringify(filtersState));
73
- var prevFiltersObjectArrayRef = (0, _react.useRef)(JSON.stringify(filtersObjectArray));
74
79
  var _useShouldDisableButt = (0, _hooks2.useShouldDisableButtons)({
75
80
  initialValue: true,
76
81
  filtersState: filtersState,
@@ -113,88 +118,6 @@ var FilterFlyout = function FilterFlyout(_ref) {
113
118
  }
114
119
  closeFlyout();
115
120
  };
116
- var reset = function reset() {
117
- // Get the initial values for the filters
118
- var initialFiltersState = (0, _utils.getInitialStateFromFilters)(filters, _constants.FLYOUT);
119
- var initialFiltersObjectArray = [];
120
-
121
- // Set the state to the initial values
122
- setFiltersState(initialFiltersState);
123
- setFiltersObjectArray(initialFiltersObjectArray);
124
- setAllFilters([]);
125
-
126
- // Update their respective refs so everything is in sync
127
- prevFiltersRef.current = JSON.stringify(initialFiltersState);
128
- prevFiltersObjectArrayRef.current = JSON.stringify(initialFiltersObjectArray);
129
- };
130
-
131
- // If the user decides to cancel or click outside the flyout, it reverts back to the filters that were
132
- // there when they opened the flyout
133
- var revertToPreviousFilters = function revertToPreviousFilters() {
134
- setFiltersState(JSON.parse(prevFiltersRef.current));
135
- setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
136
- };
137
- var applyFilters = (0, _react.useCallback)(function (_ref2) {
138
- var column = _ref2.column,
139
- value = _ref2.value,
140
- type = _ref2.type;
141
- // If no end date is selected return because we need the end date to do computations
142
- if (type === _constants.DATE && !value[1]) {
143
- return;
144
- }
145
- var filtersObjectArrayCopy = (0, _toConsumableArray2.default)(filtersObjectArray);
146
- // check if the filter already exists in the array
147
- var filter = filtersObjectArrayCopy.find(function (item) {
148
- return item.id === column;
149
- });
150
-
151
- // if filter exists in array then update the filter's new value
152
- if (filter) {
153
- filter.value = value;
154
- } else {
155
- filtersObjectArrayCopy.push({
156
- id: column,
157
- value: value,
158
- type: type
159
- });
160
- }
161
- if (type === _constants.CHECKBOX) {
162
- /**
163
- When all checkboxes of a group are all unselected the value still exists in the filtersObjectArray
164
- This checks if all the checkboxes are selected = false and removes it from the array
165
- */
166
- var index = filtersObjectArrayCopy.findIndex(function (filter) {
167
- return filter.id === column;
168
- });
169
-
170
- // If all the selected state is false remove from array
171
- var shouldRemoveFromArray = filtersObjectArrayCopy[index].value.every(function (val) {
172
- return val.selected === false;
173
- });
174
- if (shouldRemoveFromArray) {
175
- filtersObjectArrayCopy.splice(index, 1);
176
- }
177
- } else if (type === _constants.DROPDOWN || type === _constants.RADIO) {
178
- if (value === 'Any') {
179
- /**
180
- Checks to see if the selected value is 'Any', that means the user wants
181
- to reset specific filter
182
- */
183
- var _index = filtersObjectArrayCopy.findIndex(function (filter) {
184
- return filter.id === column;
185
- });
186
-
187
- // Remove it from the filters array
188
- filtersObjectArrayCopy.splice(_index, 1);
189
- }
190
- }
191
- setFiltersObjectArray(filtersObjectArrayCopy);
192
-
193
- // Automatically apply the filters if the updateMethod is instant
194
- if (updateMethod === _constants.INSTANT) {
195
- setAllFilters(filtersObjectArrayCopy);
196
- }
197
- }, [setAllFilters, updateMethod, filtersObjectArray]);
198
121
 
199
122
  /** Effects */
200
123
  (0, _hooks.useClickOutside)(filterFlyoutRef, function (target) {
@@ -207,131 +130,6 @@ var FilterFlyout = function FilterFlyout(_ref) {
207
130
  });
208
131
  (0, _hooks2.useSubscribeToEventEmitter)(_constants.CLEAR_FILTERS, reset);
209
132
 
210
- /** Render the individual filter component */
211
- var renderFilter = function renderFilter(_ref3) {
212
- var type = _ref3.type,
213
- column = _ref3.column,
214
- components = _ref3.props;
215
- if (type === _constants.DATE) {
216
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePicker, (0, _extends2.default)({}, components.DatePicker, {
217
- onChange: function onChange(value) {
218
- var _components$DatePicke, _components$DatePicke2;
219
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
220
- value: value,
221
- type: type
222
- })));
223
- applyFilters({
224
- column: column,
225
- value: value,
226
- type: type
227
- });
228
- (_components$DatePicke = (_components$DatePicke2 = components.DatePicker).onChange) === null || _components$DatePicke === void 0 ? void 0 : _components$DatePicke.call(_components$DatePicke2, value);
229
- },
230
- value: filtersState[column].value,
231
- datePickerType: "range"
232
- }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePickerInput, (0, _extends2.default)({
233
- placeholder: "mm/dd/yyyy",
234
- labelText: "Start date"
235
- }, components.DatePickerInput.start)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePickerInput, (0, _extends2.default)({
236
- placeholder: "mm/dd/yyyy",
237
- labelText: "End date"
238
- }, components.DatePickerInput.end)));
239
- } else if (type === _constants.NUMBER) {
240
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.NumberInput, (0, _extends2.default)({
241
- step: 1,
242
- allowEmpty: true,
243
- hideSteppers: true
244
- }, components.NumberInput, {
245
- onChange: function onChange(event) {
246
- var _components$NumberInp, _components$NumberInp2;
247
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
248
- value: event.target.value,
249
- type: type
250
- })));
251
- applyFilters({
252
- column: column,
253
- value: event.target.value,
254
- type: type
255
- });
256
- (_components$NumberInp = (_components$NumberInp2 = components.NumberInput).onChange) === null || _components$NumberInp === void 0 ? void 0 : _components$NumberInp.call(_components$NumberInp2, event);
257
- },
258
- value: filtersState[column].value
259
- }));
260
- } else if (type === _constants.CHECKBOX) {
261
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
262
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, (0, _extends2.default)({
263
- key: option.labelText
264
- }, option, {
265
- onChange: function onChange(isSelected) {
266
- var _option$onChange;
267
- var checkboxCopy = filtersState[column].value;
268
- var foundCheckbox = checkboxCopy.find(function (checkbox) {
269
- return checkbox.value === option.value;
270
- });
271
- foundCheckbox.selected = isSelected;
272
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
273
- value: checkboxCopy,
274
- type: type
275
- })));
276
- applyFilters({
277
- column: column,
278
- value: (0, _toConsumableArray2.default)(filtersState[column].value),
279
- type: type
280
- });
281
- (_option$onChange = option.onChange) === null || _option$onChange === void 0 ? void 0 : _option$onChange.call(option, isSelected);
282
- },
283
- checked: option.selected
284
- }));
285
- }));
286
- } else if (type === _constants.RADIO) {
287
- var _filtersState$column, _filtersState$column2;
288
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButtonGroup, (0, _extends2.default)({}, components.RadioButtonGroup, {
289
- 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,
290
- onChange: function onChange(selected) {
291
- var _components$RadioButt, _components$RadioButt2;
292
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
293
- value: selected,
294
- type: type
295
- })));
296
- applyFilters({
297
- column: column,
298
- value: selected,
299
- type: type
300
- });
301
- (_components$RadioButt = (_components$RadioButt2 = components.RadioButtonGroup).onChange) === null || _components$RadioButt === void 0 ? void 0 : _components$RadioButt.call(_components$RadioButt2, selected);
302
- }
303
- }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, {
304
- id: "any",
305
- labelText: "Any",
306
- value: "Any"
307
- }), components.RadioButton.map(function (radio) {
308
- var _ref4, _radio$id;
309
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, (0, _extends2.default)({
310
- key: (_ref4 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref4 !== void 0 ? _ref4 : radio.value
311
- }, radio));
312
- })));
313
- } else if (type === _constants.DROPDOWN) {
314
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Dropdown, (0, _extends2.default)({}, components.Dropdown, {
315
- selectedItem: filtersState[column].value === '' ? 'Any' : filtersState[column].value,
316
- items: ['Any'].concat((0, _toConsumableArray2.default)(components.Dropdown.items)),
317
- onChange: function onChange(_ref5) {
318
- var _components$Dropdown$, _components$Dropdown;
319
- var selectedItem = _ref5.selectedItem;
320
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
321
- value: selectedItem,
322
- type: type
323
- })));
324
- applyFilters({
325
- column: column,
326
- value: selectedItem,
327
- type: type
328
- });
329
- (_components$Dropdown$ = (_components$Dropdown = components.Dropdown).onChange) === null || _components$Dropdown$ === void 0 ? void 0 : _components$Dropdown$.call(_components$Dropdown, selectedItem);
330
- }
331
- }));
332
- }
333
- };
334
-
335
133
  /** Renders all filters */
336
134
  var renderFilters = function renderFilters() {
337
135
  return filters.map(renderFilter);
@@ -346,7 +144,7 @@ var FilterFlyout = function FilterFlyout(_ref) {
346
144
  isExpressive: false,
347
145
  disabled: shouldDisableButtons
348
146
  }, {
349
- key: 3,
147
+ key: 2,
350
148
  kind: 'secondary',
351
149
  label: secondaryActionLabel,
352
150
  onClick: cancel,