@carbon/ibm-products 1.42.1 → 1.44.0
Sign up to get free protection for your applications and to get access to all the features.
- package/css/index-full-carbon.css +158 -24
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +2 -2
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon.css +158 -24
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +2 -2
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +158 -24
- package/css/index.css.map +1 -1
- package/css/index.min.css +2 -2
- package/css/index.min.css.map +1 -1
- package/es/components/AddSelect/AddSelect.js +1 -1
- package/es/components/AddSelect/AddSelectBody.js +1 -1
- package/es/components/AddSelect/AddSelectColumn.js +1 -1
- package/es/components/Datagrid/Datagrid/Datagrid.js +3 -3
- package/es/components/Datagrid/Datagrid/DatagridContent.js +43 -15
- package/es/components/Datagrid/Datagrid/DatagridToolbar.js +2 -18
- package/es/components/Datagrid/Datagrid/DraggableElement.js +6 -4
- package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +6 -2
- package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +1 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +65 -34
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +436 -0
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +8 -2
- package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +9 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +2 -0
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +3 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useSubscribeToEventEmitter.js +23 -0
- package/es/components/Datagrid/Datagrid/addons/Filtering/index.js +3 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/motion/variants.js +55 -0
- package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +49 -17
- package/es/components/Datagrid/Datagrid.stories/index.js +0 -1
- package/es/components/Datagrid/useFiltering.js +10 -3
- package/es/components/Datagrid/utils/DatagridActions.js +59 -6
- package/lib/components/AddSelect/AddSelect.js +1 -1
- package/lib/components/AddSelect/AddSelectBody.js +1 -1
- package/lib/components/AddSelect/AddSelectColumn.js +1 -1
- package/lib/components/Datagrid/Datagrid/Datagrid.js +3 -3
- package/lib/components/Datagrid/Datagrid/DatagridContent.js +43 -15
- package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +2 -17
- package/lib/components/Datagrid/Datagrid/DraggableElement.js +5 -3
- package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +6 -2
- package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +1 -1
- package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +64 -31
- package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +445 -0
- package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +7 -1
- package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +15 -3
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +20 -0
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +3 -1
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useSubscribeToEventEmitter.js +30 -0
- package/lib/components/Datagrid/Datagrid/addons/Filtering/index.js +21 -1
- package/lib/components/Datagrid/Datagrid/addons/Filtering/motion/variants.js +64 -0
- package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +48 -17
- package/lib/components/Datagrid/Datagrid.stories/index.js +0 -7
- package/lib/components/Datagrid/useFiltering.js +10 -3
- package/lib/components/Datagrid/utils/DatagridActions.js +57 -4
- package/package.json +2 -2
- package/scss/components/Datagrid/styles/_datagrid.scss +18 -18
- package/scss/components/Datagrid/styles/_draggableElement.scss +16 -4
- package/scss/components/Datagrid/styles/_index.scss +1 -0
- package/scss/components/Datagrid/styles/_useInlineEdit.scss +7 -3
- package/scss/components/Datagrid/styles/addons/_CustomizeColumnsTearsheet.scss +5 -1
- package/scss/components/Datagrid/styles/addons/_FilterPanel.scss +123 -0
- package/scss/components/FilterSummary/_filter-summary.scss +1 -0
- package/es/components/Datagrid/Datagrid.stories/LeftPanelStory.js +0 -6
- package/lib/components/Datagrid/Datagrid.stories/LeftPanelStory.js +0 -13
@@ -19,8 +19,7 @@ var _hooks = require("../../../../../global/js/hooks");
|
|
19
19
|
var _settings = require("../../../../../settings");
|
20
20
|
var _ActionSet = require("../../../../ActionSet");
|
21
21
|
var _constants = require("./constants");
|
22
|
-
var
|
23
|
-
var _useInitialStateFromFilters = _interopRequireDefault(require("./hooks/useInitialStateFromFilters"));
|
22
|
+
var _hooks2 = require("./hooks");
|
24
23
|
var _utils = require("./utils");
|
25
24
|
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); }
|
26
25
|
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; }
|
@@ -50,17 +49,15 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
50
49
|
onCancel = _ref$onCancel === void 0 ? function () {} : _ref$onCancel,
|
51
50
|
_ref$secondaryActionL = _ref.secondaryActionLabel,
|
52
51
|
secondaryActionLabel = _ref$secondaryActionL === void 0 ? 'Cancel' : _ref$secondaryActionL,
|
53
|
-
setAllFilters = _ref.setAllFilters
|
54
|
-
|
55
|
-
|
56
|
-
EventEmitter = _useContext.EventEmitter;
|
57
|
-
|
52
|
+
setAllFilters = _ref.setAllFilters,
|
53
|
+
_ref$data = _ref.data,
|
54
|
+
data = _ref$data === void 0 ? [] : _ref$data;
|
58
55
|
/** State */
|
59
56
|
var _useState = (0, _react.useState)(false),
|
60
57
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
61
58
|
open = _useState2[0],
|
62
59
|
setOpen = _useState2[1];
|
63
|
-
var _useInitialStateFromF = (0,
|
60
|
+
var _useInitialStateFromF = (0, _hooks2.useInitialStateFromFilters)(filters, _constants.FLYOUT),
|
64
61
|
_useInitialStateFromF2 = (0, _slicedToArray2.default)(_useInitialStateFromF, 2),
|
65
62
|
filtersState = _useInitialStateFromF2[0],
|
66
63
|
setFiltersState = _useInitialStateFromF2[1];
|
@@ -90,6 +87,7 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
90
87
|
var apply = function apply() {
|
91
88
|
setAllFilters(filtersObjectArray);
|
92
89
|
closeFlyout();
|
90
|
+
// From the user
|
93
91
|
onApply();
|
94
92
|
|
95
93
|
// updates the ref so next time the flyout opens we have records of the previous filters
|
@@ -106,7 +104,7 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
106
104
|
};
|
107
105
|
var reset = function reset() {
|
108
106
|
// Get the initial values for the filters
|
109
|
-
var initialFiltersState = (0, _utils.getInitialStateFromFilters)(filters);
|
107
|
+
var initialFiltersState = (0, _utils.getInitialStateFromFilters)(filters, _constants.FLYOUT);
|
110
108
|
var initialFiltersObjectArray = [];
|
111
109
|
|
112
110
|
// Set the state to the initial values
|
@@ -149,6 +147,23 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
149
147
|
type: type
|
150
148
|
});
|
151
149
|
}
|
150
|
+
if (type === _constants.CHECKBOX) {
|
151
|
+
/**
|
152
|
+
When all checkboxes of a group are all unselected the value still exists in the filtersObjectArray
|
153
|
+
This checks if all the checkboxes are selected = false and removes it from the array
|
154
|
+
*/
|
155
|
+
var index = filtersObjectArrayCopy.findIndex(function (filter) {
|
156
|
+
return filter.id === column;
|
157
|
+
});
|
158
|
+
|
159
|
+
// If all the selected state is false remove from array
|
160
|
+
var shouldRemoveFromArray = filtersObjectArrayCopy[index].value.every(function (val) {
|
161
|
+
return val.selected === false;
|
162
|
+
});
|
163
|
+
if (shouldRemoveFromArray) {
|
164
|
+
filtersObjectArrayCopy.splice(index, 1);
|
165
|
+
}
|
166
|
+
}
|
152
167
|
setFiltersObjectArray(filtersObjectArrayCopy);
|
153
168
|
|
154
169
|
// Automatically apply the filters if the updateMethod is instant
|
@@ -160,18 +175,16 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
160
175
|
/** Effects */
|
161
176
|
(0, _hooks.useClickOutside)(filterFlyoutRef, function (target) {
|
162
177
|
var hasClickedOnDatePicker = target.closest('.flatpickr-calendar');
|
163
|
-
|
178
|
+
var hasClickedOnDropdown = target.className === 'bx--list-box__menu-item__option';
|
179
|
+
if (!open || hasClickedOnDatePicker || hasClickedOnDropdown) {
|
164
180
|
return;
|
165
181
|
}
|
166
182
|
cancel();
|
167
183
|
});
|
168
|
-
(0,
|
169
|
-
// This event is emitted from the DatagridToolbar component when clearFilters is clicked in FilterSummary
|
170
|
-
EventEmitter.subscribe(_constants.CLEAR_FILTERS, reset);
|
171
|
-
});
|
184
|
+
(0, _hooks2.useSubscribeToEventEmitter)(_constants.CLEAR_FILTERS, reset);
|
172
185
|
|
173
186
|
/** Render the individual filter component */
|
174
|
-
var renderFilter =
|
187
|
+
var renderFilter = function renderFilter(_ref3) {
|
175
188
|
var type = _ref3.type,
|
176
189
|
column = _ref3.column,
|
177
190
|
components = _ref3.props;
|
@@ -179,7 +192,10 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
179
192
|
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePicker, (0, _extends2.default)({}, components.DatePicker, {
|
180
193
|
onChange: function onChange(value) {
|
181
194
|
var _components$DatePicke, _components$DatePicke2;
|
182
|
-
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column,
|
195
|
+
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
|
196
|
+
value: value,
|
197
|
+
type: type
|
198
|
+
})));
|
183
199
|
applyFilters({
|
184
200
|
column: column,
|
185
201
|
value: value,
|
@@ -187,7 +203,7 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
187
203
|
});
|
188
204
|
(_components$DatePicke = (_components$DatePicke2 = components.DatePicker).onChange) === null || _components$DatePicke === void 0 ? void 0 : _components$DatePicke.call(_components$DatePicke2, value);
|
189
205
|
},
|
190
|
-
value: filtersState[column],
|
206
|
+
value: filtersState[column].value,
|
191
207
|
datePickerType: "range"
|
192
208
|
}), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePickerInput, (0, _extends2.default)({
|
193
209
|
placeholder: "mm/dd/yyyy",
|
@@ -204,7 +220,10 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
204
220
|
}, components.NumberInput, {
|
205
221
|
onChange: function onChange(event) {
|
206
222
|
var _components$NumberInp, _components$NumberInp2;
|
207
|
-
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column,
|
223
|
+
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
|
224
|
+
value: event.target.value,
|
225
|
+
type: type
|
226
|
+
})));
|
208
227
|
applyFilters({
|
209
228
|
column: column,
|
210
229
|
value: event.target.value,
|
@@ -212,24 +231,27 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
212
231
|
});
|
213
232
|
(_components$NumberInp = (_components$NumberInp2 = components.NumberInput).onChange) === null || _components$NumberInp === void 0 ? void 0 : _components$NumberInp.call(_components$NumberInp2, event);
|
214
233
|
},
|
215
|
-
value: filtersState[column]
|
234
|
+
value: filtersState[column].value
|
216
235
|
}));
|
217
236
|
} else if (type === _constants.CHECKBOX) {
|
218
|
-
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, filtersState[column].map(function (option) {
|
237
|
+
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
|
219
238
|
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, (0, _extends2.default)({
|
220
239
|
key: option.labelText
|
221
240
|
}, option, {
|
222
241
|
onChange: function onChange(isSelected) {
|
223
242
|
var _option$onChange;
|
224
|
-
var checkboxCopy = filtersState[column];
|
243
|
+
var checkboxCopy = filtersState[column].value;
|
225
244
|
var foundCheckbox = checkboxCopy.find(function (checkbox) {
|
226
245
|
return checkbox.value === option.value;
|
227
246
|
});
|
228
247
|
foundCheckbox.selected = isSelected;
|
229
|
-
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column,
|
248
|
+
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
|
249
|
+
value: checkboxCopy,
|
250
|
+
type: type
|
251
|
+
})));
|
230
252
|
applyFilters({
|
231
253
|
column: column,
|
232
|
-
value: (0, _toConsumableArray2.default)(filtersState[column]),
|
254
|
+
value: (0, _toConsumableArray2.default)(filtersState[column].value),
|
233
255
|
type: type
|
234
256
|
});
|
235
257
|
(_option$onChange = option.onChange) === null || _option$onChange === void 0 ? void 0 : _option$onChange.call(option, isSelected);
|
@@ -239,10 +261,13 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
239
261
|
}));
|
240
262
|
} else if (type === _constants.RADIO) {
|
241
263
|
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButtonGroup, (0, _extends2.default)({}, components.RadioButtonGroup, {
|
242
|
-
valueSelected: filtersState[column],
|
264
|
+
valueSelected: filtersState[column].value,
|
243
265
|
onChange: function onChange(selected) {
|
244
266
|
var _components$RadioButt, _components$RadioButt2;
|
245
|
-
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column,
|
267
|
+
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
|
268
|
+
value: selected,
|
269
|
+
type: type
|
270
|
+
})));
|
246
271
|
applyFilters({
|
247
272
|
column: column,
|
248
273
|
value: selected,
|
@@ -258,11 +283,14 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
258
283
|
})));
|
259
284
|
} else if (type === _constants.DROPDOWN) {
|
260
285
|
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Dropdown, (0, _extends2.default)({}, components.Dropdown, {
|
261
|
-
selectedItem: filtersState[column],
|
286
|
+
selectedItem: filtersState[column].value,
|
262
287
|
onChange: function onChange(_ref5) {
|
263
288
|
var _components$Dropdown$, _components$Dropdown;
|
264
289
|
var selectedItem = _ref5.selectedItem;
|
265
|
-
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column,
|
290
|
+
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
|
291
|
+
value: selectedItem,
|
292
|
+
type: type
|
293
|
+
})));
|
266
294
|
applyFilters({
|
267
295
|
column: column,
|
268
296
|
value: selectedItem,
|
@@ -272,12 +300,12 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
272
300
|
}
|
273
301
|
}));
|
274
302
|
}
|
275
|
-
}
|
303
|
+
};
|
276
304
|
|
277
305
|
/** Renders all filters */
|
278
|
-
var renderFilters =
|
306
|
+
var renderFilters = function renderFilters() {
|
279
307
|
return filters.map(renderFilter);
|
280
|
-
}
|
308
|
+
};
|
281
309
|
var renderActionSet = function renderActionSet() {
|
282
310
|
return showActionSet && /*#__PURE__*/_react.default.createElement(_ActionSet.ActionSet, {
|
283
311
|
actions: [{
|
@@ -306,7 +334,8 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
306
334
|
renderIcon: _iconsReact.Filter16,
|
307
335
|
iconDescription: flyoutIconDescription,
|
308
336
|
onClick: open ? closeFlyout : openFlyout,
|
309
|
-
className: (0, _classnames.default)("".concat(componentClass, "__trigger"), (0, _defineProperty2.default)({}, "".concat(componentClass, "__trigger--open"), open))
|
337
|
+
className: (0, _classnames.default)("".concat(componentClass, "__trigger"), (0, _defineProperty2.default)({}, "".concat(componentClass, "__trigger--open"), open)),
|
338
|
+
disabled: data.length === 0
|
310
339
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
311
340
|
ref: filterFlyoutRef,
|
312
341
|
className: (0, _classnames.default)(componentClass, (_cx2 = {}, (0, _defineProperty2.default)(_cx2, "".concat(componentClass, "--open"), open), (0, _defineProperty2.default)(_cx2, "".concat(componentClass, "--batch"), showActionSet), (0, _defineProperty2.default)(_cx2, "".concat(componentClass, "--instant"), !showActionSet), _cx2))
|
@@ -319,6 +348,10 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
319
348
|
}, renderFilters())), renderActionSet()));
|
320
349
|
};
|
321
350
|
FilterFlyout.propTypes = {
|
351
|
+
/**
|
352
|
+
* All data rows in the table
|
353
|
+
*/
|
354
|
+
data: _propTypes.default.array.isRequired,
|
322
355
|
/**
|
323
356
|
* Array of filters to render
|
324
357
|
*/
|