@carbon/ibm-products 1.18.2 → 1.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. package/css/components/Datagrid/styles/datagrid.css +20 -1
  2. package/css/components/Datagrid/styles/datagrid.css.map +1 -1
  3. package/css/components/Datagrid/styles/draggableElement.css +57 -0
  4. package/css/components/Datagrid/styles/draggableElement.css.map +1 -0
  5. package/css/components/Datagrid/styles/index.css +100 -1
  6. package/css/components/Datagrid/styles/index.css.map +1 -1
  7. package/css/index-full-carbon.css +114 -2
  8. package/css/index-full-carbon.css.map +1 -1
  9. package/css/index-full-carbon.min.css +3 -3
  10. package/css/index-full-carbon.min.css.map +1 -1
  11. package/css/index-without-carbon-released-only.css +241 -0
  12. package/css/index-without-carbon-released-only.css.map +1 -1
  13. package/css/index-without-carbon-released-only.min.css +7 -1
  14. package/css/index-without-carbon-released-only.min.css.map +1 -1
  15. package/css/index-without-carbon.css +114 -2
  16. package/css/index-without-carbon.css.map +1 -1
  17. package/css/index-without-carbon.min.css +3 -3
  18. package/css/index-without-carbon.min.css.map +1 -1
  19. package/css/index.css +114 -2
  20. package/css/index.css.map +1 -1
  21. package/css/index.min.css +3 -3
  22. package/css/index.min.css.map +1 -1
  23. package/es/components/ActionSet/ActionSet.js +1 -0
  24. package/es/components/AddSelect/AddSelect.js +34 -3
  25. package/es/components/AddSelect/AddSelectFilter.js +9 -3
  26. package/es/components/AddSelect/AddSelectList.js +33 -9
  27. package/es/components/AddSelect/AddSelectSidebar.js +19 -11
  28. package/es/components/ComboButton/ComboButton.js +3 -5
  29. package/es/components/CreateSidePanel/CreateSidePanel.js +4 -10
  30. package/es/components/DataSpreadsheet/DataSpreadsheet.js +3 -1
  31. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
  32. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +25 -9
  33. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +1 -3
  34. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +63 -34
  35. package/es/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +17 -3
  36. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +113 -19
  37. package/es/components/Datagrid/Datagrid/DraggableElement.js +9 -19
  38. package/es/components/EditSidePanel/EditSidePanel.js +3 -9
  39. package/es/components/SidePanel/SidePanel.js +2 -2
  40. package/es/global/js/hooks/useWindowResize.js +2 -1
  41. package/es/global/js/hooks/useWindowScroll.js +2 -1
  42. package/es/global/js/package-settings.js +1 -1
  43. package/es/global/js/utils/scrollableAncestor.js +2 -1
  44. package/lib/components/ActionSet/ActionSet.js +1 -0
  45. package/lib/components/AddSelect/AddSelect.js +34 -3
  46. package/lib/components/AddSelect/AddSelectFilter.js +10 -3
  47. package/lib/components/AddSelect/AddSelectList.js +32 -9
  48. package/lib/components/AddSelect/AddSelectSidebar.js +19 -11
  49. package/lib/components/ComboButton/ComboButton.js +5 -8
  50. package/lib/components/CreateSidePanel/CreateSidePanel.js +3 -10
  51. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +3 -1
  52. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
  53. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +25 -9
  54. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +1 -4
  55. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +64 -34
  56. package/lib/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +17 -3
  57. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +112 -19
  58. package/lib/components/Datagrid/Datagrid/DraggableElement.js +11 -19
  59. package/lib/components/EditSidePanel/EditSidePanel.js +3 -10
  60. package/lib/components/SidePanel/SidePanel.js +2 -2
  61. package/lib/global/js/hooks/useWindowResize.js +3 -1
  62. package/lib/global/js/hooks/useWindowScroll.js +5 -1
  63. package/lib/global/js/package-settings.js +1 -1
  64. package/lib/global/js/utils/scrollableAncestor.js +6 -1
  65. package/package.json +4 -4
  66. package/scss/components/AddSelect/_add-select.scss +6 -0
  67. package/scss/components/ComboButton/_combo-button.scss +2 -1
  68. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +1 -0
  69. package/scss/components/Datagrid/_datagrid.scss +1 -10
  70. package/scss/components/Datagrid/styles/datagrid.scss +17 -1
  71. package/scss/components/Datagrid/styles/draggableElement.scss +58 -0
  72. package/scss/components/Datagrid/styles/index.scss +2 -1
  73. package/scss/components/_index-released-only.scss +1 -0
@@ -10,19 +10,37 @@ import { deepCloneObject } from '../../../global/js/utils/deepCloneObject';
10
10
  import uuidv4 from '../../../global/js/utils/uuidv4';
11
11
  import { removeCellSelections } from './removeCellSelections';
12
12
  import { checkActiveHeaderCell } from './checkActiveHeaderCell';
13
- export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref) {
14
- var type = _ref.type,
15
- activeCellCoordinates = _ref.activeCellCoordinates,
16
- rows = _ref.rows,
17
- columns = _ref.columns,
18
- setActiveCellCoordinates = _ref.setActiveCellCoordinates,
19
- setCurrentMatcher = _ref.setCurrentMatcher,
20
- setSelectionAreas = _ref.setSelectionAreas,
21
- spreadsheetRef = _ref.spreadsheetRef,
22
- index = _ref.index,
23
- isKeyboard = _ref.isKeyboard,
24
- setSelectionAreaData = _ref.setSelectionAreaData,
25
- isHoldingCommandKey = _ref.isHoldingCommandKey;
13
+
14
+ var getSelectedItemIndexList = function getSelectedItemIndexList(_ref) {
15
+ var indexList = _ref.indexList,
16
+ newIndex = _ref.newIndex,
17
+ activeCellIndex = _ref.activeCellIndex;
18
+ var lowestIndex = newIndex > activeCellIndex ? activeCellIndex : Math.min.apply(Math, _toConsumableArray(indexList).concat([newIndex]));
19
+ var highestIndex = newIndex < activeCellIndex ? activeCellIndex : Math.max.apply(Math, _toConsumableArray(indexList).concat([newIndex]));
20
+ var newIndexList = [];
21
+
22
+ for (var i = lowestIndex; i <= highestIndex; i++) {
23
+ newIndexList.push(i);
24
+ }
25
+
26
+ return [].concat(newIndexList);
27
+ };
28
+
29
+ export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref2) {
30
+ var type = _ref2.type,
31
+ activeCellCoordinates = _ref2.activeCellCoordinates,
32
+ rows = _ref2.rows,
33
+ columns = _ref2.columns,
34
+ currentMatcher = _ref2.currentMatcher,
35
+ setActiveCellCoordinates = _ref2.setActiveCellCoordinates,
36
+ setCurrentMatcher = _ref2.setCurrentMatcher,
37
+ setSelectionAreas = _ref2.setSelectionAreas,
38
+ spreadsheetRef = _ref2.spreadsheetRef,
39
+ index = _ref2.index,
40
+ isKeyboard = _ref2.isKeyboard,
41
+ setSelectionAreaData = _ref2.setSelectionAreaData,
42
+ isHoldingCommandKey = _ref2.isHoldingCommandKey,
43
+ isHoldingShiftKey = _ref2.isHoldingShiftKey;
26
44
 
27
45
  if (!isHoldingCommandKey) {
28
46
  setSelectionAreaData([]);
@@ -43,11 +61,15 @@ export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref)
43
61
  column: type === 'column' ? columnValue : columns.length - 1
44
62
  };
45
63
  var tempMatcher = uuidv4();
46
- setActiveCellCoordinates({
47
- row: type === 'column' ? 0 : rowValue,
48
- column: type === 'column' ? columnValue : 0
49
- });
50
- setCurrentMatcher(tempMatcher);
64
+
65
+ if (!isHoldingShiftKey) {
66
+ setActiveCellCoordinates({
67
+ row: type === 'column' ? 0 : rowValue,
68
+ column: type === 'column' ? columnValue : 0
69
+ });
70
+ setCurrentMatcher(tempMatcher);
71
+ }
72
+
51
73
  var newSelectionArea = {
52
74
  point1: point1,
53
75
  point2: point2,
@@ -55,7 +77,7 @@ export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref)
55
77
  matcher: tempMatcher,
56
78
  header: {
57
79
  type: type,
58
- index: type === 'column' ? columnValue : rowValue
80
+ selectedIndexList: [type === 'column' ? columnValue : rowValue]
59
81
  }
60
82
  };
61
83
  setSelectionAreas(function (prev) {
@@ -81,6 +103,78 @@ export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref)
81
103
  return [].concat(_toConsumableArray(prev), [newSelectionArea]);
82
104
  }
83
105
 
106
+ if (isHoldingShiftKey) {
107
+ var _selectionAreasClone$, _selectionAreasClone$2;
108
+
109
+ var _selectionsFromHeaderCell = selectionsClone.filter(function (item) {
110
+ var _item$header3;
111
+
112
+ return (_item$header3 = item.header) === null || _item$header3 === void 0 ? void 0 : _item$header3.type;
113
+ }); // Shift/click behavior should not occur unless there are activeCellCoordinates set
114
+
115
+
116
+ var currentSelectionArea = _selectionsFromHeaderCell.filter(function (item) {
117
+ return item.matcher === currentMatcher;
118
+ })[0];
119
+
120
+ var originalAreaIndex = Math.max(currentSelectionArea === null || currentSelectionArea === void 0 ? void 0 : currentSelectionArea.point1[type], currentSelectionArea === null || currentSelectionArea === void 0 ? void 0 : currentSelectionArea.point2[type], activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates[type]);
121
+ var newIndexValue = type === 'column' ? columnValue : rowValue;
122
+ var newPoint = {
123
+ row: originalAreaIndex < newIndexValue ? rows.length - 1 : 0,
124
+ column: columnValue
125
+ };
126
+ var selectionAreasClone = deepCloneObject(prev);
127
+ var indexOfCurrentArea = selectionAreasClone.findIndex(function (item) {
128
+ return item.matcher === currentMatcher;
129
+ });
130
+ var newIndexList = getSelectedItemIndexList({
131
+ indexList: ((_selectionAreasClone$ = selectionAreasClone[indexOfCurrentArea]) === null || _selectionAreasClone$ === void 0 ? void 0 : (_selectionAreasClone$2 = _selectionAreasClone$.header) === null || _selectionAreasClone$2 === void 0 ? void 0 : _selectionAreasClone$2.selectedIndexList) || [type === 'column' ? columnValue : rowValue],
132
+ newIndex: newIndexValue,
133
+ activeCellIndex: activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates[type]
134
+ });
135
+
136
+ var setPoint1 = function setPoint1(value) {
137
+ return value < newIndexValue ? {
138
+ row: type === 'column' ? 0 : Math.min.apply(Math, _toConsumableArray(newIndexList)),
139
+ column: type === 'column' ? Math.min.apply(Math, _toConsumableArray(newIndexList)) : 0
140
+ } : newPoint;
141
+ };
142
+
143
+ var setPoint2 = function setPoint2(value) {
144
+ return value < newIndexValue ? newPoint : {
145
+ row: type === 'column' ? rows.length - 1 : Math.max.apply(Math, _toConsumableArray(newIndexList)),
146
+ column: type === 'column' ? Math.max.apply(Math, _toConsumableArray(newIndexList)) : columns.length - 1
147
+ };
148
+ }; // If there is no active cell set and shift is clicked on a header cell
149
+
150
+
151
+ if (!activeCellCoordinates || typeof activeCellCoordinates === 'undefined') {
152
+ // Need to set positioning of active cell because it doesn't exist yet
153
+ setCurrentMatcher(tempMatcher);
154
+ var firstSelectionArea = {
155
+ point1: setPoint1(type === 'column' ? columnValue : rowValue),
156
+ point2: setPoint2(type === 'column' ? columnValue : rowValue),
157
+ areaCreated: false,
158
+ matcher: tempMatcher,
159
+ header: {
160
+ type: type,
161
+ selectedIndexList: [type === 'column' ? columnValue : rowValue]
162
+ }
163
+ };
164
+ setActiveCellCoordinates({
165
+ row: type === 'column' ? 0 : rowValue,
166
+ column: type === 'column' ? columnValue : 0
167
+ });
168
+ return [firstSelectionArea];
169
+ }
170
+
171
+ selectionAreasClone[indexOfCurrentArea].point1 = setPoint1(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates[type]);
172
+ selectionAreasClone[indexOfCurrentArea].point2 = setPoint2(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates[type]);
173
+ selectionAreasClone[indexOfCurrentArea].areaCreated = false;
174
+ selectionAreasClone[indexOfCurrentArea].header.selectedIndexList = newIndexList;
175
+ return selectionAreasClone;
176
+ }
177
+
84
178
  return [newSelectionArea];
85
179
  });
86
180
  };
@@ -1,3 +1,4 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
3
  // @flow
3
4
 
@@ -13,10 +14,12 @@ import PropTypes from 'prop-types';
13
14
  import { Draggable16 } from '@carbon/icons-react';
14
15
  import { useDrag, useDrop } from 'react-dnd';
15
16
  import cx from 'classnames';
17
+ import { pkg } from '../../../settings';
16
18
  var useEffect = React.useEffect,
17
19
  useRef = React.useRef,
18
20
  useState = React.useState;
19
- var DRAG_TYPE = 'wkc-shared-ui-draggable-element';
21
+ var blockClass = "".concat(pkg.prefix, "--datagrid");
22
+ var DRAG_TYPE = "".concat(blockClass, "__shared-ui-draggable-element");
20
23
 
21
24
  var DraggableElement = function DraggableElement(_ref) {
22
25
  var id = _ref.id,
@@ -55,7 +58,6 @@ var DraggableElement = function DraggableElement(_ref) {
55
58
  var dragIndex = item.index;
56
59
  var hoverIndex = index; // Don't replace items with themselves
57
60
 
58
- // Don't replace items with themselves
59
61
  if (dragIndex === hoverIndex || disabled) {
60
62
  return;
61
63
  }
@@ -67,12 +69,6 @@ var DraggableElement = function DraggableElement(_ref) {
67
69
  // to avoid expensive index searches.
68
70
  // eslint-disable-next-line no-param-reassign
69
71
 
70
- // Time to actually perform the action
71
- // Note: we're mutating the monitor item here!
72
- // Generally it's better to avoid mutations,
73
- // but it's good here for the sake of performance
74
- // to avoid expensive index searches.
75
- // eslint-disable-next-line no-param-reassign
76
72
  item.index = hoverIndex;
77
73
  }
78
74
  }),
@@ -120,14 +116,10 @@ var DraggableElement = function DraggableElement(_ref) {
120
116
  var content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
121
117
  className: cx({
122
118
  disabled: disabled
123
- }, 'wkc-draggable-handleStyle')
119
+ }, "".concat(blockClass, "__draggable-handleStyle"))
124
120
  }, /*#__PURE__*/React.createElement(Draggable16, null)), children);
125
121
  return /*#__PURE__*/React.createElement("li", {
126
- className: cx({
127
- 'wkc-draggable-handleHolder-isOver': isOver && !disabled
128
- }, {
129
- 'wkc-draggable-handleHolder--grabbed': isGrabbed
130
- }, 'wkc-draggable-handleHolder'),
122
+ className: cx(_defineProperty({}, "".concat(blockClass, "__draggable-handleHolder-isOver"), isOver && !disabled), _defineProperty({}, "".concat(blockClass, "__wkc-draggable-handleHolder--grabbed"), isGrabbed), "".concat(blockClass, "__draggable-handleHolder")),
131
123
  ref: ref,
132
124
  "aria-selected": isFocused,
133
125
  role: "option",
@@ -155,17 +147,15 @@ var DraggableElement = function DraggableElement(_ref) {
155
147
  setIsFocusedOnItem(e.currentTarget === e.target);
156
148
  }
157
149
  }, /*#__PURE__*/React.createElement("span", {
158
- className: "wkc-shared-ui--assistive-text"
150
+ className: "".concat(blockClass, "__shared-ui--assistive-text")
159
151
  }, ariaLabel), isDragging && !isOver ? /*#__PURE__*/React.createElement("div", {
160
152
  ref: preview,
161
- className: "wkc-draggable-handleHolder-droppable"
153
+ className: "${blockClass}__draggable-handleHolder-droppable"
162
154
  }, content) : /*#__PURE__*/React.createElement("div", {
163
155
  ref: drag,
164
156
  "aria-hidden": isFocused && isFocusedOnItem // if focus on li, hide the children from aria
165
157
  ,
166
- className: cx({
167
- 'wkc-draggable-handleStyle': !disabled
168
- }, 'wkc-draggable-handleHolder-droppable')
158
+ className: cx(_defineProperty({}, "".concat(blockClass, "__draggable-handleStyle"), !disabled), ["".concat(blockClass, "__draggable-handleHolder-droppable")])
169
159
  }, (!isOver || disabled) && content));
170
160
  };
171
161
 
@@ -25,11 +25,9 @@ import { pkg
25
25
 
26
26
  import { Form } from 'carbon-components-react';
27
27
  import { SidePanel } from '../SidePanel';
28
- import { ActionSet } from '../ActionSet';
29
28
  import '../../global/js/utils/props-helper'; // The block part of our conventional BEM class names (blockClass__E--M).
30
29
 
31
30
  var blockClass = "".concat(pkg.prefix, "--edit-side-panel");
32
- var sidePanelBlockClass = "".concat(pkg.prefix, "--side-panel");
33
31
  var componentName = 'EditSidePanel'; // NOTE: the component SCSS is not imported here: it is rolled up separately.
34
32
  // Default values for props
35
33
 
@@ -77,7 +75,6 @@ export var EditSidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
77
75
  onClick: onRequestClose,
78
76
  kind: 'secondary'
79
77
  }];
80
- var actionContainerClassNames = cx(["".concat(blockClass, "__actions-container"), "".concat(sidePanelBlockClass, "__actions-container")]);
81
78
  return /*#__PURE__*/React.createElement(SidePanel, _extends({}, rest, _objectSpread({
82
79
  open: open,
83
80
  ref: ref,
@@ -92,18 +89,15 @@ export var EditSidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
92
89
  animateTitle: false,
93
90
  className: cx(blockClass, className),
94
91
  size: size,
95
- preventCloseOnClickOutside: true
92
+ preventCloseOnClickOutside: true,
93
+ actions: actions
96
94
  }), formTitle && /*#__PURE__*/React.createElement("h3", {
97
95
  className: "".concat(blockClass, "__form-title-text ").concat(blockClass, "__content-text")
98
96
  }, formTitle), formDescription && /*#__PURE__*/React.createElement("p", {
99
97
  className: "".concat(blockClass, "__form-description-text ").concat(blockClass, "__content-text")
100
98
  }, formDescription), /*#__PURE__*/React.createElement(Form, {
101
99
  className: "".concat(blockClass, "__form")
102
- }, children, /*#__PURE__*/React.createElement(ActionSet, {
103
- actions: actions,
104
- className: actionContainerClassNames,
105
- size: size
106
- })));
100
+ }, children));
107
101
  }); // Return a placeholder if not released and not enabled by feature flag
108
102
 
109
103
  EditSidePanel = pkg.checkComponentEnabled(EditSidePanel, componentName); // The display name of the component, used by React. Note that displayName
@@ -49,7 +49,7 @@ var defaults = {
49
49
  */
50
50
 
51
51
  export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
52
- var _ref4, _cx4;
52
+ var _window, _ref4, _cx4;
53
53
 
54
54
  var actionToolbarButtons = _ref.actionToolbarButtons,
55
55
  actions = _ref.actions,
@@ -107,7 +107,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
107
107
  size: size,
108
108
  open: open
109
109
  });
110
- var reducedMotion = window && window.matchMedia ? window.matchMedia('(prefers-reduced-motion: reduce)') : {
110
+ var reducedMotion = typeof window !== 'undefined' && (_window = window) !== null && _window !== void 0 && _window.matchMedia ? window.matchMedia('(prefers-reduced-motion: reduce)') : {
111
111
  matches: true
112
112
  }; // scroll panel to top going between steps
113
113
 
@@ -1,11 +1,12 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _typeof from "@babel/runtime/helpers/typeof";
2
3
 
3
4
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
5
 
5
6
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
7
 
7
8
  import { useRef, useLayoutEffect } from 'react';
8
- var windowExists = typeof window !== "undefined";
9
+ var windowExists = (typeof window === "undefined" ? "undefined" : _typeof(window)) !== "undefined";
9
10
 
10
11
  var getWindowSize = function getWindowSize() {
11
12
  if (!windowExists) {
@@ -1,6 +1,7 @@
1
+ import _typeof from "@babel/runtime/helpers/typeof";
1
2
  import { useRef, useLayoutEffect } from 'react';
2
3
  import { scrollableAncestor } from '../utils/scrollableAncestor';
3
- var windowExists = typeof window !== "undefined";
4
+ var windowExists = (typeof window === "undefined" ? "undefined" : _typeof(window)) !== "undefined";
4
5
 
5
6
  var useTargetScroll = function useTargetScroll(target, effect, deps, throttleInterval) {
6
7
  var scrollPosition = useRef({});
@@ -35,6 +35,7 @@ var defaults = {
35
35
  HTTPError404: true,
36
36
  HTTPErrorOther: true,
37
37
  ImportModal: true,
38
+ InlineEdit: true,
38
39
  NotificationsPanel: true,
39
40
  NoDataEmptyState: true,
40
41
  NoTagsEmptyState: true,
@@ -63,7 +64,6 @@ var defaults = {
63
64
  WebTerminalContentWrapper: false,
64
65
  EditSidePanel: false,
65
66
  CancelableTextEdit: false,
66
- InlineEdit: false,
67
67
  DataSpreadsheet: false,
68
68
  Datagrid: false
69
69
  /* new component flags here - comment used by generate CLI */
@@ -1,4 +1,5 @@
1
- var windowExists = typeof window !== "undefined"; // determine whether the target is scrollable
1
+ import _typeof from "@babel/runtime/helpers/typeof";
2
+ var windowExists = (typeof window === "undefined" ? "undefined" : _typeof(window)) !== "undefined"; // determine whether the target is scrollable
2
3
 
3
4
  var scrollable = function scrollable(target) {
4
5
  var style = window.getComputedStyle(target);
@@ -148,6 +148,7 @@ ActionSet.validateActions = function (sizeFn) {
148
148
  var problems = [];
149
149
 
150
150
  if (actions > 0) {
151
+ // eslint-disable-next-line react/prop-types
151
152
  var size = sizeFn ? sizeFn(props) : props.size || defaults.size;
152
153
  var stacking = willStack(size, actions);
153
154
 
@@ -149,6 +149,11 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
149
149
  sortAttribute = _useItemSort.sortAttribute,
150
150
  setSortAttribute = _useItemSort.setSortAttribute;
151
151
 
152
+ var _useState21 = (0, _react.useState)([]),
153
+ _useState22 = (0, _slicedToArray2.default)(_useState21, 2),
154
+ appliedModifiers = _useState22[0],
155
+ setAppliedModifiers = _useState22[1];
156
+
152
157
  (0, _react.useEffect)(function () {
153
158
  var entries = items.entries; // flatItems is just a single array of all entries including children
154
159
 
@@ -158,6 +163,16 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
158
163
  if (globalFilters !== null && globalFilters !== void 0 && globalFilters.length) {
159
164
  var globalFilterValues = (0, _addSelectUtils.getGlobalFilterValues)(globalFilters, flattenedItems);
160
165
  setGlobalFilterOpts(globalFilterValues);
166
+ }
167
+
168
+ if (items.modifiers) {
169
+ var modifiersToApply = flattenedItems.map(function (item) {
170
+ var modifierAttribute = items.modifiers.id;
171
+ return (0, _defineProperty2.default)({
172
+ id: item.id
173
+ }, modifierAttribute, item[modifierAttribute]);
174
+ });
175
+ setAppliedModifiers(modifiersToApply);
161
176
  } // multi select with nested data needs to be normalized
162
177
 
163
178
 
@@ -286,7 +301,18 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
286
301
  };
287
302
 
288
303
  var submitHandler = function submitHandler() {
289
- onSubmit(multi ? multiSelection : singleSelection);
304
+ if (multi && appliedModifiers.length > 0) {
305
+ var selections = multiSelection.map(function (item) {
306
+ return appliedModifiers.find(function (mod) {
307
+ return mod.id === item;
308
+ });
309
+ });
310
+ onSubmit(selections);
311
+ } else if (multi && appliedModifiers.length === 0) {
312
+ onSubmit(multiSelection);
313
+ } else {
314
+ onSubmit(singleSelection);
315
+ }
290
316
  };
291
317
 
292
318
  var classNames = (0, _classnames.default)(className, blockClass, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__single"), !multi), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__multi"), multi), _cx));
@@ -319,7 +345,9 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
319
345
  removeIconDescription: removeIconDescription,
320
346
  setMultiSelection: setMultiSelection,
321
347
  displayMetalPanel: displayMetalPanel,
322
- setDisplayMetaPanel: setDisplayMetaPanel
348
+ setDisplayMetaPanel: setDisplayMetaPanel,
349
+ modifiers: items.modifiers,
350
+ appliedModifiers: appliedModifiers
323
351
  };
324
352
 
325
353
  var setShowBreadsCrumbs = function setShowBreadsCrumbs() {
@@ -402,7 +430,9 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
402
430
  }));
403
431
  })) : /*#__PURE__*/_react.default.createElement("div", null, hasResults ? /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, (0, _extends2.default)({}, commonListProps, {
404
432
  filteredItems: itemsToDisplay,
405
- modifiers: items === null || items === void 0 ? void 0 : items.modifiers
433
+ modifiers: items.modifiers,
434
+ appliedModifiers: appliedModifiers,
435
+ setAppliedModifiers: setAppliedModifiers
406
436
  })) : /*#__PURE__*/_react.default.createElement("div", {
407
437
  className: "".concat(blockClass, "__body")
408
438
  }, /*#__PURE__*/_react.default.createElement(_NoDataEmptyState.NoDataEmptyState, {
@@ -438,6 +468,7 @@ AddSelect.propTypes = {
438
468
  influencerTitle: _propTypes.default.string,
439
469
  items: _propTypes.default.shape({
440
470
  modifiers: _propTypes.default.shape({
471
+ id: _propTypes.default.string,
441
472
  label: _propTypes.default.string,
442
473
  options: _propTypes.default.array
443
474
  }),
@@ -17,6 +17,8 @@ var _react = _interopRequireWildcard(require("react"));
17
17
 
18
18
  var _carbonComponentsReact = require("carbon-components-react");
19
19
 
20
+ var _classnames = _interopRequireDefault(require("classnames"));
21
+
20
22
  var _propTypes = _interopRequireDefault(require("prop-types"));
21
23
 
22
24
  var _iconsReact = require("@carbon/icons-react");
@@ -79,6 +81,7 @@ var AddSelectFilter = function AddSelectFilter(_ref) {
79
81
 
80
82
 
81
83
  var applyFilters = function applyFilters() {
84
+ setOpen(false);
82
85
  handleFilter(filters);
83
86
  };
84
87
 
@@ -104,6 +107,8 @@ var AddSelectFilter = function AddSelectFilter(_ref) {
104
107
  };
105
108
 
106
109
  var showFilter = multi && (filterOpts === null || filterOpts === void 0 ? void 0 : filterOpts.length) > 0;
110
+ var filterBtnClassnames = (0, _classnames.default)("".concat(blockClass, "-toggle"), (0, _defineProperty2.default)({}, "".concat(blockClass, "-toggle--open"), open));
111
+ var dirtyInput = Object.keys(filters).length > 0;
107
112
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
108
113
  className: "".concat(blockClass, "-search")
109
114
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
@@ -120,7 +125,7 @@ var AddSelectFilter = function AddSelectFilter(_ref) {
120
125
  return setOpen(!open);
121
126
  },
122
127
  iconDescription: iconDescription,
123
- className: "".concat(blockClass, "-toggle"),
128
+ className: filterBtnClassnames,
124
129
  size: "md"
125
130
  }), open && /*#__PURE__*/_react.default.createElement("div", {
126
131
  className: blockClass
@@ -146,11 +151,13 @@ var AddSelectFilter = function AddSelectFilter(_ref) {
146
151
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
147
152
  kind: "secondary",
148
153
  onClick: resetFilters,
149
- className: "".concat(blockClass, "-button")
154
+ className: "".concat(blockClass, "-button"),
155
+ disabled: !dirtyInput
150
156
  }, secondaryButtonText), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
151
157
  kind: "primary",
152
158
  onClick: applyFilters,
153
- className: "".concat(blockClass, "-button")
159
+ className: "".concat(blockClass, "-button"),
160
+ disabled: !dirtyInput && !hasFiltersApplied
154
161
  }, primaryButtonText)))), hasFiltersApplied && /*#__PURE__*/_react.default.createElement("div", {
155
162
  className: "".concat(blockClass, "-applied")
156
163
  }, Object.keys(appliedFilters).map(function (filterType) {
@@ -34,19 +34,24 @@ var _settings = require("../../settings");
34
34
  var componentName = 'AddSelectList';
35
35
 
36
36
  var AddSelectList = function AddSelectList(_ref) {
37
- var filteredItems = _ref.filteredItems,
37
+ var _modifiers$options;
38
+
39
+ var appliedModifiers = _ref.appliedModifiers,
40
+ filteredItems = _ref.filteredItems,
38
41
  metaIconDescription = _ref.metaIconDescription,
39
42
  modifiers = _ref.modifiers,
40
43
  multi = _ref.multi,
41
44
  multiSelection = _ref.multiSelection,
42
45
  navIconDescription = _ref.navIconDescription,
43
46
  path = _ref.path,
47
+ setAppliedModifiers = _ref.setAppliedModifiers,
44
48
  setDisplayMetaPanel = _ref.setDisplayMetaPanel,
45
49
  setMultiSelection = _ref.setMultiSelection,
46
50
  setPath = _ref.setPath,
47
51
  setSingleSelection = _ref.setSingleSelection,
48
52
  singleSelection = _ref.singleSelection;
49
53
  var blockClass = "".concat(_settings.pkg.prefix, "--add-select__selections");
54
+ var hasModifiers = (modifiers === null || modifiers === void 0 ? void 0 : (_modifiers$options = modifiers.options) === null || _modifiers$options === void 0 ? void 0 : _modifiers$options.length) > 0;
50
55
 
51
56
  var handleSingleSelection = function handleSingleSelection(value) {
52
57
  setSingleSelection(value);
@@ -147,14 +152,23 @@ var AddSelectList = function AddSelectList(_ref) {
147
152
  return /*#__PURE__*/_react.default.createElement(Icon, null);
148
153
  };
149
154
 
155
+ var modifierHandler = function modifierHandler(id, selectedItem) {
156
+ var modifiersClone = (0, _toConsumableArray2.default)(appliedModifiers);
157
+ var modifierIdx = modifiersClone.findIndex(function (item) {
158
+ return item.id === id;
159
+ });
160
+ modifiersClone[modifierIdx] = (0, _defineProperty2.default)({
161
+ id: id
162
+ }, modifiers.id, selectedItem);
163
+ setAppliedModifiers(modifiersClone);
164
+ };
165
+
150
166
  return /*#__PURE__*/_react.default.createElement("div", {
151
167
  className: "".concat(blockClass, "-wrapper")
152
168
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListWrapper, {
153
169
  selection: true,
154
170
  className: "".concat(blockClass)
155
171
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListBody, null, filteredItems.map(function (item) {
156
- var _modifiers$options;
157
-
158
172
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListRow, {
159
173
  key: item.id,
160
174
  className: (0, _classnames.default)("".concat(blockClass, "-row"), (0, _defineProperty2.default)({}, "".concat(blockClass, "-row-selected"), isSelected(item.id)))
@@ -182,22 +196,29 @@ var AddSelectList = function AddSelectList(_ref) {
182
196
  className: "".concat(blockClass, "-cell-title")
183
197
  }, item.title), item.subtitle && /*#__PURE__*/_react.default.createElement("span", {
184
198
  className: "".concat(blockClass, "-cell-subtitle")
185
- }, item.subtitle)))), (modifiers === null || modifiers === void 0 ? void 0 : (_modifiers$options = modifiers.options) === null || _modifiers$options === void 0 ? void 0 : _modifiers$options.length) && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Dropdown, {
199
+ }, item.subtitle)))), hasModifiers && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Dropdown, {
186
200
  id: "".concat(item.id, "-modifier"),
187
201
  type: "inline",
188
- items: modifiers === null || modifiers === void 0 ? void 0 : modifiers.options,
202
+ items: modifiers.options,
189
203
  light: true,
190
- label: modifiers === null || modifiers === void 0 ? void 0 : modifiers.label,
204
+ label: modifiers.label,
191
205
  disabled: !isSelected(item.id),
192
- className: "".concat(blockClass, "-dropdown ").concat(blockClass, "-hidden-hover")
206
+ className: "".concat(blockClass, "-dropdown ").concat(blockClass, "-hidden-hover"),
207
+ initialSelectedItem: item[modifiers.id],
208
+ onChange: function onChange(_ref5) {
209
+ var selectedItem = _ref5.selectedItem;
210
+ return modifierHandler(item.id, selectedItem);
211
+ }
193
212
  })) : /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, {
194
213
  className: "".concat(blockClass, "-radio"),
195
214
  name: "add-select-selections",
196
215
  id: item.id,
197
216
  value: item.value,
198
217
  labelText: item.title,
199
- onChange: handleSingleSelection,
200
- selected: item.value === singleSelection
218
+ onChange: function onChange() {
219
+ return handleSingleSelection(item.id);
220
+ },
221
+ selected: item.id === singleSelection
201
222
  }), item.children && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
202
223
  renderIcon: _iconsReact.ChevronRight16,
203
224
  iconDescription: navIconDescription,
@@ -228,6 +249,7 @@ var AddSelectList = function AddSelectList(_ref) {
228
249
 
229
250
  exports.AddSelectList = AddSelectList;
230
251
  AddSelectList.propTypes = {
252
+ appliedModifiers: _propTypes.default.array,
231
253
  filteredItems: _propTypes.default.array,
232
254
  metaIconDescription: _propTypes.default.string,
233
255
  modifiers: _propTypes.default.object,
@@ -235,6 +257,7 @@ AddSelectList.propTypes = {
235
257
  multiSelection: _propTypes.default.array,
236
258
  navIconDescription: _propTypes.default.string,
237
259
  path: _propTypes.default.array,
260
+ setAppliedModifiers: _propTypes.default.func,
238
261
  setDisplayMetaPanel: _propTypes.default.func,
239
262
  setMultiSelection: _propTypes.default.func,
240
263
  setPath: _propTypes.default.func,