@redhat-cloud-services/frontend-components 3.4.13 → 3.4.14

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.
@@ -43,10 +43,14 @@ var _Popper = require("@patternfly/react-core/dist/js/helpers/Popper/Popper.js")
43
43
 
44
44
  var _Radio = require("@patternfly/react-core/dist/js/components/Radio/Radio.js");
45
45
 
46
+ var _TreeView = require("@patternfly/react-core/dist/js/components/TreeView/TreeView.js");
47
+
46
48
  var _groupFilterConstants = require("./groupFilterConstants");
47
49
 
48
50
  var _groupType = _interopRequireDefault(require("./groupType"));
49
51
 
52
+ require("./group-filter.css");
53
+
50
54
  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); }
51
55
 
52
56
  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; }
@@ -126,50 +130,65 @@ var Group = function Group(_ref) {
126
130
  setIsOpen(!isOpen);
127
131
  };
128
132
 
133
+ var menuItems = (0, _groupFilterConstants.getMenuItems)(items === null || items === void 0 ? void 0 : items.map(function (item) {
134
+ return item.type === _groupType["default"].treeView ? (0, _groupFilterConstants.convertTreeItem)(item) : item;
135
+ }), onChange, (0, _groupFilterConstants.calculateSelected)(selected));
129
136
  var groupMenuItems = (0, _groupFilterConstants.getGroupMenuItems)(groups, onChange, (0, _groupFilterConstants.calculateSelected)(selected));
130
- var menuItems = (0, _groupFilterConstants.getMenuItems)(items, onChange, (0, _groupFilterConstants.calculateSelected)(selected)); // eslint-disable-next-line react/prop-types
137
+
138
+ var renderItem = function renderItem(item, key, type, groupKey) {
139
+ return /*#__PURE__*/_react["default"].createElement(_MenuItem.MenuItem, {
140
+ itemId: key,
141
+ key: "".concat(item.value, "-").concat(key, "-item"),
142
+ className: item === null || item === void 0 ? void 0 : item.className,
143
+ onClick: item.onClick && (type || item.type) === _groupType["default"].checkbox ? function (e) {
144
+ item.onClick();
145
+ e.preventDefault();
146
+ } : undefined
147
+ }, (type || item.type) === _groupType["default"].treeView ? /*#__PURE__*/_react["default"].createElement(_TreeView.TreeView, {
148
+ data: [(0, _groupFilterConstants.mapTree)(item, groupKey, stateSelected, selected)],
149
+ onCheck: function onCheck(e, value) {
150
+ return (0, _groupFilterConstants.onTreeCheck)(e, value, [item]);
151
+ },
152
+ hasChecks: true
153
+ }) : (type || item.type) === _groupType["default"].checkbox ? /*#__PURE__*/_react["default"].createElement(_Checkbox.Checkbox, (0, _extends2["default"])({}, item, {
154
+ label: item === null || item === void 0 ? void 0 : item.label,
155
+ isChecked: (item === null || item === void 0 ? void 0 : item.isChecked) || (0, _groupFilterConstants.isChecked)(groupKey, (item === null || item === void 0 ? void 0 : item.value) || key, item === null || item === void 0 ? void 0 : item.id, item === null || item === void 0 ? void 0 : item.tagValue, stateSelected, selected) || false,
156
+ onChange: function onChange(value, event) {
157
+ var _item$onChange;
158
+
159
+ item === null || item === void 0 ? void 0 : (_item$onChange = item.onChange) === null || _item$onChange === void 0 ? void 0 : _item$onChange.call(item, value, event);
160
+ },
161
+ onClick: item.onClick ? function (e) {
162
+ item.onClick();
163
+ e.stopPropagation();
164
+ } : undefined,
165
+ name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
166
+ id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
167
+ })) : (type || item.type) === _groupType["default"].radio ? /*#__PURE__*/_react["default"].createElement(_Radio.Radio, (0, _extends2["default"])({}, item, {
168
+ isChecked: (item === null || item === void 0 ? void 0 : item.isChecked) || (0, _groupFilterConstants.isChecked)((groups === null || groups === void 0 ? void 0 : groups.value) || groupKey, (item === null || item === void 0 ? void 0 : item.value) || key, item === null || item === void 0 ? void 0 : item.id, item === null || item === void 0 ? void 0 : item.tagValue, stateSelected, selected) || false,
169
+ onChange: function onChange(value, event) {
170
+ var _item$onChange2;
171
+
172
+ item === null || item === void 0 ? void 0 : (_item$onChange2 = item.onChange) === null || _item$onChange2 === void 0 ? void 0 : _item$onChange2.call(item, value, event);
173
+ },
174
+ value: (item === null || item === void 0 ? void 0 : item.value) || key,
175
+ name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
176
+ label: (item === null || item === void 0 ? void 0 : item.label) || '',
177
+ id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
178
+ })) : (type || item.type) === _groupType["default"].button ? /*#__PURE__*/_react["default"].createElement(_Button.Button, (0, _extends2["default"])({}, item, {
179
+ className: "pf-c-select__option-button ".concat((item === null || item === void 0 ? void 0 : item.className) || ''),
180
+ variant: item === null || item === void 0 ? void 0 : item.variant,
181
+ onClick: item.onClick
182
+ }), item === null || item === void 0 ? void 0 : item.label) : (item === null || item === void 0 ? void 0 : item.label) || '');
183
+ };
131
184
 
132
185
  var renderItems = function renderItems(items, type) {
133
186
  var groupKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
134
187
  return items.map(function (item, key) {
135
- return /*#__PURE__*/_react["default"].createElement(_MenuItem.MenuItem, {
136
- itemId: key,
188
+ return (type || item.type) === _groupType["default"].treeView ? /*#__PURE__*/_react["default"].createElement("div", {
137
189
  key: "".concat(item.value, "-").concat(key, "-item"),
138
- className: item === null || item === void 0 ? void 0 : item.className,
139
- onClick: item.onClick && (type || item.type) === _groupType["default"].checkbox ? function (e) {
140
- item.onClick();
141
- e.preventDefault();
142
- } : undefined
143
- }, (type || item.type) === _groupType["default"].checkbox ? /*#__PURE__*/_react["default"].createElement(_Checkbox.Checkbox, (0, _extends2["default"])({}, item, {
144
- label: item === null || item === void 0 ? void 0 : item.label,
145
- isChecked: (item === null || item === void 0 ? void 0 : item.isChecked) || (0, _groupFilterConstants.isChecked)(groupKey, (item === null || item === void 0 ? void 0 : item.value) || key, item === null || item === void 0 ? void 0 : item.id, item === null || item === void 0 ? void 0 : item.tagValue, stateSelected, selected) || false,
146
- onChange: function onChange(value, event) {
147
- var _item$onChange;
148
-
149
- item === null || item === void 0 ? void 0 : (_item$onChange = item.onChange) === null || _item$onChange === void 0 ? void 0 : _item$onChange.call(item, value, event);
150
- },
151
- onClick: item.onClick ? function (e) {
152
- item.onClick();
153
- e.stopPropagation();
154
- } : undefined,
155
- name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
156
- id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
157
- })) : (type || item.type) === _groupType["default"].radio ? /*#__PURE__*/_react["default"].createElement(_Radio.Radio, (0, _extends2["default"])({}, item, {
158
- isChecked: (item === null || item === void 0 ? void 0 : item.isChecked) || (0, _groupFilterConstants.isChecked)((groups === null || groups === void 0 ? void 0 : groups.value) || groupKey, (item === null || item === void 0 ? void 0 : item.value) || key, item === null || item === void 0 ? void 0 : item.id, item === null || item === void 0 ? void 0 : item.tagValue, stateSelected, selected) || false,
159
- onChange: function onChange(value, event) {
160
- var _item$onChange2;
161
-
162
- item === null || item === void 0 ? void 0 : (_item$onChange2 = item.onChange) === null || _item$onChange2 === void 0 ? void 0 : _item$onChange2.call(item, value, event);
163
- },
164
- value: (item === null || item === void 0 ? void 0 : item.value) || key,
165
- name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
166
- label: (item === null || item === void 0 ? void 0 : item.label) || '',
167
- id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
168
- })) : (type || item.type) === _groupType["default"].button ? /*#__PURE__*/_react["default"].createElement(_Button.Button, (0, _extends2["default"])({}, item, {
169
- className: "pf-c-select__option-button ".concat((item === null || item === void 0 ? void 0 : item.className) || ''),
170
- variant: item === null || item === void 0 ? void 0 : item.variant,
171
- onClick: item.onClick
172
- }), item === null || item === void 0 ? void 0 : item.label) : (item === null || item === void 0 ? void 0 : item.label) || '');
190
+ className: "ins-c-tree-view"
191
+ }, renderItem(item, key, type, groupKey)) : renderItem(item, key, type, groupKey);
173
192
  });
174
193
  };
175
194
 
@@ -198,7 +217,7 @@ var Group = function Group(_ref) {
198
217
  className: (0, _classnames["default"])('ins-c-menu__scrollable', className, {
199
218
  'pf-m-expanded': isOpen
200
219
  })
201
- }, /*#__PURE__*/_react["default"].createElement(_MenuContent.MenuContent, null, /*#__PURE__*/_react["default"].createElement(_MenuList.MenuList, null, menuItems.length > 0 && /*#__PURE__*/_react["default"].createElement(_MenuGroup.MenuGroup, null, renderItems(items)), groupMenuItems.map(function (group, groupKey) {
220
+ }, /*#__PURE__*/_react["default"].createElement(_MenuContent.MenuContent, null, /*#__PURE__*/_react["default"].createElement(_MenuList.MenuList, null, menuItems.length > 0 && /*#__PURE__*/_react["default"].createElement(_MenuGroup.MenuGroup, null, renderItems(menuItems)), groupMenuItems.map(function (group, groupKey) {
202
221
  return /*#__PURE__*/_react["default"].createElement(_MenuGroup.MenuGroup, {
203
222
  label: group.label,
204
223
  key: "".concat(group.label, "-").concat(groupKey, "-group")
@@ -0,0 +1,19 @@
1
+ :root {
2
+ --ins-color--orange: #ec7a08;
3
+ }
4
+
5
+ .ins-c-tree-view .pf-c-tree-view {
6
+ padding: 0;
7
+ }
8
+ .ins-c-tree-view .pf-c-menu__list-item {
9
+ background: none;
10
+ }
11
+ .ins-c-tree-view .pf-c-menu__list-item .pf-c-menu__item {
12
+ padding: 0;
13
+ }
14
+ .ins-c-tree-view .pf-c-menu__list-item .pf-c-menu__item .pf-c-tree-view__content {
15
+ background: none;
16
+ }
17
+ .ins-c-tree-view .pf-c-menu__list-item .pf-c-menu__item .pf-c-tree-view__node {
18
+ background: none;
19
+ }
@@ -0,0 +1,23 @@
1
+ @import '~@redhat-cloud-services/frontend-components-utilities/styles/_all.scss';
2
+
3
+ .ins-c-tree-view {
4
+ .pf-c-tree-view {
5
+ padding: 0;
6
+ }
7
+
8
+ .pf-c-menu__list-item {
9
+ background: none;
10
+
11
+ .pf-c-menu__item {
12
+ padding: 0;
13
+
14
+ .pf-c-tree-view__content {
15
+ background: none;
16
+ }
17
+
18
+ .pf-c-tree-view__node {
19
+ background: none;
20
+ }
21
+ }
22
+ }
23
+ }
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.calculateSelected = exports.getGroupMenuItems = exports.getMenuItems = exports.isChecked = void 0;
8
+ exports.onTreeCheck = exports.mapTree = exports.calculateSelected = exports.getGroupMenuItems = exports.convertTreeItem = exports.getMenuItems = exports.isChecked = void 0;
9
9
 
10
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
11
 
@@ -56,10 +56,10 @@ var getMenuItems = function getMenuItems(items, onChange, calculateSelected, gro
56
56
  return _objectSpread(_objectSpread({}, item), {}, {
57
57
  key: item.id || item.value || index,
58
58
  value: String(item.value || item.id || index),
59
- onClick: function onClick(event) {
59
+ onClick: function onClick(event, treeViewItem, checked) {
60
60
  var _item$onClick;
61
61
 
62
- var params = [event, calculateSelected(groupType || item.type, groupValue, item.value), _objectSpread({
62
+ var params = [event, calculateSelected(groupType || item.type, groupValue, (groupType || item.type) === _groupType["default"].treeView ? treeViewItem : item.value, checked), _objectSpread({
63
63
  value: groupValue,
64
64
  label: groupLabel || item.label,
65
65
  id: groupId || item.id,
@@ -79,6 +79,20 @@ var getMenuItems = function getMenuItems(items, onChange, calculateSelected, gro
79
79
 
80
80
  exports.getMenuItems = getMenuItems;
81
81
 
82
+ var convertTreeItem = function convertTreeItem(item) {
83
+ item.id = item.id || item.value;
84
+ item.name = item.label || item.name;
85
+ item.value = item.id;
86
+ item.label = item.name;
87
+ return item.children ? _objectSpread(_objectSpread({}, item), {}, {
88
+ children: item.children.map(function (child) {
89
+ return convertTreeItem(child);
90
+ })
91
+ }) : item;
92
+ };
93
+
94
+ exports.convertTreeItem = convertTreeItem;
95
+
82
96
  var getGroupMenuItems = function getGroupMenuItems(groups, onChange, calculateSelected) {
83
97
  var result = groups.map(function (_ref2) {
84
98
  var value = _ref2.value,
@@ -87,11 +101,14 @@ var getGroupMenuItems = function getGroupMenuItems(groups, onChange, calculateSe
87
101
  type = _ref2.type,
88
102
  items = _ref2.items,
89
103
  group = (0, _objectWithoutProperties2["default"])(_ref2, ["value", "label", "id", "type", "items"]);
104
+ var converted = type === _groupType["default"].treeView ? items.map(function (item) {
105
+ return convertTreeItem(item);
106
+ }) : items;
90
107
  return {
91
108
  label: label,
92
109
  value: value,
93
110
  type: type,
94
- items: getMenuItems(items, onChange, calculateSelected, type, value, label, id, group)
111
+ items: getMenuItems(converted, onChange, calculateSelected, type, value, label, id, group)
95
112
  };
96
113
  });
97
114
  return result.filter(function (_ref3) {
@@ -105,19 +122,89 @@ var getGroupMenuItems = function getGroupMenuItems(groups, onChange, calculateSe
105
122
  exports.getGroupMenuItems = getGroupMenuItems;
106
123
 
107
124
  var calculateSelected = function calculateSelected(selectedTags) {
108
- return function (type, groupKey, itemKey) {
125
+ return function (type, groupKey, value, checked) {
109
126
  var activeGroup = selectedTags === null || selectedTags === void 0 ? void 0 : selectedTags[groupKey];
110
-
111
- if (activeGroup) {
112
- if (type !== _groupType["default"].radio && (activeGroup[itemKey] instanceof Object ? activeGroup[itemKey].isSelected : Boolean(activeGroup[itemKey]))) {
113
- return _objectSpread(_objectSpread({}, selectedTags), {}, (0, _defineProperty2["default"])({}, groupKey, _objectSpread(_objectSpread({}, activeGroup || {}), {}, (0, _defineProperty2["default"])({}, itemKey, false))));
127
+ var children = type === _groupType["default"].treeView && [value].reduce(function iter(r, a) {
128
+ if (Array.isArray(a.children)) {
129
+ return a.children.reduce(iter, r);
114
130
  }
115
131
 
116
- return _objectSpread(_objectSpread({}, selectedTags), {}, (0, _defineProperty2["default"])({}, groupKey, _objectSpread(_objectSpread({}, type !== _groupType["default"].radio ? activeGroup || {} : {}), {}, (0, _defineProperty2["default"])({}, itemKey, true))));
132
+ r.push(a);
133
+ return r;
134
+ }, []);
135
+ var itemKeys = type === _groupType["default"].treeView ? children.map(function (item) {
136
+ return item.id;
137
+ }) : [value];
138
+
139
+ if (activeGroup) {
140
+ var result = selectedTags;
141
+ itemKeys.map(function (itemKey) {
142
+ var activeGroup = result[groupKey];
143
+
144
+ if (type !== _groupType["default"].radio && (activeGroup[itemKey] instanceof Object ? activeGroup[itemKey].isSelected : Boolean(activeGroup[itemKey]))) {
145
+ result = _objectSpread(_objectSpread({}, result), {}, (0, _defineProperty2["default"])({}, groupKey, _objectSpread(_objectSpread({}, activeGroup || {}), {}, (0, _defineProperty2["default"])({}, itemKey, type === _groupType["default"].treeView && checked))));
146
+ } else {
147
+ result = _objectSpread(_objectSpread({}, result), {}, (0, _defineProperty2["default"])({}, groupKey, _objectSpread(_objectSpread({}, type !== _groupType["default"].radio ? activeGroup || {} : {}), {}, (0, _defineProperty2["default"])({}, itemKey, true))));
148
+ }
149
+ });
150
+ return result;
117
151
  }
118
152
 
119
- return _objectSpread(_objectSpread({}, selectedTags), {}, (0, _defineProperty2["default"])({}, groupKey, (0, _defineProperty2["default"])({}, itemKey, true)));
153
+ return itemKeys.reduce(function (acc, curr) {
154
+ return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, groupKey, _objectSpread(_objectSpread({}, acc === null || acc === void 0 ? void 0 : acc[groupKey]), {}, (0, _defineProperty2["default"])({}, curr, true))));
155
+ }, selectedTags);
156
+ };
157
+ };
158
+
159
+ exports.calculateSelected = calculateSelected;
160
+
161
+ var areAllChildrenChecked = function areAllChildrenChecked(dataItem, groupKey, stateSelected, selected) {
162
+ return dataItem.children ? dataItem.children.every(function (child) {
163
+ return areAllChildrenChecked(child, groupKey, stateSelected, selected);
164
+ }) : isChecked(groupKey, dataItem.id, undefined, undefined, stateSelected, selected);
165
+ };
166
+
167
+ var areSomeChildrenChecked = function areSomeChildrenChecked(dataItem, groupKey, stateSelected, selected) {
168
+ return dataItem.children ? dataItem.children.some(function (child) {
169
+ return areSomeChildrenChecked(child, groupKey, stateSelected, selected);
170
+ }) : isChecked(groupKey, dataItem.id, undefined, undefined, stateSelected, selected);
171
+ };
172
+
173
+ var mapTree = function mapTree(item, groupKey, stateSelected, selected) {
174
+ var hasCheck = areAllChildrenChecked(item, groupKey, stateSelected, selected);
175
+ item.checkProps = {
176
+ checked: false
120
177
  };
178
+
179
+ if (hasCheck) {
180
+ item.checkProps.checked = true;
181
+ } else {
182
+ var hasPartialCheck = areSomeChildrenChecked(item, groupKey, stateSelected, selected);
183
+
184
+ if (hasPartialCheck) {
185
+ item.checkProps = {
186
+ checked: null
187
+ };
188
+ }
189
+ }
190
+
191
+ if (item.children) {
192
+ return _objectSpread(_objectSpread({}, item), {}, {
193
+ children: item.children.map(function (child) {
194
+ return mapTree(child, groupKey, stateSelected, selected);
195
+ })
196
+ });
197
+ }
198
+
199
+ return item;
200
+ };
201
+
202
+ exports.mapTree = mapTree;
203
+
204
+ var onTreeCheck = function onTreeCheck(e, treeViewItem, tree) {
205
+ var _e$target;
206
+
207
+ return tree[0].onClick(e, treeViewItem, e === null || e === void 0 ? void 0 : (_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.checked);
121
208
  };
122
209
 
123
- exports.calculateSelected = calculateSelected;
210
+ exports.onTreeCheck = onTreeCheck;
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports["default"] = void 0;
7
7
  var groupType = {
8
+ treeView: 'treeView',
8
9
  checkbox: 'checkbox',
9
10
  radio: 'radio',
10
11
  button: 'button',
@@ -15,8 +15,10 @@ import { Menu } from "@patternfly/react-core/dist/esm/components/Menu/Menu.js";
15
15
  import { MenuContent } from "@patternfly/react-core/dist/esm/components/Menu/MenuContent.js";
16
16
  import { Popper } from "@patternfly/react-core/dist/esm/helpers/Popper/Popper.js";
17
17
  import { Radio } from "@patternfly/react-core/dist/esm/components/Radio/Radio.js";
18
- import { isChecked, calculateSelected, getGroupMenuItems, getMenuItems } from './groupFilterConstants';
18
+ import { TreeView } from "@patternfly/react-core/dist/esm/components/TreeView/TreeView.js";
19
+ import { isChecked, calculateSelected, getGroupMenuItems, getMenuItems, convertTreeItem, mapTree, onTreeCheck } from './groupFilterConstants';
19
20
  import groupType from './groupType';
21
+ import "../../ConditionalFilter/./group-filter.css";
20
22
 
21
23
  var Group = function Group(_ref) {
22
24
  var placeholder = _ref.placeholder,
@@ -93,50 +95,65 @@ var Group = function Group(_ref) {
93
95
  setIsOpen(!isOpen);
94
96
  };
95
97
 
98
+ var menuItems = getMenuItems(items === null || items === void 0 ? void 0 : items.map(function (item) {
99
+ return item.type === groupType.treeView ? convertTreeItem(item) : item;
100
+ }), onChange, calculateSelected(selected));
96
101
  var groupMenuItems = getGroupMenuItems(groups, onChange, calculateSelected(selected));
97
- var menuItems = getMenuItems(items, onChange, calculateSelected(selected)); // eslint-disable-next-line react/prop-types
102
+
103
+ var renderItem = function renderItem(item, key, type, groupKey) {
104
+ return /*#__PURE__*/React.createElement(MenuItem, {
105
+ itemId: key,
106
+ key: "".concat(item.value, "-").concat(key, "-item"),
107
+ className: item === null || item === void 0 ? void 0 : item.className,
108
+ onClick: item.onClick && (type || item.type) === groupType.checkbox ? function (e) {
109
+ item.onClick();
110
+ e.preventDefault();
111
+ } : undefined
112
+ }, (type || item.type) === groupType.treeView ? /*#__PURE__*/React.createElement(TreeView, {
113
+ data: [mapTree(item, groupKey, stateSelected, selected)],
114
+ onCheck: function onCheck(e, value) {
115
+ return onTreeCheck(e, value, [item]);
116
+ },
117
+ hasChecks: true
118
+ }) : (type || item.type) === groupType.checkbox ? /*#__PURE__*/React.createElement(Checkbox, _extends({}, item, {
119
+ label: item === null || item === void 0 ? void 0 : item.label,
120
+ isChecked: (item === null || item === void 0 ? void 0 : item.isChecked) || isChecked(groupKey, (item === null || item === void 0 ? void 0 : item.value) || key, item === null || item === void 0 ? void 0 : item.id, item === null || item === void 0 ? void 0 : item.tagValue, stateSelected, selected) || false,
121
+ onChange: function onChange(value, event) {
122
+ var _item$onChange;
123
+
124
+ item === null || item === void 0 ? void 0 : (_item$onChange = item.onChange) === null || _item$onChange === void 0 ? void 0 : _item$onChange.call(item, value, event);
125
+ },
126
+ onClick: item.onClick ? function (e) {
127
+ item.onClick();
128
+ e.stopPropagation();
129
+ } : undefined,
130
+ name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
131
+ id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
132
+ })) : (type || item.type) === groupType.radio ? /*#__PURE__*/React.createElement(Radio, _extends({}, item, {
133
+ isChecked: (item === null || item === void 0 ? void 0 : item.isChecked) || isChecked((groups === null || groups === void 0 ? void 0 : groups.value) || groupKey, (item === null || item === void 0 ? void 0 : item.value) || key, item === null || item === void 0 ? void 0 : item.id, item === null || item === void 0 ? void 0 : item.tagValue, stateSelected, selected) || false,
134
+ onChange: function onChange(value, event) {
135
+ var _item$onChange2;
136
+
137
+ item === null || item === void 0 ? void 0 : (_item$onChange2 = item.onChange) === null || _item$onChange2 === void 0 ? void 0 : _item$onChange2.call(item, value, event);
138
+ },
139
+ value: (item === null || item === void 0 ? void 0 : item.value) || key,
140
+ name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
141
+ label: (item === null || item === void 0 ? void 0 : item.label) || '',
142
+ id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
143
+ })) : (type || item.type) === groupType.button ? /*#__PURE__*/React.createElement(Button, _extends({}, item, {
144
+ className: "pf-c-select__option-button ".concat((item === null || item === void 0 ? void 0 : item.className) || ''),
145
+ variant: item === null || item === void 0 ? void 0 : item.variant,
146
+ onClick: item.onClick
147
+ }), item === null || item === void 0 ? void 0 : item.label) : (item === null || item === void 0 ? void 0 : item.label) || '');
148
+ };
98
149
 
99
150
  var renderItems = function renderItems(items, type) {
100
151
  var groupKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
101
152
  return items.map(function (item, key) {
102
- return /*#__PURE__*/React.createElement(MenuItem, {
103
- itemId: key,
153
+ return (type || item.type) === groupType.treeView ? /*#__PURE__*/React.createElement("div", {
104
154
  key: "".concat(item.value, "-").concat(key, "-item"),
105
- className: item === null || item === void 0 ? void 0 : item.className,
106
- onClick: item.onClick && (type || item.type) === groupType.checkbox ? function (e) {
107
- item.onClick();
108
- e.preventDefault();
109
- } : undefined
110
- }, (type || item.type) === groupType.checkbox ? /*#__PURE__*/React.createElement(Checkbox, _extends({}, item, {
111
- label: item === null || item === void 0 ? void 0 : item.label,
112
- isChecked: (item === null || item === void 0 ? void 0 : item.isChecked) || isChecked(groupKey, (item === null || item === void 0 ? void 0 : item.value) || key, item === null || item === void 0 ? void 0 : item.id, item === null || item === void 0 ? void 0 : item.tagValue, stateSelected, selected) || false,
113
- onChange: function onChange(value, event) {
114
- var _item$onChange;
115
-
116
- item === null || item === void 0 ? void 0 : (_item$onChange = item.onChange) === null || _item$onChange === void 0 ? void 0 : _item$onChange.call(item, value, event);
117
- },
118
- onClick: item.onClick ? function (e) {
119
- item.onClick();
120
- e.stopPropagation();
121
- } : undefined,
122
- name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
123
- id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
124
- })) : (type || item.type) === groupType.radio ? /*#__PURE__*/React.createElement(Radio, _extends({}, item, {
125
- isChecked: (item === null || item === void 0 ? void 0 : item.isChecked) || isChecked((groups === null || groups === void 0 ? void 0 : groups.value) || groupKey, (item === null || item === void 0 ? void 0 : item.value) || key, item === null || item === void 0 ? void 0 : item.id, item === null || item === void 0 ? void 0 : item.tagValue, stateSelected, selected) || false,
126
- onChange: function onChange(value, event) {
127
- var _item$onChange2;
128
-
129
- item === null || item === void 0 ? void 0 : (_item$onChange2 = item.onChange) === null || _item$onChange2 === void 0 ? void 0 : _item$onChange2.call(item, value, event);
130
- },
131
- value: (item === null || item === void 0 ? void 0 : item.value) || key,
132
- name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
133
- label: (item === null || item === void 0 ? void 0 : item.label) || '',
134
- id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
135
- })) : (type || item.type) === groupType.button ? /*#__PURE__*/React.createElement(Button, _extends({}, item, {
136
- className: "pf-c-select__option-button ".concat((item === null || item === void 0 ? void 0 : item.className) || ''),
137
- variant: item === null || item === void 0 ? void 0 : item.variant,
138
- onClick: item.onClick
139
- }), item === null || item === void 0 ? void 0 : item.label) : (item === null || item === void 0 ? void 0 : item.label) || '');
155
+ className: "ins-c-tree-view"
156
+ }, renderItem(item, key, type, groupKey)) : renderItem(item, key, type, groupKey);
140
157
  });
141
158
  };
142
159
 
@@ -165,7 +182,7 @@ var Group = function Group(_ref) {
165
182
  className: classNames('ins-c-menu__scrollable', className, {
166
183
  'pf-m-expanded': isOpen
167
184
  })
168
- }, /*#__PURE__*/React.createElement(MenuContent, null, /*#__PURE__*/React.createElement(MenuList, null, menuItems.length > 0 && /*#__PURE__*/React.createElement(MenuGroup, null, renderItems(items)), groupMenuItems.map(function (group, groupKey) {
185
+ }, /*#__PURE__*/React.createElement(MenuContent, null, /*#__PURE__*/React.createElement(MenuList, null, menuItems.length > 0 && /*#__PURE__*/React.createElement(MenuGroup, null, renderItems(menuItems)), groupMenuItems.map(function (group, groupKey) {
169
186
  return /*#__PURE__*/React.createElement(MenuGroup, {
170
187
  label: group.label,
171
188
  key: "".concat(group.label, "-").concat(groupKey, "-group")
@@ -5,7 +5,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
5
5
 
6
6
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
7
7
 
8
- import groupType from './groupType';
8
+ import groupTypes from './groupType';
9
9
  export var isChecked = function isChecked(groupValue, itemValue, id, tagValue, stateSelected, propSelected) {
10
10
  var selected = _objectSpread(_objectSpread({}, propSelected), stateSelected);
11
11
 
@@ -42,10 +42,10 @@ export var getMenuItems = function getMenuItems(items, onChange, calculateSelect
42
42
  return _objectSpread(_objectSpread({}, item), {}, {
43
43
  key: item.id || item.value || index,
44
44
  value: String(item.value || item.id || index),
45
- onClick: function onClick(event) {
45
+ onClick: function onClick(event, treeViewItem, checked) {
46
46
  var _item$onClick;
47
47
 
48
- var params = [event, calculateSelected(groupType || item.type, groupValue, item.value), _objectSpread({
48
+ var params = [event, calculateSelected(groupType || item.type, groupValue, (groupType || item.type) === groupTypes.treeView ? treeViewItem : item.value, checked), _objectSpread({
49
49
  value: groupValue,
50
50
  label: groupLabel || item.label,
51
51
  id: groupId || item.id,
@@ -62,6 +62,17 @@ export var getMenuItems = function getMenuItems(items, onChange, calculateSelect
62
62
  return !noFilter;
63
63
  });
64
64
  };
65
+ export var convertTreeItem = function convertTreeItem(item) {
66
+ item.id = item.id || item.value;
67
+ item.name = item.label || item.name;
68
+ item.value = item.id;
69
+ item.label = item.name;
70
+ return item.children ? _objectSpread(_objectSpread({}, item), {}, {
71
+ children: item.children.map(function (child) {
72
+ return convertTreeItem(child);
73
+ })
74
+ }) : item;
75
+ };
65
76
  export var getGroupMenuItems = function getGroupMenuItems(groups, onChange, calculateSelected) {
66
77
  var result = groups.map(function (_ref2) {
67
78
  var value = _ref2.value,
@@ -71,11 +82,14 @@ export var getGroupMenuItems = function getGroupMenuItems(groups, onChange, calc
71
82
  items = _ref2.items,
72
83
  group = _objectWithoutProperties(_ref2, ["value", "label", "id", "type", "items"]);
73
84
 
85
+ var converted = type === groupTypes.treeView ? items.map(function (item) {
86
+ return convertTreeItem(item);
87
+ }) : items;
74
88
  return {
75
89
  label: label,
76
90
  value: value,
77
91
  type: type,
78
- items: getMenuItems(items, onChange, calculateSelected, type, value, label, id, group)
92
+ items: getMenuItems(converted, onChange, calculateSelected, type, value, label, id, group)
79
93
  };
80
94
  });
81
95
  return result.filter(function (_ref3) {
@@ -86,17 +100,82 @@ export var getGroupMenuItems = function getGroupMenuItems(groups, onChange, calc
86
100
  });
87
101
  };
88
102
  export var calculateSelected = function calculateSelected(selectedTags) {
89
- return function (type, groupKey, itemKey) {
103
+ return function (type, groupKey, value, checked) {
90
104
  var activeGroup = selectedTags === null || selectedTags === void 0 ? void 0 : selectedTags[groupKey];
105
+ var children = type === groupTypes.treeView && [value].reduce(function iter(r, a) {
106
+ if (Array.isArray(a.children)) {
107
+ return a.children.reduce(iter, r);
108
+ }
109
+
110
+ r.push(a);
111
+ return r;
112
+ }, []);
113
+ var itemKeys = type === groupTypes.treeView ? children.map(function (item) {
114
+ return item.id;
115
+ }) : [value];
91
116
 
92
117
  if (activeGroup) {
93
- if (type !== groupType.radio && (activeGroup[itemKey] instanceof Object ? activeGroup[itemKey].isSelected : Boolean(activeGroup[itemKey]))) {
94
- return _objectSpread(_objectSpread({}, selectedTags), {}, _defineProperty({}, groupKey, _objectSpread(_objectSpread({}, activeGroup || {}), {}, _defineProperty({}, itemKey, false))));
95
- }
118
+ var result = selectedTags;
119
+ itemKeys.map(function (itemKey) {
120
+ var activeGroup = result[groupKey];
96
121
 
97
- return _objectSpread(_objectSpread({}, selectedTags), {}, _defineProperty({}, groupKey, _objectSpread(_objectSpread({}, type !== groupType.radio ? activeGroup || {} : {}), {}, _defineProperty({}, itemKey, true))));
122
+ if (type !== groupTypes.radio && (activeGroup[itemKey] instanceof Object ? activeGroup[itemKey].isSelected : Boolean(activeGroup[itemKey]))) {
123
+ result = _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, groupKey, _objectSpread(_objectSpread({}, activeGroup || {}), {}, _defineProperty({}, itemKey, type === groupTypes.treeView && checked))));
124
+ } else {
125
+ result = _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, groupKey, _objectSpread(_objectSpread({}, type !== groupTypes.radio ? activeGroup || {} : {}), {}, _defineProperty({}, itemKey, true))));
126
+ }
127
+ });
128
+ return result;
98
129
  }
99
130
 
100
- return _objectSpread(_objectSpread({}, selectedTags), {}, _defineProperty({}, groupKey, _defineProperty({}, itemKey, true)));
131
+ return itemKeys.reduce(function (acc, curr) {
132
+ return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, groupKey, _objectSpread(_objectSpread({}, acc === null || acc === void 0 ? void 0 : acc[groupKey]), {}, _defineProperty({}, curr, true))));
133
+ }, selectedTags);
134
+ };
135
+ };
136
+
137
+ var areAllChildrenChecked = function areAllChildrenChecked(dataItem, groupKey, stateSelected, selected) {
138
+ return dataItem.children ? dataItem.children.every(function (child) {
139
+ return areAllChildrenChecked(child, groupKey, stateSelected, selected);
140
+ }) : isChecked(groupKey, dataItem.id, undefined, undefined, stateSelected, selected);
141
+ };
142
+
143
+ var areSomeChildrenChecked = function areSomeChildrenChecked(dataItem, groupKey, stateSelected, selected) {
144
+ return dataItem.children ? dataItem.children.some(function (child) {
145
+ return areSomeChildrenChecked(child, groupKey, stateSelected, selected);
146
+ }) : isChecked(groupKey, dataItem.id, undefined, undefined, stateSelected, selected);
147
+ };
148
+
149
+ export var mapTree = function mapTree(item, groupKey, stateSelected, selected) {
150
+ var hasCheck = areAllChildrenChecked(item, groupKey, stateSelected, selected);
151
+ item.checkProps = {
152
+ checked: false
101
153
  };
154
+
155
+ if (hasCheck) {
156
+ item.checkProps.checked = true;
157
+ } else {
158
+ var hasPartialCheck = areSomeChildrenChecked(item, groupKey, stateSelected, selected);
159
+
160
+ if (hasPartialCheck) {
161
+ item.checkProps = {
162
+ checked: null
163
+ };
164
+ }
165
+ }
166
+
167
+ if (item.children) {
168
+ return _objectSpread(_objectSpread({}, item), {}, {
169
+ children: item.children.map(function (child) {
170
+ return mapTree(child, groupKey, stateSelected, selected);
171
+ })
172
+ });
173
+ }
174
+
175
+ return item;
176
+ };
177
+ export var onTreeCheck = function onTreeCheck(e, treeViewItem, tree) {
178
+ var _e$target;
179
+
180
+ return tree[0].onClick(e, treeViewItem, e === null || e === void 0 ? void 0 : (_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.checked);
102
181
  };
@@ -1,4 +1,5 @@
1
1
  var groupType = {
2
+ treeView: 'treeView',
2
3
  checkbox: 'checkbox',
3
4
  radio: 'radio',
4
5
  button: 'button',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redhat-cloud-services/frontend-components",
3
- "version": "3.4.13",
3
+ "version": "3.4.14",
4
4
  "description": "Common components for RedHat Cloud Services project.",
5
5
  "main": "index.js",
6
6
  "module": "esm/index.js",