@carbon/ibm-products 1.6.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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;
|