@carbon/ibm-products 2.11.3 → 2.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. package/css/index-full-carbon.css +40 -7
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +3 -3
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +36 -7
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +2 -2
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +40 -7
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +3 -3
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +40 -7
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +3 -3
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/Card/Card.js +9 -1
  18. package/es/components/Card/CardFooter.js +8 -2
  19. package/es/components/Card/CardHeader.js +8 -2
  20. package/es/components/CreateFullPage/CreateFullPage.docs-page.js +6 -0
  21. package/es/components/CreateFullPage/CreateFullPage.js +66 -8
  22. package/es/components/Datagrid/Datagrid/Datagrid.js +2 -1
  23. package/es/components/Datagrid/Datagrid/DatagridContent.js +7 -1
  24. package/es/components/Datagrid/Datagrid/DatagridSelectAll.js +13 -1
  25. package/es/components/Datagrid/Datagrid/DraggableElement.js +1 -0
  26. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +31 -10
  27. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +18 -17
  28. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +104 -18
  29. package/es/components/Datagrid/Datagrid/addons/Filtering/OverflowCheckboxes.js +68 -0
  30. package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +1 -0
  31. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +120 -54
  32. package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +9 -3
  33. package/es/components/Datagrid/useActionsColumn.js +0 -2
  34. package/es/components/Datagrid/useFiltering.js +4 -1
  35. package/es/components/Datagrid/utils/DatagridActions.js +2 -3
  36. package/es/components/SimpleHeader/SimpleHeader.docs-page.js +17 -0
  37. package/es/components/SimpleHeader/SimpleHeader.js +92 -0
  38. package/es/components/SimpleHeader/index.js +8 -0
  39. package/es/components/StatusIcon/StatusIcon.js +13 -13
  40. package/es/global/js/utils/StoryDocsPage.js +3 -3
  41. package/lib/components/Card/Card.js +9 -1
  42. package/lib/components/Card/CardFooter.js +8 -2
  43. package/lib/components/Card/CardHeader.js +8 -2
  44. package/lib/components/CreateFullPage/CreateFullPage.docs-page.js +6 -0
  45. package/lib/components/CreateFullPage/CreateFullPage.js +65 -7
  46. package/lib/components/Datagrid/Datagrid/Datagrid.js +2 -1
  47. package/lib/components/Datagrid/Datagrid/DatagridContent.js +6 -0
  48. package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +13 -1
  49. package/lib/components/Datagrid/Datagrid/DraggableElement.js +1 -0
  50. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +31 -10
  51. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +40 -38
  52. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +109 -24
  53. package/lib/components/Datagrid/Datagrid/addons/Filtering/OverflowCheckboxes.js +79 -0
  54. package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +4 -2
  55. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +136 -70
  56. package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +10 -4
  57. package/lib/components/Datagrid/useActionsColumn.js +0 -2
  58. package/lib/components/Datagrid/useFiltering.js +4 -1
  59. package/lib/components/Datagrid/utils/DatagridActions.js +2 -3
  60. package/lib/components/SimpleHeader/SimpleHeader.docs-page.js +28 -0
  61. package/lib/components/SimpleHeader/SimpleHeader.js +102 -0
  62. package/lib/components/SimpleHeader/index.js +12 -0
  63. package/lib/components/StatusIcon/StatusIcon.js +12 -12
  64. package/lib/global/js/utils/StoryDocsPage.js +3 -3
  65. package/package.json +2 -2
  66. package/scss/components/Card/_card.scss +1 -1
  67. package/scss/components/CreateFullPage/_create-full-page.scss +11 -2
  68. package/scss/components/Datagrid/styles/addons/_FilterPanel.scss +4 -0
  69. package/scss/components/ProductiveCard/_productive-card.scss +0 -1
  70. package/scss/components/SimpleHeader/_carbon-imports.scss +11 -0
  71. package/scss/components/SimpleHeader/_index-with-carbon.scss +9 -0
  72. package/scss/components/SimpleHeader/_index.scss +10 -0
  73. package/scss/components/SimpleHeader/_simple-header.scss +37 -0
  74. package/scss/components/StatusIcon/_status-icon.scss +0 -1
  75. package/scss/components/_index-with-carbon.scss +1 -0
@@ -5,20 +5,22 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.FilterProvider = exports.FilterContext = void 0;
8
+ exports.clearSingleFilter = exports.FilterProvider = exports.FilterContext = void 0;
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
12
  var _react = _interopRequireWildcard(require("react"));
11
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
14
  var _constants = require("./constants");
13
15
  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); }
14
16
  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; }
15
- /**
16
- * Copyright IBM Corp. 2022, 2022
17
- *
18
- * This source code is licensed under the Apache-2.0 license found in the
19
- * LICENSE file in the root directory of this source tree.
20
- */
21
-
17
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /**
19
+ * Copyright IBM Corp. 2022, 2023
20
+ *
21
+ * This source code is licensed under the Apache-2.0 license found in the
22
+ * LICENSE file in the root directory of this source tree.
23
+ */
22
24
  var FilterContext = /*#__PURE__*/(0, _react.createContext)();
23
25
  exports.FilterContext = FilterContext;
24
26
  var EventEmitter = {
@@ -39,42 +41,124 @@ var EventEmitter = {
39
41
  }
40
42
  }
41
43
  };
42
- var prepareFiltersForTags = function prepareFiltersForTags(filters) {
44
+ var removeFilterItem = function removeFilterItem(state, index) {
45
+ return state.splice(index, 1);
46
+ };
47
+ var updateFilterState = function updateFilterState(state, type, value) {
48
+ if (type === _constants.CHECKBOX) {
49
+ return;
50
+ }
51
+ if (type === _constants.DATE) {
52
+ var _filterTagIndex = state.findIndex(function (val) {
53
+ return formatDateRange(val.value[0], val.value[1]) === formatDateRange(value[0], value[1]);
54
+ });
55
+ return removeFilterItem(state, _filterTagIndex);
56
+ }
57
+ var filterTagIndex = state.findIndex(function (val) {
58
+ return val.value === value;
59
+ });
60
+ return removeFilterItem(state, filterTagIndex);
61
+ };
62
+ var clearSingleFilter = function clearSingleFilter(_ref, setAllFilters, state) {
63
+ var key = _ref.key,
64
+ value = _ref.value;
65
+ var tempState = (0, _toConsumableArray2.default)(state.filters);
66
+ tempState.forEach(function (f, filterIndex) {
67
+ if (f.id === key) {
68
+ var filterValues = f.value;
69
+ var filterType = f.type;
70
+ updateFilterState(tempState, filterType, value);
71
+ if (filterType === _constants.CHECKBOX) {
72
+ /**
73
+ When all checkboxes of a group are all unselected the value still exists in the filtersObjectArray
74
+ This checks if all the checkboxes are selected = false and removes it from the array
75
+ */
76
+ var valueIndex = filterValues.findIndex(function (val) {
77
+ return val.id === value;
78
+ });
79
+ filterValues[valueIndex].selected = false;
80
+ var updatedFilterObject = _objectSpread(_objectSpread({}, f), {}, {
81
+ value: (0, _toConsumableArray2.default)(filterValues)
82
+ });
83
+ tempState[filterIndex] = updatedFilterObject;
84
+ var index = tempState.findIndex(function (filter) {
85
+ return filter.id === key;
86
+ });
87
+
88
+ // If all the selected state is false remove from array
89
+ var shouldRemoveFromArray = tempState[index].value.every(function (val) {
90
+ return val.selected === false;
91
+ });
92
+ if (shouldRemoveFromArray) {
93
+ removeFilterItem(tempState, index);
94
+ }
95
+ }
96
+ }
97
+ });
98
+ setAllFilters(tempState);
99
+ };
100
+ exports.clearSingleFilter = clearSingleFilter;
101
+ var handleSingleFilterRemoval = function handleSingleFilterRemoval(key, value) {
102
+ EventEmitter.dispatch(_constants.CLEAR_SINGLE_FILTER, {
103
+ key: key,
104
+ value: value
105
+ });
106
+ };
107
+ var formatDateRange = function formatDateRange(startDate, endDate) {
108
+ var startDateObj = new Date(startDate);
109
+ var endDateObj = new Date(endDate);
110
+ return "".concat(startDateObj.toLocaleDateString(), " - ").concat(endDateObj.toLocaleDateString());
111
+ };
112
+ var prepareFiltersForTags = function prepareFiltersForTags(filters, renderDateLabel) {
43
113
  var tags = [];
44
- filters.forEach(function (_ref) {
45
- var id = _ref.id,
46
- type = _ref.type,
47
- value = _ref.value;
114
+ filters.forEach(function (_ref2) {
115
+ var id = _ref2.id,
116
+ type = _ref2.type,
117
+ value = _ref2.value;
118
+ var sharedFilterProps = {
119
+ filter: true,
120
+ onClose: function onClose() {
121
+ return handleSingleFilterRemoval(id, value);
122
+ }
123
+ };
48
124
  if (type === _constants.DROPDOWN || type === _constants.RADIO || type === _constants.NUMBER) {
49
- tags.push({
125
+ tags.push(_objectSpread({
50
126
  key: id,
51
127
  value: value
52
- });
128
+ }, sharedFilterProps));
53
129
  } else if (type === _constants.DATE) {
130
+ var _renderDateLabel;
54
131
  var _value = (0, _slicedToArray2.default)(value, 2),
55
132
  startDate = _value[0],
56
133
  endDate = _value[1];
57
- tags.push({
134
+ tags.push(_objectSpread({
58
135
  key: id,
59
- value: "".concat(startDate.toLocaleDateString(), " - ").concat(endDate.toLocaleDateString())
60
- });
136
+ value: (_renderDateLabel = renderDateLabel === null || renderDateLabel === void 0 ? void 0 : renderDateLabel(startDate, endDate)) !== null && _renderDateLabel !== void 0 ? _renderDateLabel : formatDateRange(startDate, endDate)
137
+ }, sharedFilterProps));
61
138
  } else if (type === _constants.CHECKBOX) {
62
139
  value.forEach(function (checkbox) {
63
140
  if (checkbox.selected) {
64
- tags.push({
141
+ tags.push(_objectSpread(_objectSpread({
65
142
  key: id,
66
143
  value: checkbox.value
67
- });
144
+ }, sharedFilterProps), {}, {
145
+ onClose: function onClose() {
146
+ return handleSingleFilterRemoval(id, checkbox.value);
147
+ }
148
+ }));
68
149
  }
69
150
  });
70
151
  }
71
152
  });
72
153
  return tags;
73
154
  };
74
- var FilterProvider = function FilterProvider(_ref2) {
75
- var children = _ref2.children,
76
- filters = _ref2.filters;
77
- var filterTags = prepareFiltersForTags(filters);
155
+ var FilterProvider = function FilterProvider(_ref3) {
156
+ var children = _ref3.children,
157
+ filters = _ref3.filters,
158
+ filterProps = _ref3.filterProps;
159
+ var _ref4 = filterProps || {},
160
+ renderDateLabel = _ref4.renderDateLabel;
161
+ var filterTags = prepareFiltersForTags(filters, renderDateLabel);
78
162
  var _useState = (0, _react.useState)(false),
79
163
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
80
164
  panelOpen = _useState2[0],
@@ -92,5 +176,6 @@ var FilterProvider = function FilterProvider(_ref2) {
92
176
  exports.FilterProvider = FilterProvider;
93
177
  FilterProvider.propTypes = {
94
178
  children: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.node), _propTypes.default.node]).isRequired,
179
+ filterProps: _propTypes.default.object,
95
180
  filters: _propTypes.default.arrayOf(_propTypes.default.object).isRequired
96
181
  };
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _react = require("@carbon/react");
12
+ var _react2 = _interopRequireWildcard(require("react"));
13
+ var _propTypes = _interopRequireDefault(require("prop-types"));
14
+ var _FilterPanel = require("./FilterPanel");
15
+ var _useFilters = require("./hooks/useFilters");
16
+ 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); }
17
+ 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; }
18
+ var OverflowCheckboxes = function OverflowCheckboxes(_ref) {
19
+ var components = _ref.components,
20
+ filtersState = _ref.filtersState,
21
+ column = _ref.column,
22
+ setFiltersState = _ref.setFiltersState,
23
+ type = _ref.type,
24
+ applyFilters = _ref.applyFilters,
25
+ _ref$viewAllLabel = _ref.viewAllLabel,
26
+ viewAllLabel = _ref$viewAllLabel === void 0 ? 'View all' : _ref$viewAllLabel,
27
+ _ref$viewLessLabel = _ref.viewLessLabel,
28
+ viewLessLabel = _ref$viewLessLabel === void 0 ? 'View less' : _ref$viewLessLabel;
29
+ var _useState = (0, _react2.useState)(false),
30
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
31
+ showAllItems = _useState2[0],
32
+ setShowAllItems = _useState2[1];
33
+ var firstFiveItems = filtersState[column].value.slice(0, 5);
34
+ var restOfTheItems = filtersState[column].value.slice(5, filtersState[column].value.length - 1);
35
+ var renderCheckbox = function renderCheckbox(option) {
36
+ return /*#__PURE__*/_react2.default.createElement(_react.Checkbox, (0, _extends2.default)({
37
+ key: option.labelText
38
+ }, option, {
39
+ onChange: function onChange(_, _ref2) {
40
+ var checked = _ref2.checked;
41
+ return (0, _useFilters.handleCheckboxChange)({
42
+ checked: checked,
43
+ filtersState: filtersState,
44
+ column: column,
45
+ option: option,
46
+ setFiltersState: setFiltersState,
47
+ applyFilters: applyFilters,
48
+ type: type
49
+ });
50
+ },
51
+ checked: option.selected,
52
+ disabled: option.disabled
53
+ }));
54
+ };
55
+ var renderViewAllButtonText = function renderViewAllButtonText() {
56
+ /** This should render the text "View all ([amount of checkboxes])" or "View less" */
57
+ return showAllItems ? viewLessLabel : "".concat(viewAllLabel, " (").concat(filtersState[column].value.length, ")");
58
+ };
59
+ return /*#__PURE__*/_react2.default.createElement(_react.FormGroup, components.FormGroup, firstFiveItems.map(renderCheckbox), showAllItems && restOfTheItems.map(renderCheckbox), /*#__PURE__*/_react2.default.createElement(_react.Button, {
60
+ className: "".concat(_FilterPanel.componentClass, "__view-all-button"),
61
+ kind: "ghost",
62
+ size: "sm",
63
+ onClick: function onClick() {
64
+ return setShowAllItems(!showAllItems);
65
+ }
66
+ }, renderViewAllButtonText()));
67
+ };
68
+ OverflowCheckboxes.propTypes = {
69
+ applyFilters: _propTypes.default.func,
70
+ column: _propTypes.default.string,
71
+ components: _propTypes.default.object,
72
+ filtersState: _propTypes.default.object,
73
+ setFiltersState: _propTypes.default.func,
74
+ type: _propTypes.default.string,
75
+ viewAllLabel: _propTypes.default.string,
76
+ viewLessLabel: _propTypes.default.string
77
+ };
78
+ var _default = OverflowCheckboxes;
79
+ exports.default = _default;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.RADIO = exports.PANEL_WIDTH = exports.PANEL = exports.NUMBER = exports.INSTANT = exports.FLYOUT = exports.DROPDOWN = exports.DATE = exports.CLEAR_FILTERS = exports.CHECKBOX = exports.BATCH = exports.ACTION_SET_HEIGHT = void 0;
6
+ exports.RADIO = exports.PANEL_WIDTH = exports.PANEL = exports.NUMBER = exports.INSTANT = exports.FLYOUT = exports.DROPDOWN = exports.DATE = exports.CLEAR_SINGLE_FILTER = exports.CLEAR_FILTERS = exports.CHECKBOX = exports.BATCH = exports.ACTION_SET_HEIGHT = void 0;
7
7
  /**
8
8
  * Copyright IBM Corp. 2022, 2022
9
9
  *
@@ -36,9 +36,11 @@ var DROPDOWN = 'dropdown';
36
36
  /** Constants for event emitters */
37
37
  exports.DROPDOWN = DROPDOWN;
38
38
  var CLEAR_FILTERS = 'clearFilters';
39
+ exports.CLEAR_FILTERS = CLEAR_FILTERS;
40
+ var CLEAR_SINGLE_FILTER = 'clearSingleFilter';
39
41
 
40
42
  /** Constants for panel dimensions */
41
- exports.CLEAR_FILTERS = CLEAR_FILTERS;
43
+ exports.CLEAR_SINGLE_FILTER = CLEAR_SINGLE_FILTER;
42
44
  var PANEL_WIDTH = 320;
43
45
  exports.PANEL_WIDTH = PANEL_WIDTH;
44
46
  var ACTION_SET_HEIGHT = 64;
@@ -5,15 +5,17 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = void 0;
8
+ exports.handleCheckboxChange = exports.default = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
- var _react = _interopRequireWildcard(require("react"));
14
- var _react2 = require("@carbon/react");
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
13
  var _constants = require("../constants");
14
+ var _react = require("@carbon/react");
15
+ var _react2 = _interopRequireWildcard(require("react"));
16
+ var _OverflowCheckboxes = _interopRequireDefault(require("../OverflowCheckboxes"));
16
17
  var _utils = require("../utils");
18
+ var _hooks = require("../../../../../../global/js/hooks");
17
19
  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); }
18
20
  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; }
19
21
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -24,29 +26,62 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
24
26
  * US Government Users Restricted Rights - Use, duplication or disclosure
25
27
  * restricted by GSA ADP Schedule Contract with IBM Corp.
26
28
  */
27
- var useFilters = function useFilters(_ref) {
28
- var updateMethod = _ref.updateMethod,
29
- _ref$filters = _ref.filters,
30
- filters = _ref$filters === void 0 ? [] : _ref$filters,
31
- setAllFilters = _ref.setAllFilters,
32
- variation = _ref.variation,
33
- reactTableFiltersState = _ref.reactTableFiltersState,
34
- _ref$onCancel = _ref.onCancel,
35
- onCancel = _ref$onCancel === void 0 ? function () {} : _ref$onCancel;
29
+ var handleCheckboxChange = function handleCheckboxChange(_ref) {
30
+ var _option$onChange;
31
+ var checked = _ref.checked,
32
+ filtersState = _ref.filtersState,
33
+ column = _ref.column,
34
+ option = _ref.option,
35
+ setFiltersState = _ref.setFiltersState,
36
+ applyFilters = _ref.applyFilters,
37
+ type = _ref.type;
38
+ var checkboxCopy = filtersState[column].value;
39
+ var foundCheckbox = checkboxCopy.find(function (checkbox) {
40
+ return checkbox.value === option.value;
41
+ });
42
+ foundCheckbox.selected = checked;
43
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
44
+ value: checkboxCopy,
45
+ type: type
46
+ })));
47
+ applyFilters({
48
+ column: column,
49
+ value: (0, _toConsumableArray2.default)(filtersState[column].value),
50
+ type: type
51
+ });
52
+ (_option$onChange = option.onChange) === null || _option$onChange === void 0 || _option$onChange.call(option, checked);
53
+ };
54
+ exports.handleCheckboxChange = handleCheckboxChange;
55
+ var useFilters = function useFilters(_ref2) {
56
+ var updateMethod = _ref2.updateMethod,
57
+ _ref2$filters = _ref2.filters,
58
+ filters = _ref2$filters === void 0 ? [] : _ref2$filters,
59
+ setAllFilters = _ref2.setAllFilters,
60
+ variation = _ref2.variation,
61
+ reactTableFiltersState = _ref2.reactTableFiltersState,
62
+ _ref2$onCancel = _ref2.onCancel,
63
+ onCancel = _ref2$onCancel === void 0 ? function () {} : _ref2$onCancel,
64
+ panelOpen = _ref2.panelOpen;
36
65
  /** State */
37
- var _useState = (0, _react.useState)((0, _utils.getInitialStateFromFilters)(filters, variation, reactTableFiltersState)),
66
+ var _useState = (0, _react2.useState)((0, _utils.getInitialStateFromFilters)(filters, variation, reactTableFiltersState)),
38
67
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
39
68
  filtersState = _useState2[0],
40
69
  setFiltersState = _useState2[1];
41
- var _useState3 = (0, _react.useState)(reactTableFiltersState),
70
+ var _useState3 = (0, _react2.useState)(reactTableFiltersState),
42
71
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
43
72
  filtersObjectArray = _useState4[0],
44
73
  setFiltersObjectArray = _useState4[1];
74
+ var previousState = (0, _hooks.usePreviousValue)({
75
+ panelOpen: panelOpen
76
+ });
45
77
 
46
78
  // When using batch actions we have to store the filters to then apply them later
47
- var prevFiltersRef = (0, _react.useRef)(JSON.stringify(filtersState));
48
- var lastAppliedFilters = (0, _react.useRef)(JSON.stringify(reactTableFiltersState));
49
- var prevFiltersObjectArrayRef = (0, _react.useRef)(JSON.stringify(filtersObjectArray));
79
+ var prevFiltersRef = (0, _react2.useRef)(JSON.stringify(filtersState));
80
+ var lastAppliedFilters = (0, _react2.useRef)(JSON.stringify(reactTableFiltersState));
81
+ var prevFiltersObjectArrayRef = (0, _react2.useRef)(JSON.stringify(filtersObjectArray));
82
+ var holdingPrevFiltersRef = (0, _react2.useRef)();
83
+ var holdingLastAppliedFiltersRef = (0, _react2.useRef)([]);
84
+ var holdingPrevFiltersObjectArrayRef = (0, _react2.useRef)([]);
50
85
 
51
86
  /** Methods */
52
87
  // If the user decides to cancel or click outside the flyout, it reverts back to the filters that were
@@ -55,8 +90,14 @@ var useFilters = function useFilters(_ref) {
55
90
  setFiltersState(JSON.parse(prevFiltersRef.current));
56
91
  setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
57
92
  setAllFilters(JSON.parse(lastAppliedFilters.current));
93
+
94
+ // Set the temp prev refs, these will be used to populate the prev values once the
95
+ // panel opens again
96
+ holdingPrevFiltersRef.current = JSON.parse(prevFiltersRef.current);
97
+ holdingLastAppliedFiltersRef.current = JSON.parse(prevFiltersObjectArrayRef.current);
98
+ holdingPrevFiltersObjectArrayRef.current = JSON.parse(lastAppliedFilters.current);
58
99
  };
59
- var reset = function reset() {
100
+ var reset = (0, _react2.useCallback)(function () {
60
101
  // When we reset we want the "initialFilters" to be an empty array
61
102
  var resetFiltersArray = [];
62
103
 
@@ -72,11 +113,11 @@ var useFilters = function useFilters(_ref) {
72
113
  // Update their respective refs so everything is in sync
73
114
  prevFiltersRef.current = JSON.stringify(initialFiltersState);
74
115
  prevFiltersObjectArrayRef.current = JSON.stringify(initialFiltersObjectArray);
75
- };
76
- var applyFilters = function applyFilters(_ref2) {
77
- var column = _ref2.column,
78
- value = _ref2.value,
79
- type = _ref2.type;
116
+ }, [filters, setAllFilters, variation]);
117
+ var applyFilters = function applyFilters(_ref3) {
118
+ var column = _ref3.column,
119
+ value = _ref3.value,
120
+ type = _ref3.type;
80
121
  // If no end date is selected return because we need the end date to do computations
81
122
  if (type === _constants.DATE && value.length > 0 && !value[1]) {
82
123
  return;
@@ -161,19 +202,50 @@ var useFilters = function useFilters(_ref) {
161
202
  }
162
203
  };
163
204
  /** Render the individual filter component */
164
- var renderFilter = function renderFilter(_ref3) {
205
+ var renderFilter = function renderFilter(_ref4) {
165
206
  var _filtersState$column, _filtersState$column2, _filtersState$column3, _filtersState$column4;
166
- var type = _ref3.type,
167
- column = _ref3.column,
168
- components = _ref3.props;
207
+ var type = _ref4.type,
208
+ column = _ref4.column,
209
+ components = _ref4.props;
169
210
  var filter;
170
211
  var isPanel = variation === _constants.PANEL;
171
212
  if (!type) {
172
213
  return console.error("type: ".concat(type, "; does not exist as a type of filter."));
173
214
  }
215
+ var renderCheckboxes = function renderCheckboxes() {
216
+ if (variation === _constants.PANEL && filtersState[column].value.length > 10) {
217
+ return /*#__PURE__*/_react2.default.createElement(_OverflowCheckboxes.default, {
218
+ components: components,
219
+ type: type,
220
+ column: column,
221
+ setFiltersState: setFiltersState,
222
+ filtersState: filtersState,
223
+ applyFilters: applyFilters
224
+ });
225
+ }
226
+ return /*#__PURE__*/_react2.default.createElement(_react.FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
227
+ return /*#__PURE__*/_react2.default.createElement(_react.Checkbox, (0, _extends2.default)({
228
+ key: option.id
229
+ }, option, {
230
+ onChange: function onChange(_, _ref5) {
231
+ var checked = _ref5.checked;
232
+ handleCheckboxChange({
233
+ checked: checked,
234
+ filtersState: filtersState,
235
+ column: column,
236
+ option: option,
237
+ setFiltersState: setFiltersState,
238
+ applyFilters: applyFilters,
239
+ type: type
240
+ });
241
+ },
242
+ checked: option.selected
243
+ }));
244
+ }));
245
+ };
174
246
  switch (type) {
175
247
  case _constants.DATE:
176
- filter = /*#__PURE__*/_react.default.createElement(_react2.DatePicker, (0, _extends2.default)({}, components.DatePicker, {
248
+ filter = /*#__PURE__*/_react2.default.createElement(_react.DatePicker, (0, _extends2.default)({}, components.DatePicker, {
177
249
  onChange: function onChange(value) {
178
250
  var _components$DatePicke, _components$DatePicke2;
179
251
  setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
@@ -189,16 +261,16 @@ var useFilters = function useFilters(_ref) {
189
261
  },
190
262
  value: filtersState[column].value,
191
263
  datePickerType: "range"
192
- }), /*#__PURE__*/_react.default.createElement(_react2.DatePickerInput, (0, _extends2.default)({
264
+ }), /*#__PURE__*/_react2.default.createElement(_react.DatePickerInput, (0, _extends2.default)({
193
265
  placeholder: "mm/dd/yyyy",
194
266
  labelText: "Start date"
195
- }, components.DatePickerInput.start)), /*#__PURE__*/_react.default.createElement(_react2.DatePickerInput, (0, _extends2.default)({
267
+ }, components.DatePickerInput.start)), /*#__PURE__*/_react2.default.createElement(_react.DatePickerInput, (0, _extends2.default)({
196
268
  placeholder: "mm/dd/yyyy",
197
269
  labelText: "End date"
198
270
  }, components.DatePickerInput.end)));
199
271
  break;
200
272
  case _constants.NUMBER:
201
- filter = /*#__PURE__*/_react.default.createElement(_react2.NumberInput, (0, _extends2.default)({
273
+ filter = /*#__PURE__*/_react2.default.createElement(_react.NumberInput, (0, _extends2.default)({
202
274
  step: 1,
203
275
  allowEmpty: true,
204
276
  hideSteppers: true
@@ -220,35 +292,10 @@ var useFilters = function useFilters(_ref) {
220
292
  }));
221
293
  break;
222
294
  case _constants.CHECKBOX:
223
- filter = /*#__PURE__*/_react.default.createElement(_react2.FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
224
- return /*#__PURE__*/_react.default.createElement(_react2.Checkbox, (0, _extends2.default)({
225
- key: option.labelText
226
- }, option, {
227
- onChange: function onChange(_, _ref4) {
228
- var _option$onChange;
229
- var isSelected = _ref4.checked;
230
- var checkboxCopy = filtersState[column].value;
231
- var foundCheckbox = checkboxCopy.find(function (checkbox) {
232
- return checkbox.value === option.value;
233
- });
234
- foundCheckbox.selected = isSelected;
235
- setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
236
- value: checkboxCopy,
237
- type: type
238
- })));
239
- applyFilters({
240
- column: column,
241
- value: (0, _toConsumableArray2.default)(filtersState[column].value),
242
- type: type
243
- });
244
- (_option$onChange = option.onChange) === null || _option$onChange === void 0 || _option$onChange.call(option, isSelected);
245
- },
246
- checked: option.selected
247
- }));
248
- }));
295
+ filter = renderCheckboxes();
249
296
  break;
250
297
  case _constants.RADIO:
251
- filter = /*#__PURE__*/_react.default.createElement(_react2.FormGroup, components.FormGroup, /*#__PURE__*/_react.default.createElement(_react2.RadioButtonGroup, (0, _extends2.default)({}, components.RadioButtonGroup, {
298
+ filter = /*#__PURE__*/_react2.default.createElement(_react.FormGroup, components.FormGroup, /*#__PURE__*/_react2.default.createElement(_react.RadioButtonGroup, (0, _extends2.default)({}, components.RadioButtonGroup, {
252
299
  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,
253
300
  onChange: function onChange(selected) {
254
301
  var _components$RadioButt, _components$RadioButt2;
@@ -263,24 +310,24 @@ var useFilters = function useFilters(_ref) {
263
310
  });
264
311
  (_components$RadioButt = (_components$RadioButt2 = components.RadioButtonGroup).onChange) === null || _components$RadioButt === void 0 || _components$RadioButt.call(_components$RadioButt2, selected);
265
312
  }
266
- }), /*#__PURE__*/_react.default.createElement(_react2.RadioButton, {
313
+ }), /*#__PURE__*/_react2.default.createElement(_react.RadioButton, {
267
314
  id: "any",
268
315
  labelText: "Any",
269
316
  value: "Any"
270
317
  }), components.RadioButton.map(function (radio) {
271
- var _ref5, _radio$id;
272
- return /*#__PURE__*/_react.default.createElement(_react2.RadioButton, (0, _extends2.default)({
273
- key: (_ref5 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref5 !== void 0 ? _ref5 : radio.value
318
+ var _ref6, _radio$id;
319
+ return /*#__PURE__*/_react2.default.createElement(_react.RadioButton, (0, _extends2.default)({
320
+ key: (_ref6 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref6 !== void 0 ? _ref6 : radio.value
274
321
  }, radio));
275
322
  })));
276
323
  break;
277
324
  case _constants.DROPDOWN:
278
- filter = /*#__PURE__*/_react.default.createElement(_react2.Dropdown, (0, _extends2.default)({}, components.Dropdown, {
325
+ filter = /*#__PURE__*/_react2.default.createElement(_react.Dropdown, (0, _extends2.default)({}, components.Dropdown, {
279
326
  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,
280
327
  items: ['Any'].concat((0, _toConsumableArray2.default)(components.Dropdown.items)),
281
- onChange: function onChange(_ref6) {
328
+ onChange: function onChange(_ref7) {
282
329
  var _components$Dropdown$, _components$Dropdown;
283
- var selectedItem = _ref6.selectedItem;
330
+ var selectedItem = _ref7.selectedItem;
284
331
  setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
285
332
  value: selectedItem,
286
333
  type: type
@@ -296,14 +343,33 @@ var useFilters = function useFilters(_ref) {
296
343
  break;
297
344
  }
298
345
  if (isPanel) {
299
- return /*#__PURE__*/_react.default.createElement(_react2.Layer, {
346
+ return /*#__PURE__*/_react2.default.createElement(_react.Layer, {
300
347
  key: column
301
348
  }, filter);
302
349
  }
303
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
350
+ return /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, {
304
351
  key: column
305
352
  }, filter);
306
353
  };
354
+
355
+ /** This useEffect will properly handle the previous filters when the panel closes
356
+ * 1. If the panel closes we need to call the reset fn but also store the
357
+ * previous filters in a (new) temporary place.
358
+ * 2. When the panel opens again, take the values from the temporary place
359
+ * and populate the filter state with them
360
+ */
361
+ (0, _react2.useEffect)(function () {
362
+ if (!panelOpen && previousState !== null && previousState !== void 0 && previousState.panelOpen) {
363
+ setAllFilters(holdingLastAppliedFiltersRef.current);
364
+ }
365
+ if (panelOpen && !(previousState !== null && previousState !== void 0 && previousState.panelOpen)) {
366
+ if (holdingPrevFiltersRef.current && holdingLastAppliedFiltersRef.current && holdingPrevFiltersObjectArrayRef.current) {
367
+ setFiltersState(holdingPrevFiltersRef.current);
368
+ setFiltersObjectArray(holdingLastAppliedFiltersRef.current);
369
+ setAllFilters(JSON.parse(prevFiltersObjectArrayRef.current));
370
+ }
371
+ }
372
+ }, [panelOpen, previousState, previousState === null || previousState === void 0 ? void 0 : previousState.panelOpen, reset, setAllFilters]);
307
373
  var cancel = function cancel() {
308
374
  // Reverting to previous filters only applies when using batch actions
309
375
  if (updateMethod === _constants.BATCH) {
@@ -314,7 +380,7 @@ var useFilters = function useFilters(_ref) {
314
380
 
315
381
  /** The purpose of this function is to sync any changes in react-tables state.filters array and reflect
316
382
  those new filter changes in the panel/flyout state. The external change is triggered if setAllFilters is called outside of the Datagrid */
317
- (0, _react.useEffect)(function updateStateAndFiltersToReflectExternalFilterChanges() {
383
+ (0, _react2.useEffect)(function updateStateAndFiltersToReflectExternalFilterChanges() {
318
384
  var newFiltersState = (0, _utils.getInitialStateFromFilters)(filters, variation, reactTableFiltersState);
319
385
  setFiltersState(newFiltersState);
320
386
  prevFiltersRef.current = JSON.stringify(newFiltersState);
@@ -1,17 +1,22 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.getInitialStateFromFilters = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
7
10
  var _constants = require("./constants");
11
+ var _excluded = ["id", "labelText", "value"];
8
12
  /**
9
13
  * Copyright IBM Corp. 2022, 2023
10
14
  *
11
15
  * This source code is licensed under the Apache-2.0 license found in the
12
16
  * LICENSE file in the root directory of this source tree.
13
17
  */
14
-
18
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
20
  var applyInitialFilters = function applyInitialFilters(filterState, initialFilters) {
16
21
  Object.keys(filterState).forEach(function (key) {
17
22
  var hasInitialFilter = initialFilters.find(function (filter) {
@@ -37,13 +42,14 @@ var getInitialStateFromFilters = function getInitialStateFromFilters(filters) {
37
42
  value: props.Checkbox.map(function (_ref2) {
38
43
  var id = _ref2.id,
39
44
  labelText = _ref2.labelText,
40
- value = _ref2.value;
41
- return {
45
+ value = _ref2.value,
46
+ rest = (0, _objectWithoutProperties2.default)(_ref2, _excluded);
47
+ return _objectSpread({
42
48
  id: id,
43
49
  labelText: labelText,
44
50
  value: value,
45
51
  selected: false
46
- };
52
+ }, rest);
47
53
  }),
48
54
  type: type
49
55
  };