@redhat-cloud-services/frontend-components 3.4.11 → 3.5.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.
@@ -148,7 +148,8 @@ var ConditionalFilter = /*#__PURE__*/function (_Component) {
148
148
  placeholder = _this$props.placeholder,
149
149
  hideLabel = _this$props.hideLabel,
150
150
  isDisabled = _this$props.isDisabled,
151
- props = (0, _objectWithoutProperties2["default"])(_this$props, ["items", "value", "onChange", "placeholder", "hideLabel", "isDisabled"]);
151
+ useMobileLayout = _this$props.useMobileLayout,
152
+ props = (0, _objectWithoutProperties2["default"])(_this$props, ["items", "value", "onChange", "placeholder", "hideLabel", "isDisabled", "useMobileLayout"]);
152
153
  var _this$state = this.state,
153
154
  isOpen = _this$state.isOpen,
154
155
  stateValue = _this$state.stateValue,
@@ -164,9 +165,9 @@ var ConditionalFilter = /*#__PURE__*/function (_Component) {
164
165
  return string[0].toUpperCase() + string.substring(1);
165
166
  };
166
167
 
167
- var shouldRenderNewLayout = this.props.useMobileLayout && isMobile;
168
+ var shouldRenderNewLayout = useMobileLayout && isMobile;
168
169
  var Wrapper = this.getWrapper();
169
- return /*#__PURE__*/_react["default"].createElement(Wrapper, null, this.props.useMobileLayout && isMobile && /*#__PURE__*/_react["default"].createElement(_ToolbarGroup.ToolbarGroup, {
170
+ return /*#__PURE__*/_react["default"].createElement(Wrapper, null, useMobileLayout && isMobile && /*#__PURE__*/_react["default"].createElement(_ToolbarGroup.ToolbarGroup, {
170
171
  className: "ins-c-conditional-filter mobile"
171
172
  }, items.map(function (activeItem, key) {
172
173
  var ActiveComponent = activeItem && (_conditionalFilterConstants.typeMapper[activeItem.type] || _conditionalFilterConstants.typeMapper.text);
@@ -178,7 +179,7 @@ var ConditionalFilter = /*#__PURE__*/function (_Component) {
178
179
  }, activeItem.filterValues)));
179
180
  })), !shouldRenderNewLayout && /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, !items || items && items.length <= 0 ? /*#__PURE__*/_react["default"].createElement("div", {
180
181
  className: (0, _classnames["default"])('ins-c-conditional-filter', {
181
- desktop: this.props.useMobileLayout
182
+ desktop: useMobileLayout
182
183
  })
183
184
  }, /*#__PURE__*/_react["default"].createElement(_TextFilter["default"], (0, _extends2["default"])({}, props, {
184
185
  value: currentValue,
@@ -189,7 +190,7 @@ var ConditionalFilter = /*#__PURE__*/function (_Component) {
189
190
  "widget-type": "InsightsInput"
190
191
  }))) : /*#__PURE__*/_react["default"].createElement(_Split.Split, {
191
192
  className: (0, _classnames["default"])('ins-c-conditional-filter', {
192
- desktop: this.props.useMobileLayout
193
+ desktop: useMobileLayout
193
194
  })
194
195
  }, items.length > 1 && /*#__PURE__*/_react["default"].createElement(_SplitItem.SplitItem, null, /*#__PURE__*/_react["default"].createElement(_Dropdown.Dropdown, {
195
196
  className: "ins-c-conditional-filter__group",
@@ -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; }
@@ -87,7 +91,6 @@ var Group = function Group(_ref) {
87
91
  (0, _react.useEffect)(function () {
88
92
  setStateSelected(selected);
89
93
  }, [selected]);
90
- var calculateSelection = (0, _react.useCallback)(_groupFilterConstants.calculateSelected, [stateSelected]);
91
94
  (0, _react.useEffect)(function () {
92
95
  setSearchString(filterBy);
93
96
  }, [filterBy]);
@@ -127,50 +130,65 @@ var Group = function Group(_ref) {
127
130
  setIsOpen(!isOpen);
128
131
  };
129
132
 
130
- var groupMenuItems = (0, _groupFilterConstants.getGroupMenuItems)(groups, onChange, calculateSelection(selected));
131
- var menuItems = (0, _groupFilterConstants.getMenuItems)(items, onChange, calculateSelection(selected)); // eslint-disable-next-line react/prop-types
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));
136
+ var groupMenuItems = (0, _groupFilterConstants.getGroupMenuItems)(groups, onChange, (0, _groupFilterConstants.calculateSelected)(selected));
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
+ };
132
184
 
133
185
  var renderItems = function renderItems(items, type) {
134
186
  var groupKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
135
187
  return items.map(function (item, key) {
136
- return /*#__PURE__*/_react["default"].createElement(_MenuItem.MenuItem, {
137
- itemId: key,
188
+ return (type || item.type) === _groupType["default"].treeView ? /*#__PURE__*/_react["default"].createElement("div", {
138
189
  key: "".concat(item.value, "-").concat(key, "-item"),
139
- className: item === null || item === void 0 ? void 0 : item.className,
140
- onClick: item.onClick && (type || item.type) === _groupType["default"].checkbox ? function (e) {
141
- item.onClick();
142
- e.preventDefault();
143
- } : undefined
144
- }, (type || item.type) === _groupType["default"].checkbox ? /*#__PURE__*/_react["default"].createElement(_Checkbox.Checkbox, (0, _extends2["default"])({}, item, {
145
- label: item === null || item === void 0 ? void 0 : item.label,
146
- 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,
147
- onChange: function onChange(value, event) {
148
- var _item$onChange;
149
-
150
- item === null || item === void 0 ? void 0 : (_item$onChange = item.onChange) === null || _item$onChange === void 0 ? void 0 : _item$onChange.call(item, value, event);
151
- },
152
- onClick: item.onClick ? function (e) {
153
- item.onClick();
154
- e.stopPropagation();
155
- } : undefined,
156
- name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
157
- id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
158
- })) : (type || item.type) === _groupType["default"].radio ? /*#__PURE__*/_react["default"].createElement(_Radio.Radio, (0, _extends2["default"])({}, item, {
159
- 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,
160
- onChange: function onChange(value, event) {
161
- var _item$onChange2;
162
-
163
- item === null || item === void 0 ? void 0 : (_item$onChange2 = item.onChange) === null || _item$onChange2 === void 0 ? void 0 : _item$onChange2.call(item, value, event);
164
- },
165
- value: (item === null || item === void 0 ? void 0 : item.value) || key,
166
- name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
167
- label: (item === null || item === void 0 ? void 0 : item.label) || '',
168
- id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
169
- })) : (type || item.type) === _groupType["default"].button ? /*#__PURE__*/_react["default"].createElement(_Button.Button, (0, _extends2["default"])({}, item, {
170
- className: "pf-c-select__option-button ".concat((item === null || item === void 0 ? void 0 : item.className) || ''),
171
- variant: item === null || item === void 0 ? void 0 : item.variant,
172
- onClick: item.onClick
173
- }), 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);
174
192
  });
175
193
  };
176
194
 
@@ -199,7 +217,7 @@ var Group = function Group(_ref) {
199
217
  className: (0, _classnames["default"])('ins-c-menu__scrollable', className, {
200
218
  'pf-m-expanded': isOpen
201
219
  })
202
- }, /*#__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) {
203
221
  return /*#__PURE__*/_react["default"].createElement(_MenuGroup.MenuGroup, {
204
222
  label: group.label,
205
223
  key: "".concat(group.label, "-").concat(groupKey, "-group")
@@ -51,9 +51,6 @@
51
51
  .ins-c-conditional-filter .pf-c-select__toggle-badge {
52
52
  display: none;
53
53
  }
54
- .ins-c-conditional-filter .pf-c-menu-toggle {
55
- padding: 0;
56
- }
57
54
  .ins-c-conditional-filter .pf-c-menu-toggle .pf-c-menu-toggle__text {
58
55
  flex: 1;
59
56
  }
@@ -64,6 +61,7 @@
64
61
  .pf-c-menu.ins-c-menu__scrollable {
65
62
  max-height: 416px;
66
63
  overflow-y: auto;
64
+ min-width: initial;
67
65
  }
68
66
  .pf-c-menu .ins-c-menu__show--more {
69
67
  background: none;
@@ -61,7 +61,6 @@
61
61
  }
62
62
 
63
63
  .pf-c-menu-toggle {
64
- padding: 0;
65
64
  .pf-c-menu-toggle__text {
66
65
  flex: 1;
67
66
  input { border: none; }
@@ -73,6 +72,7 @@
73
72
  &.ins-c-menu__scrollable {
74
73
  max-height: 416px;
75
74
  overflow-y: auto;
75
+ min-width: initial;
76
76
  }
77
77
  .ins-c-menu__show--more {
78
78
  background: none;
@@ -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) {
109
- var activeGroup = 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))));
125
+ return function (type, groupKey, value, checked) {
126
+ var activeGroup = selectedTags === null || selectedTags === void 0 ? void 0 : selectedTags[groupKey];
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',
@@ -17,6 +17,8 @@ var _react = _interopRequireDefault(require("react"));
17
17
 
18
18
  var _propTypes = _interopRequireDefault(require("prop-types"));
19
19
 
20
+ var _Skeleton = require("@patternfly/react-core/dist/js/components/Skeleton/Skeleton.js");
21
+
20
22
  var _classnames = _interopRequireDefault(require("classnames"));
21
23
 
22
24
  require("./skeleton.css");
@@ -34,10 +36,9 @@ var Skeleton = function Skeleton(_ref) {
34
36
  isDark = _ref.isDark,
35
37
  className = _ref.className,
36
38
  props = (0, _objectWithoutProperties2["default"])(_ref, ["size", "isDark", "className"]);
37
- var skeletonClasses = (0, _classnames["default"])('ins-c-skeleton', "ins-c-skeleton__".concat(size), (0, _defineProperty2["default"])({}, "ins-m-dark", isDark), className);
38
- return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
39
- className: skeletonClasses
40
- }, props), "\xA0");
39
+ return /*#__PURE__*/_react["default"].createElement(_Skeleton.Skeleton, (0, _extends2["default"])({
40
+ className: (0, _classnames["default"])('ins-c-skeleton', "ins-c-skeleton__".concat(size), (0, _defineProperty2["default"])({}, "ins-m-dark", isDark), className)
41
+ }, props));
41
42
  };
42
43
 
43
44
  var _default = Skeleton;
@@ -1,45 +1,24 @@
1
- :root {
2
- --ins-color--orange: #ec7a08;
3
- }
4
-
5
- .ins-c-skeleton {
6
- animation-duration: 1s;
7
- animation-iteration-count: infinite;
8
- animation-name: skeletonGradient;
9
- animation-timing-function: linear;
10
- background: var(--pf-global--disabled-color--200);
11
- background: linear-gradient(to right, #f5f5f5 10%, #e8e8e8 18%, #f5f5f5 33%);
12
- background-size: 1000px 50px;
13
- background-size: 62.5rem 3.125rem;
14
- border-radius: 5px;
15
- border-radius: 0.3125rem;
16
- }
17
1
  .ins-c-skeleton__xs {
18
- width: 16%;
2
+ width: 16% !important;
19
3
  }
20
4
  .ins-c-skeleton__sm {
21
- width: 33%;
5
+ width: 33% !important;
22
6
  }
23
7
  .ins-c-skeleton__md {
24
- width: 66%;
8
+ width: 66% !important;
25
9
  }
26
10
  .ins-c-skeleton__lg {
27
- width: 100%;
11
+ width: 100% !important;
28
12
  }
29
13
  .ins-c-skeleton.ins-m-dark {
30
- background: #3c3c3c;
31
- background: linear-gradient(to right, #3c3c3c 10%, #484848 18%, #3c3c3c 33%);
32
- background-size: 1000px 50px;
33
- background-size: 62.5rem 3.125rem;
34
- }
35
-
36
- @keyframes skeletonGradient {
37
- 0% {
38
- background-position: -500px 0px;
39
- background-position: -31.25rem 0rem;
40
- }
41
- 100% {
42
- background-position: 500px 0px;
43
- background-position: 31.25rem 0rem;
44
- }
14
+ --pf-c-skeleton--BackgroundColor: var(--pf-global--palette--black-600);
15
+ --pf-c-skeleton--after--LinearGradientColorStop1: var(
16
+ --pf-global--palette--black-600
17
+ );
18
+ --pf-c-skeleton--after--LinearGradientColorStop2: var(
19
+ --pf-global--palette--black-500
20
+ );
21
+ --pf-c-skeleton--after--LinearGradientColorStop3: var(
22
+ --pf-global--palette--black-600
23
+ );
45
24
  }
@@ -1,34 +1,18 @@
1
- @import '~@redhat-cloud-services/frontend-components-utilities/styles/_all.scss';
2
-
3
- $skeleton-base-color: #f5f5f5;
4
- $skeleton-dark-color: #e8e8e8;
5
-
6
- $ins-color--dark: #3c3c3c;
7
- $invert-skeleton-base-color: #3c3c3c;
8
- $invert-skeleton-dark-color: #484848;
9
-
10
-
11
1
  .ins-c-skeleton {
12
- &__xs { width: 16%; }
13
- &__sm { width: 33%; }
14
- &__md { width: 66%; }
15
- &__lg { width: 100%; }
16
- animation-duration: 1s;
17
- animation-iteration-count: infinite;
18
- animation-name: skeletonGradient;
19
- animation-timing-function: linear;
20
- background: $ins-color--gray;
21
- background: linear-gradient(to right, $skeleton-base-color 10%, $skeleton-dark-color 18%, $skeleton-base-color 33%);
22
- @include rem('background-size', 1000px 50px);
23
- @include rem('border-radius', 5px);
2
+ &__xs { width: 16% !important; }
3
+ &__sm { width: 33% !important; }
4
+ &__md { width: 66% !important; }
5
+ &__lg { width: 100% !important; }
24
6
  &.ins-m-dark {
25
- background: $ins-color--dark;
26
- background: linear-gradient(to right, $invert-skeleton-base-color 10%, $invert-skeleton-dark-color 18%, $invert-skeleton-base-color 33%);
27
- @include rem('background-size', 1000px 50px);
7
+ --pf-c-skeleton--BackgroundColor: var(--pf-global--palette--black-600);
8
+ --pf-c-skeleton--after--LinearGradientColorStop1: var(
9
+ --pf-global--palette--black-600
10
+ );
11
+ --pf-c-skeleton--after--LinearGradientColorStop2: var(
12
+ --pf-global--palette--black-500
13
+ );
14
+ --pf-c-skeleton--after--LinearGradientColorStop3: var(
15
+ --pf-global--palette--black-600
16
+ );
28
17
  }
29
18
  }
30
-
31
- @keyframes skeletonGradient{
32
- 0% { @include rem('background-position', -500px 0); }
33
- 100%{ @include rem('background-position', 500px 0); }
34
- }
@@ -0,0 +1,3 @@
1
+ .ins-c-skeleton-table__dark {
2
+ background-color: #1b1d21 !important;
3
+ }
@@ -29,8 +29,12 @@ var _reactTable = require("@patternfly/react-table");
29
29
 
30
30
  var _Skeleton = require("../Skeleton");
31
31
 
32
+ var _classnames = _interopRequireDefault(require("classnames"));
33
+
32
34
  var _propTypes = _interopRequireDefault(require("prop-types"));
33
35
 
36
+ require("./SkeletonTable.css");
37
+
34
38
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
35
39
 
36
40
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -51,29 +55,33 @@ var SkeletonTable = /*#__PURE__*/function (_React$Component) {
51
55
 
52
56
  _this = _super.call.apply(_super, [this].concat(args));
53
57
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "createColumns", function () {
54
- var colSize = _this.props.colSize;
58
+ var _this$props = _this.props,
59
+ colSize = _this$props.colSize,
60
+ isDark = _this$props.isDark;
55
61
  return (0, _toConsumableArray2["default"])(Array(colSize)).map(function () {
56
62
  return {
57
63
  title: /*#__PURE__*/_react["default"].createElement(_Skeleton.Skeleton, {
64
+ isDark: isDark,
58
65
  size: _Skeleton.SkeletonSize.sm
59
66
  })
60
67
  };
61
68
  });
62
69
  });
63
70
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getColumns", function () {
64
- var _this$props = _this.props,
65
- paddingColumnSize = _this$props.paddingColumnSize,
66
- columns = _this$props.columns;
71
+ var _this$props2 = _this.props,
72
+ paddingColumnSize = _this$props2.paddingColumnSize,
73
+ columns = _this$props2.columns;
67
74
  return _this.newArray(paddingColumnSize).map(function () {
68
75
  return '';
69
76
  }).concat(columns || _this.createColumns());
70
77
  });
71
78
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "createRows", function () {
72
- var _this$props2 = _this.props,
73
- colSize = _this$props2.colSize,
74
- rowSize = _this$props2.rowSize,
75
- columns = _this$props2.columns,
76
- paddingColumnSize = _this$props2.paddingColumnSize;
79
+ var _this$props3 = _this.props,
80
+ colSize = _this$props3.colSize,
81
+ rowSize = _this$props3.rowSize,
82
+ columns = _this$props3.columns,
83
+ paddingColumnSize = _this$props3.paddingColumnSize,
84
+ isDark = _this$props3.isDark;
77
85
  var numberOfCols = columns ? columns.length : colSize;
78
86
  return _this.newArray(rowSize).map(function () {
79
87
  return {
@@ -83,6 +91,7 @@ var SkeletonTable = /*#__PURE__*/function (_React$Component) {
83
91
  }).concat(_this.newArray(numberOfCols).map(function () {
84
92
  return {
85
93
  title: /*#__PURE__*/_react["default"].createElement(_Skeleton.Skeleton, {
94
+ isDark: isDark,
86
95
  size: _Skeleton.SkeletonSize.md
87
96
  })
88
97
  };
@@ -103,12 +112,16 @@ var SkeletonTable = /*#__PURE__*/function (_React$Component) {
103
112
  (0, _createClass2["default"])(SkeletonTable, [{
104
113
  key: "render",
105
114
  value: function render() {
106
- var _this$props3 = this.props,
107
- canSelectAll = _this$props3.canSelectAll,
108
- isSelectable = _this$props3.isSelectable,
109
- sortBy = _this$props3.sortBy,
110
- variant = _this$props3.variant;
115
+ var _this$props4 = this.props,
116
+ canSelectAll = _this$props4.canSelectAll,
117
+ isSelectable = _this$props4.isSelectable,
118
+ sortBy = _this$props4.sortBy,
119
+ variant = _this$props4.variant,
120
+ isDark = _this$props4.isDark;
111
121
  return /*#__PURE__*/_react["default"].createElement(_reactTable.Table, {
122
+ className: (0, _classnames["default"])({
123
+ 'ins-c-skeleton-table__dark': isDark
124
+ }),
112
125
  cells: this.getColumns(),
113
126
  rows: this.createRows(),
114
127
  sortBy: sortBy,
@@ -135,7 +148,8 @@ SkeletonTable.propTypes = {
135
148
  isSelectable: _propTypes["default"].bool,
136
149
  canSelectAll: _propTypes["default"].bool,
137
150
  hasRadio: _propTypes["default"].bool,
138
- variant: _propTypes["default"].string
151
+ variant: _propTypes["default"].string,
152
+ isDark: _propTypes["default"].bool
139
153
  };
140
154
  SkeletonTable.defaultProps = {
141
155
  rowSize: 0,
@@ -143,7 +157,8 @@ SkeletonTable.defaultProps = {
143
157
  canSelectAll: false,
144
158
  isSelectable: false,
145
159
  hasRadio: false,
146
- variant: null
160
+ variant: null,
161
+ isDark: false
147
162
  };
148
163
  var _default = SkeletonTable;
149
164
  exports["default"] = _default;
@@ -0,0 +1,3 @@
1
+ .ins-c-skeleton-table__dark {
2
+ background-color: #1b1d21 !important;
3
+ }
@@ -116,7 +116,8 @@ var ConditionalFilter = /*#__PURE__*/function (_Component) {
116
116
  placeholder = _this$props.placeholder,
117
117
  hideLabel = _this$props.hideLabel,
118
118
  isDisabled = _this$props.isDisabled,
119
- props = _objectWithoutProperties(_this$props, ["items", "value", "onChange", "placeholder", "hideLabel", "isDisabled"]);
119
+ useMobileLayout = _this$props.useMobileLayout,
120
+ props = _objectWithoutProperties(_this$props, ["items", "value", "onChange", "placeholder", "hideLabel", "isDisabled", "useMobileLayout"]);
120
121
 
121
122
  var _this$state = this.state,
122
123
  isOpen = _this$state.isOpen,
@@ -133,9 +134,9 @@ var ConditionalFilter = /*#__PURE__*/function (_Component) {
133
134
  return string[0].toUpperCase() + string.substring(1);
134
135
  };
135
136
 
136
- var shouldRenderNewLayout = this.props.useMobileLayout && isMobile;
137
+ var shouldRenderNewLayout = useMobileLayout && isMobile;
137
138
  var Wrapper = this.getWrapper();
138
- return /*#__PURE__*/React.createElement(Wrapper, null, this.props.useMobileLayout && isMobile && /*#__PURE__*/React.createElement(ToolbarGroup, {
139
+ return /*#__PURE__*/React.createElement(Wrapper, null, useMobileLayout && isMobile && /*#__PURE__*/React.createElement(ToolbarGroup, {
139
140
  className: "ins-c-conditional-filter mobile"
140
141
  }, items.map(function (activeItem, key) {
141
142
  var ActiveComponent = activeItem && (typeMapper[activeItem.type] || typeMapper.text);
@@ -147,7 +148,7 @@ var ConditionalFilter = /*#__PURE__*/function (_Component) {
147
148
  }, activeItem.filterValues)));
148
149
  })), !shouldRenderNewLayout && /*#__PURE__*/React.createElement(Fragment, null, !items || items && items.length <= 0 ? /*#__PURE__*/React.createElement("div", {
149
150
  className: classNames('ins-c-conditional-filter', {
150
- desktop: this.props.useMobileLayout
151
+ desktop: useMobileLayout
151
152
  })
152
153
  }, /*#__PURE__*/React.createElement(Text, _extends({}, props, {
153
154
  value: currentValue,
@@ -158,7 +159,7 @@ var ConditionalFilter = /*#__PURE__*/function (_Component) {
158
159
  "widget-type": "InsightsInput"
159
160
  }))) : /*#__PURE__*/React.createElement(Split, {
160
161
  className: classNames('ins-c-conditional-filter', {
161
- desktop: this.props.useMobileLayout
162
+ desktop: useMobileLayout
162
163
  })
163
164
  }, items.length > 1 && /*#__PURE__*/React.createElement(SplitItem, null, /*#__PURE__*/React.createElement(Dropdown, {
164
165
  className: "ins-c-conditional-filter__group",
@@ -1,7 +1,7 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import _extends from "@babel/runtime/helpers/extends";
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
- import React, { useCallback, useState, useRef, useEffect } from 'react';
4
+ import React, { useState, useRef, useEffect } from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import classNames from 'classnames';
7
7
  import { TextInput } from "@patternfly/react-core/dist/esm/components/TextInput/TextInput.js";
@@ -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,
@@ -54,7 +56,6 @@ var Group = function Group(_ref) {
54
56
  useEffect(function () {
55
57
  setStateSelected(selected);
56
58
  }, [selected]);
57
- var calculateSelection = useCallback(calculateSelected, [stateSelected]);
58
59
  useEffect(function () {
59
60
  setSearchString(filterBy);
60
61
  }, [filterBy]);
@@ -94,50 +95,65 @@ var Group = function Group(_ref) {
94
95
  setIsOpen(!isOpen);
95
96
  };
96
97
 
97
- var groupMenuItems = getGroupMenuItems(groups, onChange, calculateSelection(selected));
98
- var menuItems = getMenuItems(items, onChange, calculateSelection(selected)); // eslint-disable-next-line react/prop-types
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));
101
+ var groupMenuItems = getGroupMenuItems(groups, onChange, calculateSelected(selected));
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
+ };
99
149
 
100
150
  var renderItems = function renderItems(items, type) {
101
151
  var groupKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
102
152
  return items.map(function (item, key) {
103
- return /*#__PURE__*/React.createElement(MenuItem, {
104
- itemId: key,
153
+ return (type || item.type) === groupType.treeView ? /*#__PURE__*/React.createElement("div", {
105
154
  key: "".concat(item.value, "-").concat(key, "-item"),
106
- className: item === null || item === void 0 ? void 0 : item.className,
107
- onClick: item.onClick && (type || item.type) === groupType.checkbox ? function (e) {
108
- item.onClick();
109
- e.preventDefault();
110
- } : undefined
111
- }, (type || item.type) === groupType.checkbox ? /*#__PURE__*/React.createElement(Checkbox, _extends({}, item, {
112
- label: item === null || item === void 0 ? void 0 : item.label,
113
- 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,
114
- onChange: function onChange(value, event) {
115
- var _item$onChange;
116
-
117
- item === null || item === void 0 ? void 0 : (_item$onChange = item.onChange) === null || _item$onChange === void 0 ? void 0 : _item$onChange.call(item, value, event);
118
- },
119
- onClick: item.onClick ? function (e) {
120
- item.onClick();
121
- e.stopPropagation();
122
- } : undefined,
123
- name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
124
- id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
125
- })) : (type || item.type) === groupType.radio ? /*#__PURE__*/React.createElement(Radio, _extends({}, item, {
126
- 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,
127
- onChange: function onChange(value, event) {
128
- var _item$onChange2;
129
-
130
- item === null || item === void 0 ? void 0 : (_item$onChange2 = item.onChange) === null || _item$onChange2 === void 0 ? void 0 : _item$onChange2.call(item, value, event);
131
- },
132
- value: (item === null || item === void 0 ? void 0 : item.value) || key,
133
- name: (item === null || item === void 0 ? void 0 : item.name) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key),
134
- label: (item === null || item === void 0 ? void 0 : item.label) || '',
135
- id: (item === null || item === void 0 ? void 0 : item.id) || (item === null || item === void 0 ? void 0 : item.value) || "".concat(groupKey, "-").concat(key)
136
- })) : (type || item.type) === groupType.button ? /*#__PURE__*/React.createElement(Button, _extends({}, item, {
137
- className: "pf-c-select__option-button ".concat((item === null || item === void 0 ? void 0 : item.className) || ''),
138
- variant: item === null || item === void 0 ? void 0 : item.variant,
139
- onClick: item.onClick
140
- }), 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);
141
157
  });
142
158
  };
143
159
 
@@ -166,7 +182,7 @@ var Group = function Group(_ref) {
166
182
  className: classNames('ins-c-menu__scrollable', className, {
167
183
  'pf-m-expanded': isOpen
168
184
  })
169
- }, /*#__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) {
170
186
  return /*#__PURE__*/React.createElement(MenuGroup, {
171
187
  label: group.label,
172
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) {
90
- var activeGroup = selectedTags[groupKey];
103
+ return function (type, groupKey, value, checked) {
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',
@@ -3,6 +3,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
4
  import React from 'react';
5
5
  import propTypes from 'prop-types';
6
+ import { Skeleton as PFSkeleton } from "@patternfly/react-core/dist/esm/components/Skeleton/Skeleton.js";
6
7
  import classNames from 'classnames';
7
8
  export var SkeletonSize = {
8
9
  xs: 'xs',
@@ -18,10 +19,9 @@ var Skeleton = function Skeleton(_ref) {
18
19
  className = _ref.className,
19
20
  props = _objectWithoutProperties(_ref, ["size", "isDark", "className"]);
20
21
 
21
- var skeletonClasses = classNames('ins-c-skeleton', "ins-c-skeleton__".concat(size), _defineProperty({}, "ins-m-dark", isDark), className);
22
- return /*#__PURE__*/React.createElement("div", _extends({
23
- className: skeletonClasses
24
- }, props), "\xA0");
22
+ return /*#__PURE__*/React.createElement(PFSkeleton, _extends({
23
+ className: classNames('ins-c-skeleton', "ins-c-skeleton__".concat(size), _defineProperty({}, "ins-m-dark", isDark), className)
24
+ }, props));
25
25
  };
26
26
 
27
27
  export default Skeleton;
@@ -14,7 +14,9 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
14
14
  import React from 'react';
15
15
  import { RowSelectVariant, Table, TableHeader, TableBody } from '@patternfly/react-table';
16
16
  import { Skeleton, SkeletonSize } from '../Skeleton';
17
+ import classNames from 'classnames';
17
18
  import PropTypes from 'prop-types';
19
+ import "../../SkeletonTable/./SkeletonTable.css";
18
20
 
19
21
  var SkeletonTable = /*#__PURE__*/function (_React$Component) {
20
22
  _inherits(SkeletonTable, _React$Component);
@@ -33,10 +35,13 @@ var SkeletonTable = /*#__PURE__*/function (_React$Component) {
33
35
  _this = _super.call.apply(_super, [this].concat(args));
34
36
 
35
37
  _defineProperty(_assertThisInitialized(_this), "createColumns", function () {
36
- var colSize = _this.props.colSize;
38
+ var _this$props = _this.props,
39
+ colSize = _this$props.colSize,
40
+ isDark = _this$props.isDark;
37
41
  return _toConsumableArray(Array(colSize)).map(function () {
38
42
  return {
39
43
  title: /*#__PURE__*/React.createElement(Skeleton, {
44
+ isDark: isDark,
40
45
  size: SkeletonSize.sm
41
46
  })
42
47
  };
@@ -44,20 +49,21 @@ var SkeletonTable = /*#__PURE__*/function (_React$Component) {
44
49
  });
45
50
 
46
51
  _defineProperty(_assertThisInitialized(_this), "getColumns", function () {
47
- var _this$props = _this.props,
48
- paddingColumnSize = _this$props.paddingColumnSize,
49
- columns = _this$props.columns;
52
+ var _this$props2 = _this.props,
53
+ paddingColumnSize = _this$props2.paddingColumnSize,
54
+ columns = _this$props2.columns;
50
55
  return _this.newArray(paddingColumnSize).map(function () {
51
56
  return '';
52
57
  }).concat(columns || _this.createColumns());
53
58
  });
54
59
 
55
60
  _defineProperty(_assertThisInitialized(_this), "createRows", function () {
56
- var _this$props2 = _this.props,
57
- colSize = _this$props2.colSize,
58
- rowSize = _this$props2.rowSize,
59
- columns = _this$props2.columns,
60
- paddingColumnSize = _this$props2.paddingColumnSize;
61
+ var _this$props3 = _this.props,
62
+ colSize = _this$props3.colSize,
63
+ rowSize = _this$props3.rowSize,
64
+ columns = _this$props3.columns,
65
+ paddingColumnSize = _this$props3.paddingColumnSize,
66
+ isDark = _this$props3.isDark;
61
67
  var numberOfCols = columns ? columns.length : colSize;
62
68
  return _this.newArray(rowSize).map(function () {
63
69
  return {
@@ -67,6 +73,7 @@ var SkeletonTable = /*#__PURE__*/function (_React$Component) {
67
73
  }).concat(_this.newArray(numberOfCols).map(function () {
68
74
  return {
69
75
  title: /*#__PURE__*/React.createElement(Skeleton, {
76
+ isDark: isDark,
70
77
  size: SkeletonSize.md
71
78
  })
72
79
  };
@@ -90,12 +97,16 @@ var SkeletonTable = /*#__PURE__*/function (_React$Component) {
90
97
  _createClass(SkeletonTable, [{
91
98
  key: "render",
92
99
  value: function render() {
93
- var _this$props3 = this.props,
94
- canSelectAll = _this$props3.canSelectAll,
95
- isSelectable = _this$props3.isSelectable,
96
- sortBy = _this$props3.sortBy,
97
- variant = _this$props3.variant;
100
+ var _this$props4 = this.props,
101
+ canSelectAll = _this$props4.canSelectAll,
102
+ isSelectable = _this$props4.isSelectable,
103
+ sortBy = _this$props4.sortBy,
104
+ variant = _this$props4.variant,
105
+ isDark = _this$props4.isDark;
98
106
  return /*#__PURE__*/React.createElement(Table, {
107
+ className: classNames({
108
+ 'ins-c-skeleton-table__dark': isDark
109
+ }),
99
110
  cells: this.getColumns(),
100
111
  rows: this.createRows(),
101
112
  sortBy: sortBy,
@@ -123,7 +134,8 @@ SkeletonTable.propTypes = {
123
134
  isSelectable: PropTypes.bool,
124
135
  canSelectAll: PropTypes.bool,
125
136
  hasRadio: PropTypes.bool,
126
- variant: PropTypes.string
137
+ variant: PropTypes.string,
138
+ isDark: PropTypes.bool
127
139
  };
128
140
  SkeletonTable.defaultProps = {
129
141
  rowSize: 0,
@@ -131,6 +143,7 @@ SkeletonTable.defaultProps = {
131
143
  canSelectAll: false,
132
144
  isSelectable: false,
133
145
  hasRadio: false,
134
- variant: null
146
+ variant: null,
147
+ isDark: false
135
148
  };
136
149
  export default SkeletonTable;
package/index.css CHANGED
@@ -122,9 +122,6 @@ i.ins-battery svg {
122
122
  .ins-c-conditional-filter .pf-c-select__toggle-badge {
123
123
  display: none;
124
124
  }
125
- .ins-c-conditional-filter .pf-c-menu-toggle {
126
- padding: 0;
127
- }
128
125
  .ins-c-conditional-filter .pf-c-menu-toggle .pf-c-menu-toggle__text {
129
126
  flex: 1;
130
127
  }
@@ -135,6 +132,7 @@ i.ins-battery svg {
135
132
  .pf-c-menu.ins-c-menu__scrollable {
136
133
  max-height: 416px;
137
134
  overflow-y: auto;
135
+ min-width: initial;
138
136
  }
139
137
  .pf-c-menu .ins-c-menu__show--more {
140
138
  background: none;
@@ -1421,51 +1419,31 @@ textarea.pf-c-form-control {
1421
1419
  top: 0.5rem;
1422
1420
  }
1423
1421
 
1424
- :root {
1425
- --ins-color--orange: #ec7a08;
1426
- }
1427
-
1428
- .ins-c-skeleton {
1429
- animation-duration: 1s;
1430
- animation-iteration-count: infinite;
1431
- animation-name: skeletonGradient;
1432
- animation-timing-function: linear;
1433
- background: var(--pf-global--disabled-color--200);
1434
- background: linear-gradient(to right, #f5f5f5 10%, #e8e8e8 18%, #f5f5f5 33%);
1435
- background-size: 1000px 50px;
1436
- background-size: 62.5rem 3.125rem;
1437
- border-radius: 5px;
1438
- border-radius: 0.3125rem;
1439
- }
1440
1422
  .ins-c-skeleton__xs {
1441
- width: 16%;
1423
+ width: 16% !important;
1442
1424
  }
1443
1425
  .ins-c-skeleton__sm {
1444
- width: 33%;
1426
+ width: 33% !important;
1445
1427
  }
1446
1428
  .ins-c-skeleton__md {
1447
- width: 66%;
1429
+ width: 66% !important;
1448
1430
  }
1449
1431
  .ins-c-skeleton__lg {
1450
- width: 100%;
1432
+ width: 100% !important;
1451
1433
  }
1452
1434
  .ins-c-skeleton.ins-m-dark {
1453
- background: #3c3c3c;
1454
- background: linear-gradient(to right, #3c3c3c 10%, #484848 18%, #3c3c3c 33%);
1455
- background-size: 1000px 50px;
1456
- background-size: 62.5rem 3.125rem;
1435
+ --pf-c-skeleton--BackgroundColor: var(--pf-global--palette--black-600);
1436
+ --pf-c-skeleton--after--LinearGradientColorStop1: var(
1437
+ --pf-global--palette--black-600
1438
+ );
1439
+ --pf-c-skeleton--after--LinearGradientColorStop2: var(
1440
+ --pf-global--palette--black-500
1441
+ );
1442
+ --pf-c-skeleton--after--LinearGradientColorStop3: var(
1443
+ --pf-global--palette--black-600
1444
+ );
1457
1445
  }
1458
1446
 
1459
- @keyframes skeletonGradient {
1460
- 0% {
1461
- background-position: -500px 0px;
1462
- background-position: -31.25rem 0rem;
1463
- }
1464
- 100% {
1465
- background-position: 500px 0px;
1466
- background-position: 31.25rem 0rem;
1467
- }
1468
- }
1469
1447
  :root {
1470
1448
  --ins-color--orange: #ec7a08;
1471
1449
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redhat-cloud-services/frontend-components",
3
- "version": "3.4.11",
3
+ "version": "3.5.0",
4
4
  "description": "Common components for RedHat Cloud Services project.",
5
5
  "main": "index.js",
6
6
  "module": "esm/index.js",