@carbon/ibm-products 1.63.0 → 1.64.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 (29) hide show
  1. package/css/index-full-carbon.css +21 -0
  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 +21 -0
  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 +21 -0
  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 -1
  14. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +2 -2
  15. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +6 -2
  16. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +54 -30
  17. package/es/components/Datagrid/useFiltering.js +2 -1
  18. package/es/components/Guidebanner/Guidebanner.js +12 -3
  19. package/es/components/InlineTip/InlineTip.js +17 -6
  20. package/lib/components/Datagrid/Datagrid/DatagridContent.js +2 -1
  21. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +2 -2
  22. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +6 -2
  23. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +54 -30
  24. package/lib/components/Datagrid/useFiltering.js +2 -1
  25. package/lib/components/Guidebanner/Guidebanner.js +12 -3
  26. package/lib/components/InlineTip/InlineTip.js +17 -6
  27. package/package.json +2 -2
  28. package/scss/components/Guidebanner/_guidebanner.scss +25 -0
  29. package/scss/components/InlineTip/_inline-tip.scss +12 -0
@@ -55,7 +55,9 @@ var FilterPanel = function FilterPanel(_ref) {
55
55
  _ref$searchPlaceholde = _ref.searchPlaceholder,
56
56
  searchPlaceholder = _ref$searchPlaceholde === void 0 ? 'Find filters' : _ref$searchPlaceholde,
57
57
  _ref$reactTableFilter = _ref.reactTableFiltersState,
58
- reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter;
58
+ reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter,
59
+ _ref$isFetching = _ref.isFetching,
60
+ isFetching = _ref$isFetching === void 0 ? false : _ref$isFetching;
59
61
  /** State */
60
62
  var _useState = useState(false),
61
63
  _useState2 = _slicedToArray(_useState, 2),
@@ -73,7 +75,8 @@ var FilterPanel = function FilterPanel(_ref) {
73
75
  variation: PANEL,
74
76
  reactTableFiltersState: reactTableFiltersState,
75
77
  onCancel: onCancel,
76
- panelOpen: panelOpen
78
+ panelOpen: panelOpen,
79
+ isFetching: isFetching
77
80
  }),
78
81
  filtersState = _useFilters.filtersState,
79
82
  prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
@@ -238,6 +241,7 @@ FilterPanel.propTypes = {
238
241
  closeIconDescription: PropTypes.string,
239
242
  filterPanelMinHeight: PropTypes.number,
240
243
  filterSections: PropTypes.array,
244
+ isFetching: PropTypes.bool,
241
245
  onApply: PropTypes.func,
242
246
  onCancel: PropTypes.func,
243
247
  onPanelClose: PropTypes.func,
@@ -25,16 +25,21 @@ var useFilters = function useFilters(_ref) {
25
25
  reactTableFiltersState = _ref.reactTableFiltersState,
26
26
  _ref$onCancel = _ref.onCancel,
27
27
  onCancel = _ref$onCancel === void 0 ? function () {} : _ref$onCancel,
28
- panelOpen = _ref.panelOpen;
28
+ panelOpen = _ref.panelOpen,
29
+ isFetching = _ref.isFetching;
29
30
  /** State */
30
31
  var _useState = useState(getInitialStateFromFilters(filters, variation, reactTableFiltersState)),
31
32
  _useState2 = _slicedToArray(_useState, 2),
32
33
  filtersState = _useState2[0],
33
34
  setFiltersState = _useState2[1];
34
- var _useState3 = useState(reactTableFiltersState),
35
+ var _useState3 = useState(false),
35
36
  _useState4 = _slicedToArray(_useState3, 2),
36
- filtersObjectArray = _useState4[0],
37
- setFiltersObjectArray = _useState4[1];
37
+ fetchingReset = _useState4[0],
38
+ setFetchingReset = _useState4[1];
39
+ var _useState5 = useState(reactTableFiltersState),
40
+ _useState6 = _slicedToArray(_useState5, 2),
41
+ filtersObjectArray = _useState6[0],
42
+ setFiltersObjectArray = _useState6[1];
38
43
  var previousState = usePreviousValue({
39
44
  panelOpen: panelOpen
40
45
  });
@@ -77,6 +82,7 @@ var useFilters = function useFilters(_ref) {
77
82
  // Update their respective refs so everything is in sync
78
83
  prevFiltersRef.current = JSON.stringify(initialFiltersState);
79
84
  prevFiltersObjectArrayRef.current = JSON.stringify(initialFiltersObjectArray);
85
+ lastAppliedFilters.current = JSON.stringify([]);
80
86
  }, [filters, setAllFilters, variation]);
81
87
  var applyFilters = function applyFilters(_ref2) {
82
88
  var column = _ref2.column,
@@ -167,7 +173,6 @@ var useFilters = function useFilters(_ref) {
167
173
  };
168
174
  /** Render the individual filter component */
169
175
  var renderFilter = function renderFilter(_ref3) {
170
- var _filtersState$column, _filtersState$column2;
171
176
  var type = _ref3.type,
172
177
  column = _ref3.column,
173
178
  components = _ref3.props;
@@ -254,31 +259,36 @@ var useFilters = function useFilters(_ref) {
254
259
  }));
255
260
  break;
256
261
  case RADIO:
257
- filter = /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, /*#__PURE__*/React.createElement(RadioButtonGroup, _extends({}, components.RadioButtonGroup, {
258
- 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,
259
- onChange: function onChange(selected) {
260
- var _components$RadioButt, _components$RadioButt2;
261
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
262
- value: selected,
263
- type: type
264
- })));
265
- applyFilters({
266
- column: column,
267
- value: selected,
268
- type: type
269
- });
270
- (_components$RadioButt = (_components$RadioButt2 = components.RadioButtonGroup).onChange) === null || _components$RadioButt === void 0 ? void 0 : _components$RadioButt.call(_components$RadioButt2, selected);
271
- }
272
- }), /*#__PURE__*/React.createElement(RadioButton, {
273
- id: "any",
274
- labelText: "Any",
275
- value: "Any"
276
- }), components.RadioButton.map(function (radio) {
277
- var _ref4, _radio$id;
278
- return /*#__PURE__*/React.createElement(RadioButton, _extends({
279
- key: (_ref4 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref4 !== void 0 ? _ref4 : radio.value
280
- }, radio));
281
- })));
262
+ {
263
+ var _filtersState$column, _components$DefaultRa, _components$DefaultRa2, _filtersState$column2, _components$DefaultRa3, _components$DefaultRa4, _components$DefaultRa5, _components$DefaultRa6, _components$DefaultRa7, _components$DefaultRa8;
264
+ var _components$RadioButt = _objectSpread({}, components.RadioButtonGroup),
265
+ name = _components$RadioButt.name;
266
+ filter = /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, /*#__PURE__*/React.createElement(RadioButtonGroup, _extends({}, components.RadioButtonGroup, {
267
+ valueSelected: ((_filtersState$column = filtersState[column]) === null || _filtersState$column === void 0 ? void 0 : _filtersState$column.value) === '' ? (_components$DefaultRa = (_components$DefaultRa2 = components.DefaultRadioButton) === null || _components$DefaultRa2 === void 0 ? void 0 : _components$DefaultRa2.value) !== null && _components$DefaultRa !== void 0 ? _components$DefaultRa : 'Any' : (_filtersState$column2 = filtersState[column]) === null || _filtersState$column2 === void 0 ? void 0 : _filtersState$column2.value,
268
+ onChange: function onChange(selected) {
269
+ var _components$RadioButt2, _components$RadioButt3;
270
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
271
+ value: selected,
272
+ type: type
273
+ })));
274
+ applyFilters({
275
+ column: column,
276
+ value: selected,
277
+ type: type
278
+ });
279
+ (_components$RadioButt2 = (_components$RadioButt3 = components.RadioButtonGroup).onChange) === null || _components$RadioButt2 === void 0 ? void 0 : _components$RadioButt2.call(_components$RadioButt3, selected);
280
+ }
281
+ }), /*#__PURE__*/React.createElement(RadioButton, _extends({
282
+ id: (_components$DefaultRa3 = components === null || components === void 0 ? void 0 : (_components$DefaultRa4 = components.DefaultRadioButton) === null || _components$DefaultRa4 === void 0 ? void 0 : _components$DefaultRa4.id) !== null && _components$DefaultRa3 !== void 0 ? _components$DefaultRa3 : "any__".concat(name),
283
+ labelText: (_components$DefaultRa5 = components === null || components === void 0 ? void 0 : (_components$DefaultRa6 = components.DefaultRadioButton) === null || _components$DefaultRa6 === void 0 ? void 0 : _components$DefaultRa6.labelText) !== null && _components$DefaultRa5 !== void 0 ? _components$DefaultRa5 : 'Any',
284
+ value: (_components$DefaultRa7 = components === null || components === void 0 ? void 0 : (_components$DefaultRa8 = components.DefaultRadioButton) === null || _components$DefaultRa8 === void 0 ? void 0 : _components$DefaultRa8.value) !== null && _components$DefaultRa7 !== void 0 ? _components$DefaultRa7 : 'Any'
285
+ }, components.DefaultRadioButton)), components.RadioButton.map(function (radio) {
286
+ var _ref4, _radio$id;
287
+ return /*#__PURE__*/React.createElement(RadioButton, _extends({
288
+ key: (_ref4 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref4 !== void 0 ? _ref4 : radio.value
289
+ }, radio));
290
+ })));
291
+ }
282
292
  break;
283
293
  case DROPDOWN:
284
294
  filter = /*#__PURE__*/React.createElement(Dropdown, _extends({}, components.Dropdown, {
@@ -325,6 +335,20 @@ var useFilters = function useFilters(_ref) {
325
335
  }
326
336
  }
327
337
  }, [panelOpen, previousState, previousState === null || previousState === void 0 ? void 0 : previousState.panelOpen, reset, setAllFilters, revertToPreviousFilters]);
338
+
339
+ // Re-applies filters if the Datagrid goes into a fetching state while panel is open
340
+ // and has had filters changed without applying
341
+ useEffect(function () {
342
+ if (isFetching && !fetchingReset) {
343
+ setFiltersState(JSON.parse(prevFiltersRef.current));
344
+ setFiltersObjectArray(JSON.parse(prevFiltersRef.current));
345
+ setAllFilters(JSON.parse(prevFiltersObjectArrayRef.current));
346
+ setFetchingReset(true);
347
+ }
348
+ if (!isFetching) {
349
+ setFetchingReset(false);
350
+ }
351
+ }, [isFetching, reactTableFiltersState, setAllFilters, fetchingReset]);
328
352
  var cancel = function cancel() {
329
353
  // Reverting to previous filters only applies when using batch actions
330
354
  if (updateMethod === BATCH) {
@@ -28,7 +28,8 @@ var useFiltering = function useFiltering(hooks) {
28
28
  var rowValue = row.values[id];
29
29
  var startDateObj = _typeof(startDate) === 'object' ? startDate : new Date(startDate);
30
30
  var endDateObj = _typeof(endDate) === 'object' ? endDate : new Date(endDate);
31
- if (rowValue.getTime() <= endDateObj.getTime() && rowValue.getTime() >= startDateObj.getTime()) {
31
+ var rowValueDateObj = _typeof(rowValue) === 'object' ? rowValue : new Date(rowValue);
32
+ if (rowValueDateObj.getTime() <= endDateObj.getTime() && rowValueDateObj.getTime() >= startDateObj.getTime()) {
32
33
  // In date range
33
34
  return true;
34
35
  } else {
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
- var _excluded = ["children", "className", "collapsible", "onClose", "closeIconDescription", "collapseButtonLabel", "expandButtonLabel", "nextIconDescription", "previousIconDescription", "title"];
4
+ var _excluded = ["children", "className", "collapsible", "onClose", "withLeftGutter", "closeIconDescription", "collapseButtonLabel", "expandButtonLabel", "nextIconDescription", "previousIconDescription", "title"];
5
5
  /**
6
6
  * Copyright IBM Corp. 2023, 2023
7
7
  *
@@ -30,6 +30,7 @@ var blockClass = "".concat(pkg.prefix, "--guidebanner");
30
30
  var componentName = 'Guidebanner';
31
31
  var defaults = {
32
32
  collapsible: false,
33
+ withLeftGutter: false,
33
34
  // Labels
34
35
  closeIconDescription: 'Close',
35
36
  collapseButtonLabel: 'Read less',
@@ -48,6 +49,8 @@ export var Guidebanner = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
48
49
  _ref$collapsible = _ref.collapsible,
49
50
  collapsible = _ref$collapsible === void 0 ? defaults.collapsible : _ref$collapsible,
50
51
  onClose = _ref.onClose,
52
+ _ref$withLeftGutter = _ref.withLeftGutter,
53
+ withLeftGutter = _ref$withLeftGutter === void 0 ? defaults.withLeftGutter : _ref$withLeftGutter,
51
54
  _ref$closeIconDescrip = _ref.closeIconDescription,
52
55
  closeIconDescription = _ref$closeIconDescrip === void 0 ? defaults.closeIconDescription : _ref$closeIconDescrip,
53
56
  _ref$collapseButtonLa = _ref.collapseButtonLabel,
@@ -83,7 +86,7 @@ export var Guidebanner = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
83
86
  };
84
87
  return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
85
88
  "aria-expanded": !isCollapsed,
86
- className: cx(blockClass, className, [collapsible ? "".concat(blockClass, "__collapsible") : null], [isCollapsed ? "".concat(blockClass, "__collapsible-collapsed") : null]),
89
+ className: cx(blockClass, className, collapsible && "".concat(blockClass, "__collapsible"), isCollapsed && "".concat(blockClass, "__collapsible-collapsed"), withLeftGutter && "".concat(blockClass, "__with-left-gutter")),
87
90
  ref: ref
88
91
  }, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement(Idea20, {
89
92
  className: "".concat(blockClass, "__icon-idea")
@@ -222,5 +225,11 @@ Guidebanner.propTypes = {
222
225
  /**
223
226
  * Title text.
224
227
  */
225
- title: PropTypes.string.isRequired
228
+ title: PropTypes.string.isRequired,
229
+ /**
230
+ * If true, insert 1 rem of "space" on the left of the component.
231
+ * This will allow the component's content to line up with other
232
+ * content on the page under special circumstances.
233
+ */
234
+ withLeftGutter: PropTypes.bool
226
235
  };
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
- var _excluded = ["children", "className", "closeIconDescription", "collapsible", "collapseButtonLabel", "expandButtonLabel", "narrow", "onClick", "onClose", "tertiaryButtonLabel", "action", "title", "media"];
4
+ var _excluded = ["action", "children", "className", "closeIconDescription", "collapsible", "collapseButtonLabel", "expandButtonLabel", "media", "narrow", "onClick", "onClose", "tertiaryButtonLabel", "title", "withLeftGutter"];
5
5
  /**
6
6
  * Copyright IBM Corp. 2023, 2023
7
7
  *
@@ -48,6 +48,7 @@ var defaults = {
48
48
  collapseButtonLabel: 'Read less',
49
49
  expandButtonLabel: 'Read more',
50
50
  narrow: false,
51
+ withLeftGutter: false,
51
52
  onClick: function onClick() {},
52
53
  onClose: function onClose() {}
53
54
  };
@@ -56,7 +57,8 @@ var defaults = {
56
57
  * TODO: A description of the component.
57
58
  */
58
59
  export var InlineTip = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
59
- var children = _ref.children,
60
+ var action = _ref.action,
61
+ children = _ref.children,
60
62
  className = _ref.className,
61
63
  _ref$closeIconDescrip = _ref.closeIconDescription,
62
64
  closeIconDescription = _ref$closeIconDescrip === void 0 ? defaults.closeIconDescription : _ref$closeIconDescrip,
@@ -66,15 +68,16 @@ export var InlineTip = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
66
68
  collapseButtonLabel = _ref$collapseButtonLa === void 0 ? defaults.collapseButtonLabel : _ref$collapseButtonLa,
67
69
  _ref$expandButtonLabe = _ref.expandButtonLabel,
68
70
  expandButtonLabel = _ref$expandButtonLabe === void 0 ? defaults.expandButtonLabel : _ref$expandButtonLabe,
71
+ media = _ref.media,
69
72
  _ref$narrow = _ref.narrow,
70
73
  narrow = _ref$narrow === void 0 ? defaults.narrow : _ref$narrow,
71
74
  onClick = _ref.onClick,
72
75
  onClose = _ref.onClose,
73
76
  tertiaryButtonLabel = _ref.tertiaryButtonLabel,
74
- action = _ref.action,
75
77
  _ref$title = _ref.title,
76
78
  title = _ref$title === void 0 ? defaults.title : _ref$title,
77
- media = _ref.media,
79
+ _ref$withLeftGutter = _ref.withLeftGutter,
80
+ withLeftGutter = _ref$withLeftGutter === void 0 ? defaults.withLeftGutter : _ref$withLeftGutter,
78
81
  rest = _objectWithoutProperties(_ref, _excluded);
79
82
  var _useState = useState(collapsible),
80
83
  _useState2 = _slicedToArray(_useState, 2),
@@ -101,7 +104,7 @@ export var InlineTip = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
101
104
  // Apply the block class to the main HTML element
102
105
  className,
103
106
  // Apply any supplied class names to the main HTML element.
104
- [collapsible ? "".concat(blockClass, "__collapsible") : null], [isCollapsed ? "".concat(blockClass, "__collapsible-collapsed") : null], [narrow ? "".concat(blockClass, "__narrow") : "".concat(blockClass, "__wide")], [media ? "".concat(blockClass, "__has-media") : null]),
107
+ collapsible && "".concat(blockClass, "__collapsible"), isCollapsed && "".concat(blockClass, "__collapsible-collapsed"), media && "".concat(blockClass, "__has-media"), [narrow ? "".concat(blockClass, "__narrow") : "".concat(blockClass, "__wide")], withLeftGutter && !narrow && "".concat(blockClass, "__with-left-gutter")),
105
108
  ref: ref,
106
109
  role: "complementary"
107
110
  }, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement(Button, {
@@ -228,5 +231,13 @@ InlineTip.propTypes = {
228
231
  /**
229
232
  * The title of the InlineTip.
230
233
  */
231
- title: PropTypes.string.isRequired
234
+ title: PropTypes.string.isRequired,
235
+ /**
236
+ * If true, insert 1 rem of "space" on the left of the component.
237
+ * This will allow the component's content to line up with other
238
+ * content on the page under special circumstances.
239
+ *
240
+ * This will only be applied when `narrow` is false.
241
+ */
242
+ withLeftGutter: PropTypes.bool
232
243
  };
@@ -168,7 +168,8 @@ var DatagridContent = function DatagridContent(_ref) {
168
168
  updateMethod: "batch"
169
169
  }, getFilterFlyoutProps(), {
170
170
  title: filterProps.panelTitle,
171
- filterSections: filterProps.sections
171
+ filterSections: filterProps.sections,
172
+ isFetching: isFetching
172
173
  })), /*#__PURE__*/_react.default.createElement("div", {
173
174
  className: "".concat(blockClass, "__table-container-inner")
174
175
  }, renderFilterSummary(), withInlineEdit ? /*#__PURE__*/_react.default.createElement("div", {
@@ -154,9 +154,9 @@ var DatagridToolbar = function DatagridToolbar(datagridState) {
154
154
  return batchActions && DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
155
155
  ref: ref,
156
156
  className: (0, _classnames.default)([toolbarClass, "".concat(toolbarClass, "--").concat(getRowHeight)])
157
- }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref))) : DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
157
+ }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && /*#__PURE__*/_react.default.createElement(DatagridActions, datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref))) : DatagridActions ? /*#__PURE__*/_react.default.createElement("div", {
158
158
  className: toolbarClass
159
- }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && DatagridActions(datagridState), DatagridBatchActions && DatagridBatchActions(datagridState))) : null;
159
+ }, /*#__PURE__*/_react.default.createElement(TableToolbar, null, DatagridActions && /*#__PURE__*/_react.default.createElement(DatagridActions, datagridState), DatagridBatchActions && DatagridBatchActions(datagridState))) : null;
160
160
  };
161
161
  var _default = DatagridToolbar;
162
162
  exports.default = _default;
@@ -65,7 +65,9 @@ var FilterPanel = function FilterPanel(_ref) {
65
65
  _ref$searchPlaceholde = _ref.searchPlaceholder,
66
66
  searchPlaceholder = _ref$searchPlaceholde === void 0 ? 'Find filters' : _ref$searchPlaceholde,
67
67
  _ref$reactTableFilter = _ref.reactTableFiltersState,
68
- reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter;
68
+ reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter,
69
+ _ref$isFetching = _ref.isFetching,
70
+ isFetching = _ref$isFetching === void 0 ? false : _ref$isFetching;
69
71
  /** State */
70
72
  var _useState = (0, _react.useState)(false),
71
73
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -83,7 +85,8 @@ var FilterPanel = function FilterPanel(_ref) {
83
85
  variation: _constants.PANEL,
84
86
  reactTableFiltersState: reactTableFiltersState,
85
87
  onCancel: onCancel,
86
- panelOpen: panelOpen
88
+ panelOpen: panelOpen,
89
+ isFetching: isFetching
87
90
  }),
88
91
  filtersState = _useFilters.filtersState,
89
92
  prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
@@ -248,6 +251,7 @@ FilterPanel.propTypes = {
248
251
  closeIconDescription: _propTypes.default.string,
249
252
  filterPanelMinHeight: _propTypes.default.number,
250
253
  filterSections: _propTypes.default.array,
254
+ isFetching: _propTypes.default.bool,
251
255
  onApply: _propTypes.default.func,
252
256
  onCancel: _propTypes.default.func,
253
257
  onPanelClose: _propTypes.default.func,
@@ -28,16 +28,21 @@ var useFilters = function useFilters(_ref) {
28
28
  reactTableFiltersState = _ref.reactTableFiltersState,
29
29
  _ref$onCancel = _ref.onCancel,
30
30
  onCancel = _ref$onCancel === void 0 ? function () {} : _ref$onCancel,
31
- panelOpen = _ref.panelOpen;
31
+ panelOpen = _ref.panelOpen,
32
+ isFetching = _ref.isFetching;
32
33
  /** State */
33
34
  var _useState = (0, _react.useState)((0, _utils.getInitialStateFromFilters)(filters, variation, reactTableFiltersState)),
34
35
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
35
36
  filtersState = _useState2[0],
36
37
  setFiltersState = _useState2[1];
37
- var _useState3 = (0, _react.useState)(reactTableFiltersState),
38
+ var _useState3 = (0, _react.useState)(false),
38
39
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
39
- filtersObjectArray = _useState4[0],
40
- setFiltersObjectArray = _useState4[1];
40
+ fetchingReset = _useState4[0],
41
+ setFetchingReset = _useState4[1];
42
+ var _useState5 = (0, _react.useState)(reactTableFiltersState),
43
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
44
+ filtersObjectArray = _useState6[0],
45
+ setFiltersObjectArray = _useState6[1];
41
46
  var previousState = (0, _hooks.usePreviousValue)({
42
47
  panelOpen: panelOpen
43
48
  });
@@ -80,6 +85,7 @@ var useFilters = function useFilters(_ref) {
80
85
  // Update their respective refs so everything is in sync
81
86
  prevFiltersRef.current = JSON.stringify(initialFiltersState);
82
87
  prevFiltersObjectArrayRef.current = JSON.stringify(initialFiltersObjectArray);
88
+ lastAppliedFilters.current = JSON.stringify([]);
83
89
  }, [filters, setAllFilters, variation]);
84
90
  var applyFilters = function applyFilters(_ref2) {
85
91
  var column = _ref2.column,
@@ -170,7 +176,6 @@ var useFilters = function useFilters(_ref) {
170
176
  };
171
177
  /** Render the individual filter component */
172
178
  var renderFilter = function renderFilter(_ref3) {
173
- var _filtersState$column, _filtersState$column2;
174
179
  var type = _ref3.type,
175
180
  column = _ref3.column,
176
181
  components = _ref3.props;
@@ -257,31 +262,36 @@ var useFilters = function useFilters(_ref) {
257
262
  }));
258
263
  break;
259
264
  case _constants.RADIO:
260
- filter = /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButtonGroup, (0, _extends2.default)({}, components.RadioButtonGroup, {
261
- 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,
262
- onChange: function onChange(selected) {
263
- var _components$RadioButt, _components$RadioButt2;
264
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
265
- value: selected,
266
- type: type
267
- })));
268
- applyFilters({
269
- column: column,
270
- value: selected,
271
- type: type
272
- });
273
- (_components$RadioButt = (_components$RadioButt2 = components.RadioButtonGroup).onChange) === null || _components$RadioButt === void 0 ? void 0 : _components$RadioButt.call(_components$RadioButt2, selected);
274
- }
275
- }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, {
276
- id: "any",
277
- labelText: "Any",
278
- value: "Any"
279
- }), components.RadioButton.map(function (radio) {
280
- var _ref4, _radio$id;
281
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, (0, _extends2.default)({
282
- key: (_ref4 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref4 !== void 0 ? _ref4 : radio.value
283
- }, radio));
284
- })));
265
+ {
266
+ var _filtersState$column, _components$DefaultRa, _components$DefaultRa2, _filtersState$column2, _components$DefaultRa3, _components$DefaultRa4, _components$DefaultRa5, _components$DefaultRa6, _components$DefaultRa7, _components$DefaultRa8;
267
+ var _components$RadioButt = _objectSpread({}, components.RadioButtonGroup),
268
+ name = _components$RadioButt.name;
269
+ filter = /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButtonGroup, (0, _extends2.default)({}, components.RadioButtonGroup, {
270
+ valueSelected: ((_filtersState$column = filtersState[column]) === null || _filtersState$column === void 0 ? void 0 : _filtersState$column.value) === '' ? (_components$DefaultRa = (_components$DefaultRa2 = components.DefaultRadioButton) === null || _components$DefaultRa2 === void 0 ? void 0 : _components$DefaultRa2.value) !== null && _components$DefaultRa !== void 0 ? _components$DefaultRa : 'Any' : (_filtersState$column2 = filtersState[column]) === null || _filtersState$column2 === void 0 ? void 0 : _filtersState$column2.value,
271
+ onChange: function onChange(selected) {
272
+ var _components$RadioButt2, _components$RadioButt3;
273
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
274
+ value: selected,
275
+ type: type
276
+ })));
277
+ applyFilters({
278
+ column: column,
279
+ value: selected,
280
+ type: type
281
+ });
282
+ (_components$RadioButt2 = (_components$RadioButt3 = components.RadioButtonGroup).onChange) === null || _components$RadioButt2 === void 0 ? void 0 : _components$RadioButt2.call(_components$RadioButt3, selected);
283
+ }
284
+ }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, (0, _extends2.default)({
285
+ id: (_components$DefaultRa3 = components === null || components === void 0 ? void 0 : (_components$DefaultRa4 = components.DefaultRadioButton) === null || _components$DefaultRa4 === void 0 ? void 0 : _components$DefaultRa4.id) !== null && _components$DefaultRa3 !== void 0 ? _components$DefaultRa3 : "any__".concat(name),
286
+ labelText: (_components$DefaultRa5 = components === null || components === void 0 ? void 0 : (_components$DefaultRa6 = components.DefaultRadioButton) === null || _components$DefaultRa6 === void 0 ? void 0 : _components$DefaultRa6.labelText) !== null && _components$DefaultRa5 !== void 0 ? _components$DefaultRa5 : 'Any',
287
+ value: (_components$DefaultRa7 = components === null || components === void 0 ? void 0 : (_components$DefaultRa8 = components.DefaultRadioButton) === null || _components$DefaultRa8 === void 0 ? void 0 : _components$DefaultRa8.value) !== null && _components$DefaultRa7 !== void 0 ? _components$DefaultRa7 : 'Any'
288
+ }, components.DefaultRadioButton)), components.RadioButton.map(function (radio) {
289
+ var _ref4, _radio$id;
290
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, (0, _extends2.default)({
291
+ key: (_ref4 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref4 !== void 0 ? _ref4 : radio.value
292
+ }, radio));
293
+ })));
294
+ }
285
295
  break;
286
296
  case _constants.DROPDOWN:
287
297
  filter = /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Dropdown, (0, _extends2.default)({}, components.Dropdown, {
@@ -328,6 +338,20 @@ var useFilters = function useFilters(_ref) {
328
338
  }
329
339
  }
330
340
  }, [panelOpen, previousState, previousState === null || previousState === void 0 ? void 0 : previousState.panelOpen, reset, setAllFilters, revertToPreviousFilters]);
341
+
342
+ // Re-applies filters if the Datagrid goes into a fetching state while panel is open
343
+ // and has had filters changed without applying
344
+ (0, _react.useEffect)(function () {
345
+ if (isFetching && !fetchingReset) {
346
+ setFiltersState(JSON.parse(prevFiltersRef.current));
347
+ setFiltersObjectArray(JSON.parse(prevFiltersRef.current));
348
+ setAllFilters(JSON.parse(prevFiltersObjectArrayRef.current));
349
+ setFetchingReset(true);
350
+ }
351
+ if (!isFetching) {
352
+ setFetchingReset(false);
353
+ }
354
+ }, [isFetching, reactTableFiltersState, setAllFilters, fetchingReset]);
331
355
  var cancel = function cancel() {
332
356
  // Reverting to previous filters only applies when using batch actions
333
357
  if (updateMethod === _constants.BATCH) {
@@ -28,7 +28,8 @@ var useFiltering = function useFiltering(hooks) {
28
28
  var rowValue = row.values[id];
29
29
  var startDateObj = (0, _typeof2.default)(startDate) === 'object' ? startDate : new Date(startDate);
30
30
  var endDateObj = (0, _typeof2.default)(endDate) === 'object' ? endDate : new Date(endDate);
31
- if (rowValue.getTime() <= endDateObj.getTime() && rowValue.getTime() >= startDateObj.getTime()) {
31
+ var rowValueDateObj = (0, _typeof2.default)(rowValue) === 'object' ? rowValue : new Date(rowValue);
32
+ if (rowValueDateObj.getTime() <= endDateObj.getTime() && rowValueDateObj.getTime() >= startDateObj.getTime()) {
32
33
  // In date range
33
34
  return true;
34
35
  } else {
@@ -18,7 +18,7 @@ var _carbonComponentsReact = require("carbon-components-react");
18
18
  var _Carousel = require("../Carousel");
19
19
  var _devtools = require("../../global/js/utils/devtools");
20
20
  var _settings = require("../../settings");
21
- var _excluded = ["children", "className", "collapsible", "onClose", "closeIconDescription", "collapseButtonLabel", "expandButtonLabel", "nextIconDescription", "previousIconDescription", "title"];
21
+ var _excluded = ["children", "className", "collapsible", "onClose", "withLeftGutter", "closeIconDescription", "collapseButtonLabel", "expandButtonLabel", "nextIconDescription", "previousIconDescription", "title"];
22
22
  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); }
23
23
  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; }
24
24
  // Carbon and package components we use.
@@ -29,6 +29,7 @@ var blockClass = "".concat(_settings.pkg.prefix, "--guidebanner");
29
29
  var componentName = 'Guidebanner';
30
30
  var defaults = {
31
31
  collapsible: false,
32
+ withLeftGutter: false,
32
33
  // Labels
33
34
  closeIconDescription: 'Close',
34
35
  collapseButtonLabel: 'Read less',
@@ -47,6 +48,8 @@ var Guidebanner = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
47
48
  _ref$collapsible = _ref.collapsible,
48
49
  collapsible = _ref$collapsible === void 0 ? defaults.collapsible : _ref$collapsible,
49
50
  onClose = _ref.onClose,
51
+ _ref$withLeftGutter = _ref.withLeftGutter,
52
+ withLeftGutter = _ref$withLeftGutter === void 0 ? defaults.withLeftGutter : _ref$withLeftGutter,
50
53
  _ref$closeIconDescrip = _ref.closeIconDescription,
51
54
  closeIconDescription = _ref$closeIconDescrip === void 0 ? defaults.closeIconDescription : _ref$closeIconDescrip,
52
55
  _ref$collapseButtonLa = _ref.collapseButtonLabel,
@@ -82,7 +85,7 @@ var Guidebanner = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
82
85
  };
83
86
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
84
87
  "aria-expanded": !isCollapsed,
85
- className: (0, _classnames.default)(blockClass, className, [collapsible ? "".concat(blockClass, "__collapsible") : null], [isCollapsed ? "".concat(blockClass, "__collapsible-collapsed") : null]),
88
+ className: (0, _classnames.default)(blockClass, className, collapsible && "".concat(blockClass, "__collapsible"), isCollapsed && "".concat(blockClass, "__collapsible-collapsed"), withLeftGutter && "".concat(blockClass, "__with-left-gutter")),
86
89
  ref: ref
87
90
  }, (0, _devtools.getDevtoolsProps)(componentName)), /*#__PURE__*/_react.default.createElement(_iconsReact.Idea20, {
88
91
  className: "".concat(blockClass, "__icon-idea")
@@ -222,5 +225,11 @@ Guidebanner.propTypes = {
222
225
  /**
223
226
  * Title text.
224
227
  */
225
- title: _propTypes.default.string.isRequired
228
+ title: _propTypes.default.string.isRequired,
229
+ /**
230
+ * If true, insert 1 rem of "space" on the left of the component.
231
+ * This will allow the component's content to line up with other
232
+ * content on the page under special circumstances.
233
+ */
234
+ withLeftGutter: _propTypes.default.bool
226
235
  };
@@ -19,7 +19,7 @@ var _SteppedAnimatedMedia = require("../SteppedAnimatedMedia");
19
19
  var _devtools = require("../../global/js/utils/devtools");
20
20
  var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
21
21
  var _settings = require("../../settings");
22
- var _excluded = ["children", "className", "closeIconDescription", "collapsible", "collapseButtonLabel", "expandButtonLabel", "narrow", "onClick", "onClose", "tertiaryButtonLabel", "action", "title", "media"];
22
+ var _excluded = ["action", "children", "className", "closeIconDescription", "collapsible", "collapseButtonLabel", "expandButtonLabel", "media", "narrow", "onClick", "onClose", "tertiaryButtonLabel", "title", "withLeftGutter"];
23
23
  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); }
24
24
  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; }
25
25
  // Carbon and package components we use.
@@ -47,6 +47,7 @@ var defaults = {
47
47
  collapseButtonLabel: 'Read less',
48
48
  expandButtonLabel: 'Read more',
49
49
  narrow: false,
50
+ withLeftGutter: false,
50
51
  onClick: function onClick() {},
51
52
  onClose: function onClose() {}
52
53
  };
@@ -55,7 +56,8 @@ var defaults = {
55
56
  * TODO: A description of the component.
56
57
  */
57
58
  var InlineTip = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
58
- var children = _ref.children,
59
+ var action = _ref.action,
60
+ children = _ref.children,
59
61
  className = _ref.className,
60
62
  _ref$closeIconDescrip = _ref.closeIconDescription,
61
63
  closeIconDescription = _ref$closeIconDescrip === void 0 ? defaults.closeIconDescription : _ref$closeIconDescrip,
@@ -65,15 +67,16 @@ var InlineTip = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
65
67
  collapseButtonLabel = _ref$collapseButtonLa === void 0 ? defaults.collapseButtonLabel : _ref$collapseButtonLa,
66
68
  _ref$expandButtonLabe = _ref.expandButtonLabel,
67
69
  expandButtonLabel = _ref$expandButtonLabe === void 0 ? defaults.expandButtonLabel : _ref$expandButtonLabe,
70
+ media = _ref.media,
68
71
  _ref$narrow = _ref.narrow,
69
72
  narrow = _ref$narrow === void 0 ? defaults.narrow : _ref$narrow,
70
73
  onClick = _ref.onClick,
71
74
  onClose = _ref.onClose,
72
75
  tertiaryButtonLabel = _ref.tertiaryButtonLabel,
73
- action = _ref.action,
74
76
  _ref$title = _ref.title,
75
77
  title = _ref$title === void 0 ? defaults.title : _ref$title,
76
- media = _ref.media,
78
+ _ref$withLeftGutter = _ref.withLeftGutter,
79
+ withLeftGutter = _ref$withLeftGutter === void 0 ? defaults.withLeftGutter : _ref$withLeftGutter,
77
80
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
78
81
  var _useState = (0, _react.useState)(collapsible),
79
82
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -100,7 +103,7 @@ var InlineTip = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
100
103
  // Apply the block class to the main HTML element
101
104
  className,
102
105
  // Apply any supplied class names to the main HTML element.
103
- [collapsible ? "".concat(blockClass, "__collapsible") : null], [isCollapsed ? "".concat(blockClass, "__collapsible-collapsed") : null], [narrow ? "".concat(blockClass, "__narrow") : "".concat(blockClass, "__wide")], [media ? "".concat(blockClass, "__has-media") : null]),
106
+ collapsible && "".concat(blockClass, "__collapsible"), isCollapsed && "".concat(blockClass, "__collapsible-collapsed"), media && "".concat(blockClass, "__has-media"), [narrow ? "".concat(blockClass, "__narrow") : "".concat(blockClass, "__wide")], withLeftGutter && !narrow && "".concat(blockClass, "__with-left-gutter")),
104
107
  ref: ref,
105
108
  role: "complementary"
106
109
  }, (0, _devtools.getDevtoolsProps)(componentName)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
@@ -228,5 +231,13 @@ InlineTip.propTypes = {
228
231
  /**
229
232
  * The title of the InlineTip.
230
233
  */
231
- title: _propTypes.default.string.isRequired
234
+ title: _propTypes.default.string.isRequired,
235
+ /**
236
+ * If true, insert 1 rem of "space" on the left of the component.
237
+ * This will allow the component's content to line up with other
238
+ * content on the page under special circumstances.
239
+ *
240
+ * This will only be applied when `narrow` is false.
241
+ */
242
+ withLeftGutter: _propTypes.default.bool
232
243
  };
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.63.0",
4
+ "version": "1.64.0",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
@@ -97,5 +97,5 @@
97
97
  "react": "^16.8.6 || ^17.0.1",
98
98
  "react-dom": "^16.8.6 || ^17.0.1"
99
99
  },
100
- "gitHead": "2fe150f0f2374e506659d44f2c4a616ef7c4f2b0"
100
+ "gitHead": "8d199ba7fdf1afcd494af8771abd2483c197d319"
101
101
  }