@carbon/ibm-products 1.6.1 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. package/css/index-full-carbon.css +119 -8
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +2 -2
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon.css +73 -7
  6. package/css/index-without-carbon.css.map +1 -1
  7. package/css/index-without-carbon.min.css +2 -2
  8. package/css/index-without-carbon.min.css.map +1 -1
  9. package/css/index.css +73 -7
  10. package/css/index.css.map +1 -1
  11. package/css/index.min.css +2 -2
  12. package/css/index.min.css.map +1 -1
  13. package/es/components/ActionSet/ActionSet.js +1 -1
  14. package/es/components/AddSelect/AddSelect.js +11 -5
  15. package/es/components/AddSelect/AddSelectBreadcrumbs.js +1 -1
  16. package/es/components/AddSelect/AddSelectList.js +4 -4
  17. package/es/components/AddSelect/AddSelectSidebar.js +37 -5
  18. package/es/components/ButtonMenu/ButtonMenu.js +1 -1
  19. package/es/components/DataSpreadsheet/DataSpreadsheet.js +154 -0
  20. package/es/components/DataSpreadsheet/generateData.js +47 -0
  21. package/es/components/DataSpreadsheet/index.js +7 -0
  22. package/es/components/InlineEdit/InlineEdit.js +19 -22
  23. package/es/components/Tearsheet/TearsheetShell.js +3 -4
  24. package/es/components/index.js +2 -1
  25. package/es/global/js/package-settings.js +2 -1
  26. package/es/global/js/utils/getScrollbarWidth.js +14 -0
  27. package/lib/components/ActionSet/ActionSet.js +1 -1
  28. package/lib/components/AddSelect/AddSelect.js +11 -5
  29. package/lib/components/AddSelect/AddSelectBreadcrumbs.js +1 -1
  30. package/lib/components/AddSelect/AddSelectList.js +4 -4
  31. package/lib/components/AddSelect/AddSelectSidebar.js +37 -4
  32. package/lib/components/ButtonMenu/ButtonMenu.js +1 -1
  33. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +171 -0
  34. package/lib/components/DataSpreadsheet/generateData.js +58 -0
  35. package/lib/components/DataSpreadsheet/index.js +13 -0
  36. package/lib/components/InlineEdit/InlineEdit.js +19 -22
  37. package/lib/components/Tearsheet/TearsheetShell.js +2 -3
  38. package/lib/components/index.js +9 -1
  39. package/lib/global/js/package-settings.js +2 -1
  40. package/lib/global/js/utils/getScrollbarWidth.js +23 -0
  41. package/package.json +11 -9
  42. package/scss/components/AddSelect/_add-select.scss +20 -0
  43. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +79 -0
  44. package/scss/components/DataSpreadsheet/_index.scss +8 -0
  45. package/scss/components/DataSpreadsheet/_storybook-styles.scss +6 -0
  46. package/scss/components/InlineEdit/_inline-edit.scss +6 -4
  47. package/scss/components/_index.scss +1 -0
@@ -0,0 +1,154 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
+ var _excluded = ["className", "columns", "data"];
4
+
5
+ /**
6
+ * Copyright IBM Corp. 2022, 2022
7
+ *
8
+ * This source code is licensed under the Apache-2.0 license found in the
9
+ * LICENSE file in the root directory of this source tree.
10
+ */
11
+ // Import portions of React that are needed.
12
+ import React, { useMemo } from 'react';
13
+ import { useBlockLayout, useTable } from 'react-table';
14
+ import { FixedSizeList } from 'react-window'; // Other standard imports.
15
+
16
+ import PropTypes from 'prop-types';
17
+ import cx from 'classnames';
18
+ import { getDevtoolsProps } from '../../global/js/utils/devtools';
19
+ import { pkg
20
+ /*, carbon */
21
+ } from '../../settings';
22
+ import { getScrollbarWidth } from '../../global/js/utils/getScrollbarWidth'; // The block part of our conventional BEM class names (blockClass__E--M).
23
+
24
+ var blockClass = "".concat(pkg.prefix, "--data-spreadsheet");
25
+ var componentName = 'DataSpreadsheet';
26
+ /**
27
+ * DataSpreadsheet: used to organize and display large amounts of structured data, separated by columns and rows in a grid-like format.
28
+ */
29
+
30
+ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
31
+ var className = _ref.className,
32
+ columns = _ref.columns,
33
+ data = _ref.data,
34
+ rest = _objectWithoutProperties(_ref, _excluded);
35
+
36
+ var defaultColumn = useMemo(function () {
37
+ return {
38
+ width: 150,
39
+ rowHeaderWidth: 64
40
+ };
41
+ }, []);
42
+ var scrollBarSize = useMemo(function () {
43
+ return getScrollbarWidth();
44
+ }, []);
45
+
46
+ var _useTable = useTable({
47
+ columns: columns,
48
+ data: data,
49
+ defaultColumn: defaultColumn
50
+ }, useBlockLayout),
51
+ getTableProps = _useTable.getTableProps,
52
+ getTableBodyProps = _useTable.getTableBodyProps,
53
+ headerGroups = _useTable.headerGroups,
54
+ rows = _useTable.rows,
55
+ totalColumnsWidth = _useTable.totalColumnsWidth,
56
+ prepareRow = _useTable.prepareRow;
57
+
58
+ var RenderRow = React.useCallback(function (_ref2) {
59
+ var index = _ref2.index,
60
+ style = _ref2.style;
61
+ var row = rows[index];
62
+ prepareRow(row);
63
+ return /*#__PURE__*/React.createElement("div", _extends({}, row.getRowProps({
64
+ style: style
65
+ }), {
66
+ className: "tr",
67
+ "data-row-index": index
68
+ }), /*#__PURE__*/React.createElement("button", {
69
+ type: "button",
70
+ className: cx("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th")),
71
+ style: {
72
+ width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth,
73
+ display: 'flex',
74
+ justifyContent: 'flex-end',
75
+ alignItems: 'center'
76
+ }
77
+ }, index + 1), row.cells.map(function (cell, index) {
78
+ return /*#__PURE__*/React.createElement("button", _extends({
79
+ key: "cell_".concat(index)
80
+ }, cell.getCellProps(), {
81
+ type: "button",
82
+ className: "".concat(blockClass, "__td")
83
+ }), cell.render('Cell'));
84
+ }));
85
+ }, [prepareRow, rows, defaultColumn.rowHeaderWidth]);
86
+ return /*#__PURE__*/React.createElement("div", _extends({}, rest, getTableProps(), getDevtoolsProps(componentName), {
87
+ className: cx(blockClass, className),
88
+ ref: ref,
89
+ role: "grid"
90
+ }), /*#__PURE__*/React.createElement("div", null, headerGroups.map(function (headerGroup, index) {
91
+ return /*#__PURE__*/React.createElement("div", _extends({
92
+ key: "header_".concat(index)
93
+ }, headerGroup.getHeaderGroupProps(), {
94
+ className: "".concat(blockClass, "__tr")
95
+ }), /*#__PURE__*/React.createElement("button", {
96
+ type: "button",
97
+ className: "".concat(blockClass, "__th"),
98
+ style: {
99
+ width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth
100
+ }
101
+ }, "\xA0"), headerGroup.headers.map(function (column, index) {
102
+ return /*#__PURE__*/React.createElement("button", _extends({
103
+ key: "column_".concat(index)
104
+ }, column.getHeaderProps(), {
105
+ type: "button",
106
+ className: "".concat(blockClass, "__th")
107
+ }), column.render('Header'));
108
+ }));
109
+ })), /*#__PURE__*/React.createElement("div", getTableBodyProps(), /*#__PURE__*/React.createElement(FixedSizeList, {
110
+ height: 400,
111
+ itemCount: rows.length,
112
+ itemSize: 36,
113
+ width: totalColumnsWidth + scrollBarSize
114
+ }, RenderRow)));
115
+ }); // Return a placeholder if not released and not enabled by feature flag
116
+
117
+ DataSpreadsheet = pkg.checkComponentEnabled(DataSpreadsheet, componentName); // The display name of the component, used by React. Note that displayName
118
+ // is used in preference to relying on function.name.
119
+
120
+ DataSpreadsheet.displayName = componentName; // The types and DocGen commentary for the component props,
121
+ // in alphabetical order (for consistency).
122
+ // See https://www.npmjs.com/package/prop-types#usage.
123
+
124
+ DataSpreadsheet.propTypes = {
125
+ /**
126
+ * Provide an optional class to be applied to the containing node.
127
+ */
128
+ className: PropTypes.string,
129
+
130
+ /**
131
+ * The data that will build the column headers
132
+ */
133
+ columns: PropTypes.arrayOf(PropTypes.shape({
134
+ Header: PropTypes.string,
135
+ accessor: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
136
+ Cell: PropTypes.func // optional cell formatter
137
+
138
+ })),
139
+
140
+ /**
141
+ * The spreadsheet data that will be rendered in the body of the spreadsheet component
142
+ */
143
+ data: PropTypes.arrayOf(PropTypes.shape)
144
+ /* TODO: add types and DocGen for all props. */
145
+
146
+ }; // Default values for component props. Default values are not required for
147
+ // props that are required, nor for props where the component can apply
148
+ // 'undefined' values reasonably. Default values should be provided when the
149
+ // component needs to make a choice or assumption when a prop is not supplied.
150
+
151
+ DataSpreadsheet.defaultProps = {
152
+ data: [],
153
+ columns: []
154
+ };
@@ -0,0 +1,47 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+
3
+ 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
+ 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
+ // cspell:disable
8
+ var pets = ['dog', 'cat', 'bird', 'lizard', 'frog', 'hamster', 'fish', 'rabbit', 'snake'];
9
+ var petNames = ['Bruno', 'Willow', 'Kona', 'Heidi', 'Rusty', 'Bonnie', 'Cash', 'Gucci', 'Brody', 'Emma', 'Loki', 'Angel', 'Astro', 'Sherman', 'Layla', 'Peanut', 'Grace', 'Mickey', 'Sasha', 'Finn', 'Tucker', 'Bear', 'Mocha', 'Roscoe']; // cspell:enable
10
+
11
+ var range = function range(len) {
12
+ var arr = [];
13
+
14
+ for (var i = 0; i < len; i++) {
15
+ arr.push(i);
16
+ }
17
+
18
+ return arr;
19
+ };
20
+
21
+ var newPet = function newPet() {
22
+ return {
23
+ petType: pets[Math.floor(Math.random() * pets.length)],
24
+ firstName: petNames[Math.floor(Math.random() * petNames.length)],
25
+ age: Math.floor(Math.random() * 30),
26
+ visits: Math.floor(Math.random() * 40),
27
+ health: Math.floor(Math.random() * 100)
28
+ };
29
+ };
30
+
31
+ export var generateData = function generateData() {
32
+ for (var _len = arguments.length, lens = new Array(_len), _key = 0; _key < _len; _key++) {
33
+ lens[_key] = arguments[_key];
34
+ }
35
+
36
+ var makeDataLevel = function makeDataLevel() {
37
+ var depth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
38
+ var len = lens[depth];
39
+ return range(len).map(function () {
40
+ return _objectSpread(_objectSpread({}, newPet()), {}, {
41
+ subRows: lens[depth + 1] ? makeDataLevel(depth + 1) : undefined
42
+ });
43
+ });
44
+ };
45
+
46
+ return makeDataLevel();
47
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022, 2022
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ export { DataSpreadsheet } from './DataSpreadsheet';
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
- var _excluded = ["cancelDescription", "className", "disabled", "editDescription", "editVisibleOnHoverOnly", "id", "invalid", "invalidText", "labelText", "light", "onCancel", "onSave", "onChange", "placeholder", "saveDescription", "saveDisabled", "size", "value", "warn", "warnText"];
5
+ var _excluded = ["cancelDescription", "className", "disabled", "editDescription", "editVisibleOnHoverOnly", "id", "invalid", "invalidText", "labelText", "light", "onCancel", "onSave", "onChange", "placeholder", "saveDescription", "size", "value", "warn", "warnText"];
6
6
 
7
7
  /**
8
8
  * Copyright IBM Corp. 2022, 2022
@@ -48,7 +48,6 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
48
48
  onChange = _ref.onChange,
49
49
  placeholder = _ref.placeholder,
50
50
  saveDescription = _ref.saveDescription,
51
- saveDisabled = _ref.saveDisabled,
52
51
  size = _ref.size,
53
52
  value = _ref.value,
54
53
  warn = _ref.warn,
@@ -69,9 +68,9 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
69
68
  internalValue = _useState4[0],
70
69
  setInternalValue = _useState4[1];
71
70
 
72
- var showValidationText = invalid || warn;
71
+ var showValidation = invalid || warn;
73
72
  var validationText = invalidText || warnText;
74
- var validationIcon = showValidationText ? invalid ? /*#__PURE__*/React.createElement(WarningFilled16, null) : /*#__PURE__*/React.createElement(WarningAltFilled16, null) : null;
73
+ var validationIcon = showValidation ? invalid ? /*#__PURE__*/React.createElement(WarningFilled16, null) : /*#__PURE__*/React.createElement(WarningAltFilled16, null) : null;
75
74
 
76
75
  var doSetEditing = function doSetEditing(value) {
77
76
  if (value === false) {
@@ -123,6 +122,14 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
123
122
  }
124
123
  };
125
124
 
125
+ var handleInput = function handleInput() {
126
+ setInternalValue(refInput.current.innerText);
127
+
128
+ if (onChange) {
129
+ onChange(refInput.current.innerText);
130
+ }
131
+ };
132
+
126
133
  var handlePaste = function handlePaste(ev) {
127
134
  ev.preventDefault(); // Get clipboard as plain text
128
135
 
@@ -150,14 +157,6 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
150
157
  }
151
158
  };
152
159
 
153
- var handleInput = function handleInput() {
154
- setInternalValue(refInput.current.innerText);
155
-
156
- if (onChange) {
157
- onChange(refInput.current.innerText);
158
- }
159
- };
160
-
161
160
  var handleCancel = function handleCancel() {
162
161
  refInput.current.innerText = value;
163
162
  handleInput(value);
@@ -171,7 +170,6 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
171
170
 
172
171
  var handleBlur = function handleBlur(ev) {
173
172
  if (!ref.current.contains(ev.relatedTarget)) {
174
- doSetEditing(false);
175
173
  handleSave();
176
174
  }
177
175
  };
@@ -242,7 +240,7 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
242
240
  "aria-hidden": !editing
243
241
  }, "\u2026"), /*#__PURE__*/React.createElement("div", {
244
242
  className: cx("".concat(blockClass, "__toolbar"), (_cx3 = {}, _defineProperty(_cx3, "".concat(blockClass, "__toolbar--animation"), toolbarAnimation), _defineProperty(_cx3, "".concat(blockClass, "__toolbar--saveable"), refInput.current && value !== internalValue), _cx3))
245
- }, showValidationText && validationText.length > 0 && /*#__PURE__*/React.createElement("div", {
243
+ }, showValidation && /*#__PURE__*/React.createElement("div", {
246
244
  className: "".concat(blockClass, "__validation-icon")
247
245
  }, validationIcon), editing ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
248
246
  className: "".concat(blockClass, "__cancel"),
@@ -258,7 +256,7 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
258
256
  iconDescription: saveDescription,
259
257
  onClick: handleSave,
260
258
  renderIcon: Checkmark16,
261
- disabled: invalid || saveDisabled || value === internalValue
259
+ disabled: value === internalValue
262
260
  })) : /*#__PURE__*/React.createElement(Button, {
263
261
  "aria-hidden": "true",
264
262
  className: cx("".concat(blockClass, "__edit"), _defineProperty({}, "".concat(blockClass, "__edit--hover-visible"), editVisibleOnHoverOnly)),
@@ -271,7 +269,7 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
271
269
  tabIndex: -1
272
270
  }))), /*#__PURE__*/React.createElement("div", {
273
271
  className: cx("".concat(blockClass, "__disabled-cover"))
274
- }), showValidationText && validationText.length > 0 && /*#__PURE__*/React.createElement("div", {
272
+ }), showValidation && validationText && validationText.length > 0 && /*#__PURE__*/React.createElement("div", {
275
273
  className: "".concat(blockClass, "__validation-text ").concat(carbon.prefix, "--form-requirement")
276
274
  }, validationText))
277
275
  );
@@ -342,12 +340,16 @@ InlineEdit.propTypes = {
342
340
  onCancel: PropTypes.func,
343
341
 
344
342
  /**
345
- * method called on input event (it's a React thing onChange behaves like on input)
343
+ * method called on input event (it's a React thing onChange behaves like on input).
344
+ *
345
+ * NOTE: caller to handle invalid/warn states and associated text
346
346
  */
347
347
  onChange: PropTypes.func,
348
348
 
349
349
  /**
350
350
  * method called on change event
351
+ *
352
+ * NOTE: caller to handle invalid/warn states and associated text
351
353
  */
352
354
  onSave: PropTypes.func,
353
355
 
@@ -361,11 +363,6 @@ InlineEdit.propTypes = {
361
363
  */
362
364
  saveDescription: PropTypes.string.isRequired,
363
365
 
364
- /**
365
- * disabled state of the save button
366
- */
367
- saveDisabled: PropTypes.bool,
368
-
369
366
  /**
370
367
  * vertical size of control
371
368
  */
@@ -15,7 +15,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
15
15
  * LICENSE file in the root directory of this source tree.
16
16
  */
17
17
  // Import portions of React that are needed.
18
- import React, { useEffect, useLayoutEffect, useState, useRef } from 'react';
18
+ import React, { useEffect, useState, useRef } from 'react';
19
19
  import { useResizeDetector } from 'react-resize-detector'; // Other standard imports.
20
20
 
21
21
  import PropTypes from 'prop-types';
@@ -120,10 +120,9 @@ export var TearsheetShell = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
120
120
  setTimeout(function () {
121
121
  return element.focus();
122
122
  }, 1);
123
- }; // Hook called whenever the tearsheet mounts, unmounts, or 'open' changes.
123
+ };
124
124
 
125
-
126
- useLayoutEffect(function () {
125
+ useEffect(function () {
127
126
  var notify = function notify() {
128
127
  return stack.all.forEach(function (handler) {
129
128
  handler(Math.min(stack.open.length, maxDepth), stack.open.indexOf(handler) + 1);
@@ -37,4 +37,5 @@ export { WebTerminal } from './WebTerminal';
37
37
  export { EditSidePanel } from './EditSidePanel';
38
38
  export { OptionsTile } from './OptionsTile';
39
39
  export { CancelableTextEdit } from './CancelableTextEdit';
40
- export { InlineEdit } from './InlineEdit';
40
+ export { InlineEdit } from './InlineEdit';
41
+ export { DataSpreadsheet } from './DataSpreadsheet';
@@ -63,7 +63,8 @@ var defaults = {
63
63
  EditSidePanel: false,
64
64
  OptionsTile: false,
65
65
  CancelableTextEdit: false,
66
- InlineEdit: false
66
+ InlineEdit: false,
67
+ DataSpreadsheet: false
67
68
  /* new component flags here - comment used by generate CLI */
68
69
 
69
70
  },
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022, 2022
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ export var getScrollbarWidth = function getScrollbarWidth() {
8
+ var scrollDiv = document.createElement('div');
9
+ scrollDiv.setAttribute('style', 'width: 100px; height: 100px; overflow: scroll; position:absolute; top:-9999px;');
10
+ document.body.appendChild(scrollDiv);
11
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
12
+ document.body.removeChild(scrollDiv);
13
+ return scrollbarWidth;
14
+ };
@@ -61,7 +61,7 @@ ActionSetButton.propTypes = _objectSpread(_objectSpread({}, _carbonComponentsRea
61
61
  label: _propTypes.default.string,
62
62
  loading: _propTypes.default.bool
63
63
  });
64
- var defaultKind = _carbonComponentsReact.Button.defaultProps.kind;
64
+ var defaultKind = 'primary';
65
65
 
66
66
  var willStack = function willStack(size, numberOfActions) {
67
67
  return size === 'xs' || size === 'sm' || size === 'md' && numberOfActions > 2;
@@ -37,7 +37,7 @@ var _AddSelectBreadcrumbs = require("./AddSelectBreadcrumbs");
37
37
 
38
38
  var _AddSelectList = require("./AddSelectList");
39
39
 
40
- var _excluded = ["className", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "title"];
40
+ var _excluded = ["className", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "removeIconDescription", "textInputLabel", "title"];
41
41
 
42
42
  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); }
43
43
 
@@ -64,6 +64,8 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
64
64
  onSubmit = _ref.onSubmit,
65
65
  onSubmitButtonText = _ref.onSubmitButtonText,
66
66
  open = _ref.open,
67
+ removeIconDescription = _ref.removeIconDescription,
68
+ textInputLabel = _ref.textInputLabel,
67
69
  title = _ref.title,
68
70
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
69
71
  var blockClass = "".concat(_settings.pkg.prefix, "--add-select"); // hooks
@@ -118,7 +120,7 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
118
120
  } // otherwise use the default label filter
119
121
 
120
122
 
121
- return item.label.toLowerCase().includes(searchTerm);
123
+ return item.title.toLowerCase().includes(searchTerm);
122
124
  });
123
125
  return results;
124
126
  };
@@ -129,7 +131,7 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
129
131
  className: "".concat(blockClass, "__header")
130
132
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
131
133
  id: "temp-id",
132
- labelText: "temp label",
134
+ labelText: textInputLabel,
133
135
  placeholder: inputPlaceholder,
134
136
  value: searchTerm,
135
137
  onChange: handleSearch
@@ -182,7 +184,9 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
182
184
  items: items,
183
185
  multiSelection: multiSelection,
184
186
  noSelectionDescription: noSelectionDescription,
185
- noSelectionTitle: noSelectionTitle
187
+ noSelectionTitle: noSelectionTitle,
188
+ removeIconDescription: removeIconDescription,
189
+ setMultiSelection: setMultiSelection
186
190
  };
187
191
  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));
188
192
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
@@ -201,7 +205,7 @@ AddSelect.propTypes = {
201
205
  inputPlaceholder: _propTypes.default.string,
202
206
  items: _propTypes.default.arrayOf(_propTypes.default.shape({
203
207
  id: _propTypes.default.string.isRequired,
204
- label: _propTypes.default.string.isRequired,
208
+ title: _propTypes.default.string.isRequired,
205
209
  value: _propTypes.default.string.isRequired
206
210
  })),
207
211
  itemsLabel: _propTypes.default.string,
@@ -216,6 +220,8 @@ AddSelect.propTypes = {
216
220
  onSubmit: _propTypes.default.func,
217
221
  onSubmitButtonText: _propTypes.default.string,
218
222
  open: _propTypes.default.bool,
223
+ removeIconDescription: _propTypes.default.string,
224
+ textInputLabel: _propTypes.default.string,
219
225
  title: _propTypes.default.string
220
226
  };
221
227
  AddSelect.defaultProps = {
@@ -58,7 +58,7 @@ var AddSelectBreadcrumbs = function AddSelectBreadcrumbs(_ref) {
58
58
  key: entry.id,
59
59
  isCurrentPage: isCurrentPage,
60
60
  onClick: crumbHandler
61
- }, entry.label);
61
+ }, entry.title);
62
62
  }));
63
63
  };
64
64
 
@@ -57,10 +57,10 @@ var AddSelectList = function AddSelectList(_ref) {
57
57
 
58
58
  var onNavigateItem = function onNavigateItem(_ref2) {
59
59
  var id = _ref2.id,
60
- label = _ref2.label;
60
+ title = _ref2.title;
61
61
  setPath([].concat((0, _toConsumableArray2.default)(path), [{
62
62
  id: id,
63
- label: label
63
+ title: title
64
64
  }]));
65
65
  };
66
66
 
@@ -79,7 +79,7 @@ var AddSelectList = function AddSelectList(_ref) {
79
79
  onChange: function onChange(value) {
80
80
  return handleMultiSelection(item.id, value);
81
81
  },
82
- labelText: item.label,
82
+ labelText: item.title,
83
83
  id: item.id,
84
84
  checked: multiSelection.includes(item.id)
85
85
  }) : /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, {
@@ -87,7 +87,7 @@ var AddSelectList = function AddSelectList(_ref) {
87
87
  name: "add-select-selections",
88
88
  id: item.id,
89
89
  value: item.value,
90
- labelText: item.label,
90
+ labelText: item.title,
91
91
  onChange: handleSingleSelection,
92
92
  selected: item.value === singleSelection
93
93
  }), item.children && /*#__PURE__*/_react.default.createElement(_iconsReact.ChevronRight16, {
@@ -13,6 +13,8 @@ var _react = _interopRequireDefault(require("react"));
13
13
 
14
14
  var _carbonComponentsReact = require("carbon-components-react");
15
15
 
16
+ var _iconsReact = require("@carbon/icons-react");
17
+
16
18
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
19
 
18
20
  var _NoDataEmptyState = require("../../components/EmptyStates/NoDataEmptyState");
@@ -27,8 +29,18 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
27
29
  items = _ref.items,
28
30
  multiSelection = _ref.multiSelection,
29
31
  noSelectionDescription = _ref.noSelectionDescription,
30
- noSelectionTitle = _ref.noSelectionTitle;
31
- var blockClass = "".concat(_settings.pkg.prefix, "--add-select__sidebar"); // utility to flatten the list of items and their children into a single searchable array
32
+ noSelectionTitle = _ref.noSelectionTitle,
33
+ removeIconDescription = _ref.removeIconDescription,
34
+ setMultiSelection = _ref.setMultiSelection;
35
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select__sidebar");
36
+
37
+ var handleItemRemove = function handleItemRemove(id) {
38
+ var newSelections = multiSelection.filter(function (v) {
39
+ return v !== id;
40
+ });
41
+ setMultiSelection(newSelections);
42
+ }; // utility to flatten the list of items and their children into a single searchable array
43
+
32
44
 
33
45
  var flattenItems = function flattenItems(arr) {
34
46
  return arr.reduce(function (prev, cur) {
@@ -44,6 +56,25 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
44
56
  return item.id === selectedId;
45
57
  });
46
58
  });
59
+
60
+ var getTitle = function getTitle(_ref2) {
61
+ var title = _ref2.title,
62
+ subtitle = _ref2.subtitle,
63
+ id = _ref2.id;
64
+ return /*#__PURE__*/_react.default.createElement("div", {
65
+ className: "".concat(blockClass, "-accordion-title")
66
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", null, title), /*#__PURE__*/_react.default.createElement("p", null, subtitle)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
67
+ renderIcon: _iconsReact.SubtractAlt32,
68
+ iconDescription: removeIconDescription,
69
+ hasIconOnly: true,
70
+ onClick: function onClick() {
71
+ return handleItemRemove(id);
72
+ },
73
+ kind: "ghost",
74
+ className: "".concat(blockClass, "-item-remove-button")
75
+ }));
76
+ };
77
+
47
78
  return /*#__PURE__*/_react.default.createElement("div", {
48
79
  className: blockClass
49
80
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -57,7 +88,7 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
57
88
  align: "start"
58
89
  }, sidebarItems.map(function (item) {
59
90
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.AccordionItem, {
60
- title: item.value,
91
+ title: getTitle(item),
61
92
  key: item.id
62
93
  }, Object.keys(item).map(function (key) {
63
94
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -84,6 +115,8 @@ AddSelectSidebar.propTypes = {
84
115
  items: _propTypes.default.array,
85
116
  multiSelection: _propTypes.default.array,
86
117
  noSelectionDescription: _propTypes.default.string,
87
- noSelectionTitle: _propTypes.default.string
118
+ noSelectionTitle: _propTypes.default.string,
119
+ removeIconDescription: _propTypes.default.string,
120
+ setMultiSelection: _propTypes.default.func
88
121
  };
89
122
  AddSelectSidebar.displayName = componentName;
@@ -111,5 +111,5 @@ ButtonMenu.propTypes = {
111
111
  size: _carbonComponentsReact.Button.propTypes.size
112
112
  };
113
113
  ButtonMenu.defaultProps = {
114
- size: _carbonComponentsReact.Button.defaultProps.size
114
+ size: 'default'
115
115
  };