@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.
- package/css/index-full-carbon.css +119 -8
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +2 -2
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon.css +73 -7
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +2 -2
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +73 -7
- package/css/index.css.map +1 -1
- package/css/index.min.css +2 -2
- package/css/index.min.css.map +1 -1
- package/es/components/ActionSet/ActionSet.js +1 -1
- package/es/components/AddSelect/AddSelect.js +11 -5
- package/es/components/AddSelect/AddSelectBreadcrumbs.js +1 -1
- package/es/components/AddSelect/AddSelectList.js +4 -4
- package/es/components/AddSelect/AddSelectSidebar.js +37 -5
- package/es/components/ButtonMenu/ButtonMenu.js +1 -1
- package/es/components/DataSpreadsheet/DataSpreadsheet.js +154 -0
- package/es/components/DataSpreadsheet/generateData.js +47 -0
- package/es/components/DataSpreadsheet/index.js +7 -0
- package/es/components/InlineEdit/InlineEdit.js +19 -22
- package/es/components/Tearsheet/TearsheetShell.js +3 -4
- package/es/components/index.js +2 -1
- package/es/global/js/package-settings.js +2 -1
- package/es/global/js/utils/getScrollbarWidth.js +14 -0
- package/lib/components/ActionSet/ActionSet.js +1 -1
- package/lib/components/AddSelect/AddSelect.js +11 -5
- package/lib/components/AddSelect/AddSelectBreadcrumbs.js +1 -1
- package/lib/components/AddSelect/AddSelectList.js +4 -4
- package/lib/components/AddSelect/AddSelectSidebar.js +37 -4
- package/lib/components/ButtonMenu/ButtonMenu.js +1 -1
- package/lib/components/DataSpreadsheet/DataSpreadsheet.js +171 -0
- package/lib/components/DataSpreadsheet/generateData.js +58 -0
- package/lib/components/DataSpreadsheet/index.js +13 -0
- package/lib/components/InlineEdit/InlineEdit.js +19 -22
- package/lib/components/Tearsheet/TearsheetShell.js +2 -3
- package/lib/components/index.js +9 -1
- package/lib/global/js/package-settings.js +2 -1
- package/lib/global/js/utils/getScrollbarWidth.js +23 -0
- package/package.json +11 -9
- package/scss/components/AddSelect/_add-select.scss +20 -0
- package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +79 -0
- package/scss/components/DataSpreadsheet/_index.scss +8 -0
- package/scss/components/DataSpreadsheet/_storybook-styles.scss +6 -0
- package/scss/components/InlineEdit/_inline-edit.scss +6 -4
- 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
|
+
};
|
@@ -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", "
|
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
|
71
|
+
var showValidation = invalid || warn;
|
73
72
|
var validationText = invalidText || warnText;
|
74
|
-
var validationIcon =
|
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
|
-
},
|
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:
|
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
|
-
}),
|
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,
|
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
|
-
};
|
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);
|
package/es/components/index.js
CHANGED
@@ -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';
|
@@ -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 =
|
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.
|
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:
|
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
|
-
|
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 = {
|
@@ -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
|
-
|
60
|
+
title = _ref2.title;
|
61
61
|
setPath([].concat((0, _toConsumableArray2.default)(path), [{
|
62
62
|
id: id,
|
63
|
-
|
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.
|
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.
|
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
|
-
|
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
|
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;
|