@carbon/ibm-products 2.0.0-rc.20 → 2.0.0-rc.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. package/README.md +17 -0
  2. package/css/index-full-carbon.css +4933 -3007
  3. package/css/index-full-carbon.css.map +1 -1
  4. package/css/index-full-carbon.min.css +6 -4
  5. package/css/index-full-carbon.min.css.map +1 -1
  6. package/css/index-without-carbon-released-only.css +59 -32
  7. package/css/index-without-carbon-released-only.css.map +1 -1
  8. package/css/index-without-carbon-released-only.min.css +3 -3
  9. package/css/index-without-carbon-released-only.min.css.map +1 -1
  10. package/css/index-without-carbon.css +121 -63
  11. package/css/index-without-carbon.css.map +1 -1
  12. package/css/index-without-carbon.min.css +6 -4
  13. package/css/index-without-carbon.min.css.map +1 -1
  14. package/css/index.css +280 -101
  15. package/css/index.css.map +1 -1
  16. package/css/index.min.css +6 -4
  17. package/css/index.min.css.map +1 -1
  18. package/es/components/Card/CardFooter.js +2 -2
  19. package/es/components/Datagrid/Datagrid/DatagridContent.js +2 -2
  20. package/es/components/Datagrid/Datagrid/DatagridRow.js +42 -11
  21. package/es/components/Datagrid/Datagrid/DatagridSelectAll.js +20 -4
  22. package/es/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +18 -2
  23. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +19 -247
  24. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +41 -285
  25. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +4 -4
  26. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +1 -0
  27. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +310 -0
  28. package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +6 -6
  29. package/es/components/Datagrid/useActionsColumn.js +29 -1
  30. package/es/components/Datagrid/useDefaultStringRenderer.js +1 -1
  31. package/es/components/Datagrid/useNestedRows.js +2 -4
  32. package/es/components/Datagrid/useSelectAllToggle.js +18 -2
  33. package/es/components/Datagrid/useSelectRows.js +19 -2
  34. package/es/components/Datagrid/useStickyColumn.js +22 -5
  35. package/es/components/Datagrid/utils/DatagridActions.js +2 -2
  36. package/lib/components/Card/CardFooter.js +2 -2
  37. package/lib/components/Datagrid/Datagrid/DatagridContent.js +2 -2
  38. package/lib/components/Datagrid/Datagrid/DatagridRow.js +42 -11
  39. package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +27 -3
  40. package/lib/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +17 -1
  41. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +22 -243
  42. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +47 -284
  43. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +4 -4
  44. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +8 -0
  45. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +325 -0
  46. package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +5 -5
  47. package/lib/components/Datagrid/useActionsColumn.js +30 -1
  48. package/lib/components/Datagrid/useDefaultStringRenderer.js +1 -1
  49. package/lib/components/Datagrid/useNestedRows.js +2 -4
  50. package/lib/components/Datagrid/useSelectAllToggle.js +25 -2
  51. package/lib/components/Datagrid/useSelectRows.js +26 -2
  52. package/lib/components/Datagrid/useStickyColumn.js +22 -4
  53. package/lib/components/Datagrid/utils/DatagridActions.js +2 -2
  54. package/package.json +8 -8
  55. package/scss/components/Datagrid/styles/_datagrid.scss +27 -7
  56. package/scss/components/Datagrid/styles/_useNestedRows.scss +19 -0
  57. package/scss/components/Datagrid/styles/_useSelectAllToggle.scss +12 -8
  58. package/scss/components/Datagrid/styles/_useStickyColumn.scss +3 -3
  59. package/scss/components/OptionsTile/_options-tile.scss +10 -3
@@ -1,12 +1,5 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
-
6
- 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; }
7
-
8
- 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) { _defineProperty(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; }
9
-
10
3
  // @flow
11
4
 
12
5
  /**
@@ -16,16 +9,15 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
16
9
  * LICENSE file in the root directory of this source tree.
17
10
  */
18
11
  import { Filter } from '@carbon/react/icons';
19
- import { Button, Checkbox, DatePicker, DatePickerInput, Dropdown, FormGroup, NumberInput, RadioButton, RadioButtonGroup, usePrefix } from '@carbon/react';
12
+ import { Button, usePrefix } from '@carbon/react';
20
13
  import cx from 'classnames';
21
14
  import PropTypes from 'prop-types';
22
- import React, { useCallback, useRef, useState } from 'react';
15
+ import React, { useRef, useState } from 'react';
23
16
  import { useClickOutside } from '../../../../../global/js/hooks';
24
17
  import { pkg } from '../../../../../settings';
25
18
  import { ActionSet } from '../../../../ActionSet';
26
- import { BATCH, CHECKBOX, CLEAR_FILTERS, DATE, DROPDOWN, FLYOUT, INSTANT, NUMBER, RADIO } from './constants';
27
- import { useInitialStateFromFilters, useSubscribeToEventEmitter, useShouldDisableButtons } from './hooks';
28
- import { getInitialStateFromFilters } from './utils';
19
+ import { BATCH, CLEAR_FILTERS, FLYOUT, INSTANT } from './constants';
20
+ import { useSubscribeToEventEmitter, useFilters, useShouldDisableButtons } from './hooks';
29
21
  var blockClass = "".concat(pkg.prefix, "--datagrid");
30
22
  var componentClass = "".concat(blockClass, "-filter-flyout");
31
23
 
@@ -62,22 +54,23 @@ var FilterFlyout = function FilterFlyout(_ref) {
62
54
  open = _useState2[0],
63
55
  setOpen = _useState2[1];
64
56
 
65
- var _useInitialStateFromF = useInitialStateFromFilters(filters, FLYOUT),
66
- _useInitialStateFromF2 = _slicedToArray(_useInitialStateFromF, 2),
67
- filtersState = _useInitialStateFromF2[0],
68
- setFiltersState = _useInitialStateFromF2[1];
69
-
70
- var _useState3 = useState([]),
71
- _useState4 = _slicedToArray(_useState3, 2),
72
- filtersObjectArray = _useState4[0],
73
- setFiltersObjectArray = _useState4[1];
57
+ var _useFilters = useFilters({
58
+ updateMethod: updateMethod,
59
+ filters: filters,
60
+ setAllFilters: setAllFilters,
61
+ variation: FLYOUT
62
+ }),
63
+ filtersState = _useFilters.filtersState,
64
+ prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
65
+ prevFiltersRef = _useFilters.prevFiltersRef,
66
+ revertToPreviousFilters = _useFilters.revertToPreviousFilters,
67
+ reset = _useFilters.reset,
68
+ renderFilter = _useFilters.renderFilter,
69
+ filtersObjectArray = _useFilters.filtersObjectArray;
74
70
  /** Refs */
75
71
 
76
72
 
77
- var filterFlyoutRef = useRef(null); // When using batch actions we have to store the filters to then apply them later
78
-
79
- var prevFiltersRef = useRef(JSON.stringify(filtersState));
80
- var prevFiltersObjectArrayRef = useRef(JSON.stringify(filtersObjectArray));
73
+ var filterFlyoutRef = useRef(null);
81
74
  /** State from hooks */
82
75
 
83
76
  var _useShouldDisableButt = useShouldDisableButtons({
@@ -126,93 +119,9 @@ var FilterFlyout = function FilterFlyout(_ref) {
126
119
 
127
120
  closeFlyout();
128
121
  };
129
-
130
- var reset = function reset() {
131
- // Get the initial values for the filters
132
- var initialFiltersState = getInitialStateFromFilters(filters, FLYOUT);
133
- var initialFiltersObjectArray = []; // Set the state to the initial values
134
-
135
- setFiltersState(initialFiltersState);
136
- setFiltersObjectArray(initialFiltersObjectArray);
137
- setAllFilters([]); // Update their respective refs so everything is in sync
138
-
139
- prevFiltersRef.current = JSON.stringify(initialFiltersState);
140
- prevFiltersObjectArrayRef.current = JSON.stringify(initialFiltersObjectArray);
141
- }; // If the user decides to cancel or click outside the flyout, it reverts back to the filters that were
142
- // there when they opened the flyout
143
-
144
-
145
- var revertToPreviousFilters = function revertToPreviousFilters() {
146
- setFiltersState(JSON.parse(prevFiltersRef.current));
147
- setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
148
- };
149
-
150
- var applyFilters = useCallback(function (_ref2) {
151
- var column = _ref2.column,
152
- value = _ref2.value,
153
- type = _ref2.type;
154
-
155
- // If no end date is selected return because we need the end date to do computations
156
- if (type === DATE && !value[1]) {
157
- return;
158
- }
159
-
160
- var filtersObjectArrayCopy = _toConsumableArray(filtersObjectArray); // check if the filter already exists in the array
161
-
162
-
163
- var filter = filtersObjectArrayCopy.find(function (item) {
164
- return item.id === column;
165
- }); // if filter exists in array then update the filter's new value
166
-
167
- if (filter) {
168
- filter.value = value;
169
- } else {
170
- filtersObjectArrayCopy.push({
171
- id: column,
172
- value: value,
173
- type: type
174
- });
175
- }
176
-
177
- if (type === CHECKBOX) {
178
- /**
179
- When all checkboxes of a group are all unselected the value still exists in the filtersObjectArray
180
- This checks if all the checkboxes are selected = false and removes it from the array
181
- */
182
- var index = filtersObjectArrayCopy.findIndex(function (filter) {
183
- return filter.id === column;
184
- }); // If all the selected state is false remove from array
185
-
186
- var shouldRemoveFromArray = filtersObjectArrayCopy[index].value.every(function (val) {
187
- return val.selected === false;
188
- });
189
-
190
- if (shouldRemoveFromArray) {
191
- filtersObjectArrayCopy.splice(index, 1);
192
- }
193
- } else if (type === DROPDOWN || type === RADIO) {
194
- if (value === 'Any') {
195
- /**
196
- Checks to see if the selected value is 'Any', that means the user wants
197
- to reset specific filter
198
- */
199
- var _index = filtersObjectArrayCopy.findIndex(function (filter) {
200
- return filter.id === column;
201
- }); // Remove it from the filters array
202
-
203
-
204
- filtersObjectArrayCopy.splice(_index, 1);
205
- }
206
- }
207
-
208
- setFiltersObjectArray(filtersObjectArrayCopy); // Automatically apply the filters if the updateMethod is instant
209
-
210
- if (updateMethod === INSTANT) {
211
- setAllFilters(filtersObjectArrayCopy);
212
- }
213
- }, [setAllFilters, updateMethod, filtersObjectArray]);
214
122
  /** Effects */
215
123
 
124
+
216
125
  useClickOutside(filterFlyoutRef, function (target) {
217
126
  var hasClickedOnDatePicker = target.closest('.flatpickr-calendar');
218
127
  var hasClickedOnDropdown = target.className === "".concat(carbonPrefix, "--list-box__menu-item__option");
@@ -224,145 +133,8 @@ var FilterFlyout = function FilterFlyout(_ref) {
224
133
  cancel();
225
134
  });
226
135
  useSubscribeToEventEmitter(CLEAR_FILTERS, reset);
227
- /** Render the individual filter component */
228
-
229
- var renderFilter = function renderFilter(_ref3) {
230
- var type = _ref3.type,
231
- column = _ref3.column,
232
- components = _ref3.props;
233
-
234
- if (type === DATE) {
235
- return /*#__PURE__*/React.createElement(DatePicker, _extends({}, components.DatePicker, {
236
- onChange: function onChange(value) {
237
- var _components$DatePicke, _components$DatePicke2;
238
-
239
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
240
- value: value,
241
- type: type
242
- })));
243
- applyFilters({
244
- column: column,
245
- value: value,
246
- type: type
247
- });
248
- (_components$DatePicke = (_components$DatePicke2 = components.DatePicker).onChange) === null || _components$DatePicke === void 0 ? void 0 : _components$DatePicke.call(_components$DatePicke2, value);
249
- },
250
- value: filtersState[column].value,
251
- datePickerType: "range"
252
- }), /*#__PURE__*/React.createElement(DatePickerInput, _extends({
253
- placeholder: "mm/dd/yyyy",
254
- labelText: "Start date"
255
- }, components.DatePickerInput.start)), /*#__PURE__*/React.createElement(DatePickerInput, _extends({
256
- placeholder: "mm/dd/yyyy",
257
- labelText: "End date"
258
- }, components.DatePickerInput.end)));
259
- } else if (type === NUMBER) {
260
- return /*#__PURE__*/React.createElement(NumberInput, _extends({
261
- step: 1,
262
- allowEmpty: true,
263
- hideSteppers: true
264
- }, components.NumberInput, {
265
- onChange: function onChange(event) {
266
- var _components$NumberInp, _components$NumberInp2;
267
-
268
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
269
- value: event.target.value,
270
- type: type
271
- })));
272
- applyFilters({
273
- column: column,
274
- value: event.target.value,
275
- type: type
276
- });
277
- (_components$NumberInp = (_components$NumberInp2 = components.NumberInput).onChange) === null || _components$NumberInp === void 0 ? void 0 : _components$NumberInp.call(_components$NumberInp2, event);
278
- },
279
- value: filtersState[column].value
280
- }));
281
- } else if (type === CHECKBOX) {
282
- return /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
283
- return /*#__PURE__*/React.createElement(Checkbox, _extends({
284
- key: option.labelText
285
- }, option, {
286
- onChange: function onChange(_, _ref4) {
287
- var _option$onChange;
288
-
289
- var isSelected = _ref4.checked;
290
- var checkboxCopy = filtersState[column].value;
291
- var foundCheckbox = checkboxCopy.find(function (checkbox) {
292
- return checkbox.value === option.value;
293
- });
294
- foundCheckbox.selected = isSelected;
295
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
296
- value: checkboxCopy,
297
- type: type
298
- })));
299
- applyFilters({
300
- column: column,
301
- value: _toConsumableArray(filtersState[column].value),
302
- type: type
303
- });
304
- (_option$onChange = option.onChange) === null || _option$onChange === void 0 ? void 0 : _option$onChange.call(option, isSelected);
305
- },
306
- checked: option.selected
307
- }));
308
- }));
309
- } else if (type === RADIO) {
310
- var _filtersState$column, _filtersState$column2;
311
-
312
- return /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, /*#__PURE__*/React.createElement(RadioButtonGroup, _extends({}, components.RadioButtonGroup, {
313
- 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,
314
- onChange: function onChange(selected) {
315
- var _components$RadioButt, _components$RadioButt2;
316
-
317
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
318
- value: selected,
319
- type: type
320
- })));
321
- applyFilters({
322
- column: column,
323
- value: selected,
324
- type: type
325
- });
326
- (_components$RadioButt = (_components$RadioButt2 = components.RadioButtonGroup).onChange) === null || _components$RadioButt === void 0 ? void 0 : _components$RadioButt.call(_components$RadioButt2, selected);
327
- }
328
- }), /*#__PURE__*/React.createElement(RadioButton, {
329
- id: "any",
330
- labelText: "Any",
331
- value: "Any"
332
- }), components.RadioButton.map(function (radio) {
333
- var _ref5, _radio$id;
334
-
335
- return /*#__PURE__*/React.createElement(RadioButton, _extends({
336
- key: (_ref5 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref5 !== void 0 ? _ref5 : radio.value
337
- }, radio));
338
- })));
339
- } else if (type === DROPDOWN) {
340
- var _filtersState$column3, _filtersState$column4;
341
-
342
- return /*#__PURE__*/React.createElement(Dropdown, _extends({}, components.Dropdown, {
343
- selectedItem: ((_filtersState$column3 = filtersState[column]) === null || _filtersState$column3 === void 0 ? void 0 : _filtersState$column3.value) === '' ? 'Any' : (_filtersState$column4 = filtersState[column]) === null || _filtersState$column4 === void 0 ? void 0 : _filtersState$column4.value,
344
- items: ['Any'].concat(_toConsumableArray(components.Dropdown.items)),
345
- onChange: function onChange(_ref6) {
346
- var _components$Dropdown$, _components$Dropdown;
347
-
348
- var selectedItem = _ref6.selectedItem;
349
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
350
- value: selectedItem,
351
- type: type
352
- })));
353
- applyFilters({
354
- column: column,
355
- value: selectedItem,
356
- type: type
357
- });
358
- (_components$Dropdown$ = (_components$Dropdown = components.Dropdown).onChange) === null || _components$Dropdown$ === void 0 ? void 0 : _components$Dropdown$.call(_components$Dropdown, selectedItem);
359
- }
360
- }));
361
- }
362
- };
363
136
  /** Renders all filters */
364
137
 
365
-
366
138
  var renderFilters = function renderFilters() {
367
139
  return filters.map(renderFilter);
368
140
  };