@carbon/ibm-products 1.17.0 → 1.18.2
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +30 -27
- package/css/components/Datagrid/styles/datagrid.css +24 -4
- package/css/components/Datagrid/styles/datagrid.css.map +1 -1
- package/css/components/Datagrid/styles/index.css +24 -4
- package/css/components/Datagrid/styles/index.css.map +1 -1
- package/css/index-full-carbon.css +215 -90
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +4 -4
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon.css +98 -24
- 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 +124 -55
- package/css/index.css.map +1 -1
- package/css/index.min.css +4 -4
- package/css/index.min.css.map +1 -1
- package/es/components/AddSelect/AddSelect.js +57 -8
- package/es/components/AddSelect/AddSelectColumn.js +31 -73
- package/es/components/AddSelect/AddSelectFilter.js +2 -2
- package/es/components/AddSelect/AddSelectList.js +32 -6
- package/es/components/AddSelect/AddSelectMetaPanel.js +54 -0
- package/es/components/AddSelect/AddSelectSidebar.js +19 -1
- package/es/components/AddSelect/AddSelectSort.js +61 -0
- package/es/components/AddSelect/add-select-utils.js +21 -0
- package/es/components/AddSelect/hooks/useItemSort.js +20 -0
- package/es/components/DataSpreadsheet/DataSpreadsheet.js +29 -15
- package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +89 -46
- package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +70 -6
- package/es/components/DataSpreadsheet/hooks/index.js +3 -1
- package/es/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +15 -14
- package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +64 -0
- package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +155 -0
- package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +3 -3
- package/es/components/DataSpreadsheet/utils/getCellSize.js +10 -10
- package/es/components/DataSpreadsheet/utils/getSpreadsheetWidth.js +8 -2
- package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +1 -1
- package/es/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +35 -0
- package/es/components/Datagrid/Datagrid/Datagrid.js +1 -1
- package/es/components/Datagrid/Datagrid/DatagridEmptyBody.js +22 -3
- package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +3 -3
- package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -1
- package/es/components/ExportModal/ExportModal.js +1 -1
- package/lib/components/AddSelect/AddSelect.js +58 -8
- package/lib/components/AddSelect/AddSelectColumn.js +32 -71
- package/lib/components/AddSelect/AddSelectFilter.js +2 -2
- package/lib/components/AddSelect/AddSelectList.js +30 -4
- package/lib/components/AddSelect/AddSelectMetaPanel.js +77 -0
- package/lib/components/AddSelect/AddSelectSidebar.js +20 -1
- package/lib/components/AddSelect/AddSelectSort.js +79 -0
- package/lib/components/AddSelect/add-select-utils.js +29 -2
- package/lib/components/AddSelect/hooks/useItemSort.js +33 -0
- package/lib/components/DataSpreadsheet/DataSpreadsheet.js +28 -14
- package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +90 -45
- package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +72 -6
- package/lib/components/DataSpreadsheet/hooks/index.js +17 -1
- package/lib/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +14 -14
- package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +78 -0
- package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +163 -0
- package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +3 -3
- package/lib/components/DataSpreadsheet/utils/getCellSize.js +4 -4
- package/lib/components/DataSpreadsheet/utils/getSpreadsheetWidth.js +8 -2
- package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +1 -1
- package/lib/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +46 -0
- package/lib/components/Datagrid/Datagrid/Datagrid.js +1 -1
- package/lib/components/Datagrid/Datagrid/DatagridEmptyBody.js +24 -3
- package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +3 -3
- package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -1
- package/lib/components/ExportModal/ExportModal.js +1 -1
- package/package.json +13 -12
- package/scss/components/AddSelect/_add-select.scss +45 -5
- package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +28 -14
- package/scss/components/Datagrid/_storybook-styles.scss +5 -0
- package/scss/components/Datagrid/styles/datagrid.scss +43 -5
@@ -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 = ["className", "clearFiltersText", "columnInputPlaceholder", "description", "globalFilters", "globalFiltersIconDescription", "globalFiltersPlaceholderText", "globalFiltersPrimaryButtonText", "globalFiltersSecondaryButtonText", "globalSearchLabel", "globalSearchPlaceholder", "influencerTitle", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSubmit", "onSubmitButtonText", "open", "portalTarget", "removeIconDescription", "searchResultsLabel", "title"];
|
5
|
+
var _excluded = ["className", "clearFiltersText", "closeIconDescription", "columnInputPlaceholder", "description", "globalFilters", "globalFiltersIconDescription", "globalFiltersPlaceholderText", "globalFiltersPrimaryButtonText", "globalFiltersSecondaryButtonText", "globalSearchLabel", "globalSearchPlaceholder", "globalSortBy", "influencerTitle", "items", "itemsLabel", "metaIconDescription", "metaPanelTitle", "multi", "navIconDescription", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSubmit", "onSubmitButtonText", "open", "portalTarget", "removeIconDescription", "searchResultsLabel", "title"];
|
6
6
|
//
|
7
7
|
// Copyright IBM Corp. 2022
|
8
8
|
//
|
@@ -22,12 +22,16 @@ import { AddSelectList } from './AddSelectList';
|
|
22
22
|
import { AddSelectColumn } from './AddSelectColumn';
|
23
23
|
import { normalize, flatten, getGlobalFilterValues } from './add-select-utils';
|
24
24
|
import { AddSelectFilter } from './AddSelectFilter';
|
25
|
+
import { AddSelectSort } from './AddSelectSort';
|
26
|
+
import { sortItems } from './add-select-utils';
|
27
|
+
import { useItemSort } from './hooks/useItemSort';
|
25
28
|
var componentName = 'AddSelect';
|
26
29
|
export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
27
30
|
var _cx;
|
28
31
|
|
29
32
|
var className = _ref.className,
|
30
33
|
clearFiltersText = _ref.clearFiltersText,
|
34
|
+
closeIconDescription = _ref.closeIconDescription,
|
31
35
|
columnInputPlaceholder = _ref.columnInputPlaceholder,
|
32
36
|
description = _ref.description,
|
33
37
|
globalFilters = _ref.globalFilters,
|
@@ -37,10 +41,14 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
37
41
|
globalFiltersSecondaryButtonText = _ref.globalFiltersSecondaryButtonText,
|
38
42
|
globalSearchLabel = _ref.globalSearchLabel,
|
39
43
|
globalSearchPlaceholder = _ref.globalSearchPlaceholder,
|
44
|
+
globalSortBy = _ref.globalSortBy,
|
40
45
|
influencerTitle = _ref.influencerTitle,
|
41
46
|
items = _ref.items,
|
42
47
|
itemsLabel = _ref.itemsLabel,
|
48
|
+
metaIconDescription = _ref.metaIconDescription,
|
49
|
+
metaPanelTitle = _ref.metaPanelTitle,
|
43
50
|
multi = _ref.multi,
|
51
|
+
navIconDescription = _ref.navIconDescription,
|
44
52
|
noResultsDescription = _ref.noResultsDescription,
|
45
53
|
noResultsTitle = _ref.noResultsTitle,
|
46
54
|
noSelectionDescription = _ref.noSelectionDescription,
|
@@ -103,6 +111,17 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
103
111
|
appliedGlobalFilters = _useState18[0],
|
104
112
|
setAppliedGlobalFilters = _useState18[1];
|
105
113
|
|
114
|
+
var _useState19 = useState({}),
|
115
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
116
|
+
displayMetalPanel = _useState20[0],
|
117
|
+
setDisplayMetaPanel = _useState20[1];
|
118
|
+
|
119
|
+
var _useItemSort = useItemSort(),
|
120
|
+
sortDirection = _useItemSort.sortDirection,
|
121
|
+
setSortDirection = _useItemSort.setSortDirection,
|
122
|
+
sortAttribute = _useItemSort.sortAttribute,
|
123
|
+
setSortAttribute = _useItemSort.setSortAttribute;
|
124
|
+
|
106
125
|
useEffect(function () {
|
107
126
|
var entries = items.entries; // flatItems is just a single array of all entries including children
|
108
127
|
|
@@ -192,6 +211,8 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
192
211
|
return results;
|
193
212
|
};
|
194
213
|
|
214
|
+
var sortFn = sortItems(sortAttribute, sortDirection);
|
215
|
+
|
195
216
|
var getDisplayItems = function getDisplayItems() {
|
196
217
|
if (useNormalizedItems) {
|
197
218
|
// when global search or filter is in use the results are not in column format
|
@@ -204,7 +225,7 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
204
225
|
return filters.every(function (filter) {
|
205
226
|
return item[filter] === appliedGlobalFilters[filter];
|
206
227
|
});
|
207
|
-
});
|
228
|
+
}).sort(sortFn);
|
208
229
|
return results;
|
209
230
|
}
|
210
231
|
|
@@ -217,13 +238,16 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
217
238
|
|
218
239
|
var itemsToDisplay = getDisplayItems();
|
219
240
|
var commonListProps = {
|
241
|
+
metaIconDescription: metaIconDescription,
|
220
242
|
multi: multi,
|
221
243
|
multiSelection: multiSelection,
|
244
|
+
navIconDescription: navIconDescription,
|
222
245
|
path: path,
|
223
246
|
setMultiSelection: setMultiSelection,
|
224
247
|
setPath: setPath,
|
225
248
|
setSingleSelection: setSingleSelection,
|
226
|
-
singleSelection: singleSelection
|
249
|
+
singleSelection: singleSelection,
|
250
|
+
setDisplayMetaPanel: setDisplayMetaPanel
|
227
251
|
}; // handlers
|
228
252
|
|
229
253
|
var handleSearch = function handleSearch(term) {
|
@@ -258,13 +282,17 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
258
282
|
portalTarget: portalTarget
|
259
283
|
};
|
260
284
|
var sidebarProps = {
|
285
|
+
closeIconDescription: closeIconDescription,
|
261
286
|
influencerTitle: influencerTitle,
|
262
287
|
items: flatItems,
|
288
|
+
metaPanelTitle: metaPanelTitle,
|
263
289
|
multiSelection: multiSelection,
|
264
290
|
noSelectionDescription: noSelectionDescription,
|
265
291
|
noSelectionTitle: noSelectionTitle,
|
266
292
|
removeIconDescription: removeIconDescription,
|
267
|
-
setMultiSelection: setMultiSelection
|
293
|
+
setMultiSelection: setMultiSelection,
|
294
|
+
displayMetalPanel: displayMetalPanel,
|
295
|
+
setDisplayMetaPanel: setDisplayMetaPanel
|
268
296
|
};
|
269
297
|
|
270
298
|
var setShowBreadsCrumbs = function setShowBreadsCrumbs() {
|
@@ -291,9 +319,11 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
291
319
|
return true;
|
292
320
|
};
|
293
321
|
|
322
|
+
var hasResults = itemsToDisplay.length > 0;
|
323
|
+
var globalFiltersApplied = Object.keys(appliedGlobalFilters).length > 0;
|
294
324
|
var showBreadsCrumbs = setShowBreadsCrumbs();
|
295
|
-
var
|
296
|
-
var
|
325
|
+
var showSort = (searchTerm || globalFiltersApplied) && hasResults;
|
326
|
+
var showTags = setShowTags(); // main content
|
297
327
|
|
298
328
|
var body = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
299
329
|
className: "".concat(blockClass, "__header")
|
@@ -313,6 +343,8 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
313
343
|
hasFiltersApplied: globalFiltersApplied,
|
314
344
|
clearFiltersText: clearFiltersText
|
315
345
|
}), /*#__PURE__*/React.createElement("div", {
|
346
|
+
className: "".concat(blockClass, "__sub-header")
|
347
|
+
}, /*#__PURE__*/React.createElement("div", {
|
316
348
|
className: "".concat(blockClass, "__tag-container")
|
317
349
|
}, showBreadsCrumbs ? /*#__PURE__*/React.createElement(AddSelectBreadcrumbs, {
|
318
350
|
itemsLabel: itemsLabel,
|
@@ -323,7 +355,14 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
323
355
|
}, searchTerm ? searchResultsLabel : itemsLabel), showTags && /*#__PURE__*/React.createElement(Tag, {
|
324
356
|
type: "gray",
|
325
357
|
size: "sm"
|
326
|
-
}, itemsToDisplay.length))
|
358
|
+
}, itemsToDisplay.length)), showSort && /*#__PURE__*/React.createElement(AddSelectSort, {
|
359
|
+
items: itemsToDisplay,
|
360
|
+
setSortAttribute: setSortAttribute,
|
361
|
+
setSortDirection: setSortDirection,
|
362
|
+
sortAttribute: sortAttribute,
|
363
|
+
sortDirection: sortDirection,
|
364
|
+
sortBy: globalSortBy
|
365
|
+
}))), useNormalizedItems && !searchTerm && !globalFiltersApplied ? /*#__PURE__*/React.createElement("div", {
|
327
366
|
className: "".concat(blockClass, "__columns")
|
328
367
|
}, itemsToDisplay.map(function (page, idx) {
|
329
368
|
var _path;
|
@@ -334,7 +373,7 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
334
373
|
header: idx === 0 ? itemsLabel : (_path = path[idx - 1]) === null || _path === void 0 ? void 0 : _path.title,
|
335
374
|
columnInputPlaceholder: columnInputPlaceholder
|
336
375
|
}));
|
337
|
-
})) : /*#__PURE__*/React.createElement("div", null,
|
376
|
+
})) : /*#__PURE__*/React.createElement("div", null, hasResults ? /*#__PURE__*/React.createElement(AddSelectList, _extends({}, commonListProps, {
|
338
377
|
filteredItems: itemsToDisplay,
|
339
378
|
modifiers: items === null || items === void 0 ? void 0 : items.modifiers
|
340
379
|
})) : /*#__PURE__*/React.createElement("div", {
|
@@ -353,6 +392,7 @@ export var AddSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
353
392
|
AddSelect.propTypes = {
|
354
393
|
className: PropTypes.string,
|
355
394
|
clearFiltersText: PropTypes.string,
|
395
|
+
closeIconDescription: PropTypes.string,
|
356
396
|
columnInputPlaceholder: PropTypes.string,
|
357
397
|
description: PropTypes.string,
|
358
398
|
globalFilters: PropTypes.arrayOf(PropTypes.shape({
|
@@ -365,6 +405,7 @@ AddSelect.propTypes = {
|
|
365
405
|
globalFiltersSecondaryButtonText: PropTypes.string,
|
366
406
|
globalSearchLabel: PropTypes.string,
|
367
407
|
globalSearchPlaceholder: PropTypes.string,
|
408
|
+
globalSortBy: PropTypes.array,
|
368
409
|
influencerTitle: PropTypes.string,
|
369
410
|
items: PropTypes.shape({
|
370
411
|
modifiers: PropTypes.shape({
|
@@ -382,13 +423,21 @@ AddSelect.propTypes = {
|
|
382
423
|
children: PropTypes.object,
|
383
424
|
icon: PropTypes.object,
|
384
425
|
id: PropTypes.string.isRequired,
|
426
|
+
meta: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.shape({
|
427
|
+
id: PropTypes.string,
|
428
|
+
title: PropTypes.string,
|
429
|
+
value: PropTypes.string
|
430
|
+
})), PropTypes.node]),
|
385
431
|
subtitle: PropTypes.string,
|
386
432
|
title: PropTypes.string.isRequired,
|
387
433
|
value: PropTypes.string.isRequired
|
388
434
|
}))
|
389
435
|
}),
|
390
436
|
itemsLabel: PropTypes.string,
|
437
|
+
metaIconDescription: PropTypes.string,
|
438
|
+
metaPanelTitle: PropTypes.string,
|
391
439
|
multi: PropTypes.bool,
|
440
|
+
navIconDescription: PropTypes.string,
|
392
441
|
noResultsDescription: PropTypes.string,
|
393
442
|
noResultsTitle: PropTypes.string,
|
394
443
|
noSelectionDescription: PropTypes.string,
|
@@ -11,14 +11,17 @@ var _excluded = ["columnInputPlaceholder", "filteredItems", "header", "multiSele
|
|
11
11
|
//
|
12
12
|
import React, { useState, useEffect } from 'react';
|
13
13
|
import PropTypes from 'prop-types';
|
14
|
-
import { TextInput, Tag, OverflowMenu,
|
15
|
-
import { Filter32
|
14
|
+
import { TextInput, Tag, OverflowMenu, Checkbox } from 'carbon-components-react';
|
15
|
+
import { Filter32 } from '@carbon/icons-react';
|
16
16
|
import { pkg, carbon } from '../../settings';
|
17
17
|
import { AddSelectList } from './AddSelectList';
|
18
|
+
import { AddSelectSort } from './AddSelectSort';
|
19
|
+
import { sortItems, getSortBy } from './add-select-utils';
|
20
|
+
import { useItemSort } from './hooks/useItemSort';
|
18
21
|
import uuidv4 from '../../global/js/utils/uuidv4';
|
19
22
|
var componentName = 'AddSelect';
|
20
23
|
export var AddSelectColumn = function AddSelectColumn(_ref) {
|
21
|
-
var _filteredItems$find
|
24
|
+
var _filteredItems$find;
|
22
25
|
|
23
26
|
var columnInputPlaceholder = _ref.columnInputPlaceholder,
|
24
27
|
filteredItems = _ref.filteredItems,
|
@@ -37,20 +40,16 @@ export var AddSelectColumn = function AddSelectColumn(_ref) {
|
|
37
40
|
searchTerm = _useState4[0],
|
38
41
|
setSearchTerm = _useState4[1];
|
39
42
|
|
40
|
-
var
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
var _useState7 = useState(''),
|
46
|
-
_useState8 = _slicedToArray(_useState7, 2),
|
47
|
-
sortAttribute = _useState8[0],
|
48
|
-
setSortAttribute = _useState8[1];
|
43
|
+
var _useItemSort = useItemSort(),
|
44
|
+
sortDirection = _useItemSort.sortDirection,
|
45
|
+
setSortDirection = _useItemSort.setSortDirection,
|
46
|
+
sortAttribute = _useItemSort.sortAttribute,
|
47
|
+
setSortAttribute = _useItemSort.setSortAttribute;
|
49
48
|
|
50
|
-
var
|
51
|
-
|
52
|
-
filters =
|
53
|
-
setFilters =
|
49
|
+
var _useState5 = useState([]),
|
50
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
51
|
+
filters = _useState6[0],
|
52
|
+
setFilters = _useState6[1];
|
54
53
|
|
55
54
|
var blockClass = "".concat(pkg.prefix, "--add-select");
|
56
55
|
var colClass = "".concat(blockClass, "__column");
|
@@ -59,39 +58,14 @@ export var AddSelectColumn = function AddSelectColumn(_ref) {
|
|
59
58
|
return multiSelection.includes(item.id);
|
60
59
|
});
|
61
60
|
setAllSelected(isAllSelected);
|
62
|
-
}, [filteredItems, multiSelection]); //
|
63
|
-
|
64
|
-
var
|
65
|
-
return item.sortBy;
|
66
|
-
})) === null || _filteredItems$find === void 0 ? void 0 : _filteredItems$find.sortBy;
|
67
|
-
var sortByOpts = colSortBy ? colSortBy.reduce(function (acc, cur) {
|
68
|
-
var opts = [{
|
69
|
-
id: "".concat(cur, "-asc"),
|
70
|
-
itemText: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ArrowUp16, null), cur),
|
71
|
-
direction: 'asc',
|
72
|
-
attribute: cur
|
73
|
-
}, {
|
74
|
-
id: "".concat(cur, "-desc"),
|
75
|
-
itemText: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ArrowDown16, null), cur),
|
76
|
-
direction: 'desc',
|
77
|
-
attribute: cur
|
78
|
-
}];
|
79
|
-
return [].concat(_toConsumableArray(acc), opts);
|
80
|
-
}, []) : []; // filtering
|
81
|
-
|
82
|
-
var colFilterBy = (_filteredItems$find2 = filteredItems.find(function (item) {
|
61
|
+
}, [filteredItems, multiSelection]); // filtering
|
62
|
+
|
63
|
+
var colFilterBy = (_filteredItems$find = filteredItems.find(function (item) {
|
83
64
|
return item.filterBy;
|
84
|
-
})) === null || _filteredItems$
|
65
|
+
})) === null || _filteredItems$find === void 0 ? void 0 : _filteredItems$find.filterBy;
|
85
66
|
var filterByOpts = colFilterBy ? filteredItems.map(function (item) {
|
86
67
|
return item[colFilterBy];
|
87
|
-
}) : [];
|
88
|
-
|
89
|
-
var sortHandler = function sortHandler(_ref2) {
|
90
|
-
var direction = _ref2.direction,
|
91
|
-
attribute = _ref2.attribute;
|
92
|
-
setSortAttribute(attribute);
|
93
|
-
setSortDirection(direction);
|
94
|
-
};
|
68
|
+
}) : [];
|
95
69
|
|
96
70
|
var selectAllHandler = function selectAllHandler(checked) {
|
97
71
|
var itemIds = filteredItems.map(function (item) {
|
@@ -138,22 +112,11 @@ export var AddSelectColumn = function AddSelectColumn(_ref) {
|
|
138
112
|
});
|
139
113
|
};
|
140
114
|
|
141
|
-
var
|
142
|
-
|
143
|
-
|
144
|
-
var valueA = (_a$sortAttribute = a[sortAttribute]) === null || _a$sortAttribute === void 0 ? void 0 : _a$sortAttribute.split(' ').join('');
|
145
|
-
var valueB = (_b$sortAttribute = b[sortAttribute]) === null || _b$sortAttribute === void 0 ? void 0 : _b$sortAttribute.split(' ').join('');
|
146
|
-
|
147
|
-
if (sortDirection === 'desc') {
|
148
|
-
return valueA > valueB ? -1 : 1;
|
149
|
-
}
|
150
|
-
|
151
|
-
return valueA < valueB ? -1 : 1;
|
152
|
-
};
|
153
|
-
|
115
|
+
var sortFn = sortItems(sortAttribute, sortDirection);
|
116
|
+
var sortBy = getSortBy(filteredItems);
|
154
117
|
var colItems = filteredItems.filter(filterBySearch) // first check if the item meets the search
|
155
118
|
.filter(filterByAttribute) // then check if the item is included in the filter
|
156
|
-
.sort(
|
119
|
+
.sort(sortFn); // then sort the items by whatever criteria
|
157
120
|
|
158
121
|
return /*#__PURE__*/React.createElement("div", {
|
159
122
|
className: colClass
|
@@ -171,19 +134,14 @@ export var AddSelectColumn = function AddSelectColumn(_ref) {
|
|
171
134
|
labelText: columnInputPlaceholder
|
172
135
|
}), /*#__PURE__*/React.createElement("div", {
|
173
136
|
className: "".concat(colClass, "-sort-filter")
|
174
|
-
},
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
onClick: function onClick() {
|
183
|
-
return sortHandler(opt);
|
184
|
-
}
|
185
|
-
});
|
186
|
-
})), filterByOpts.length > 0 && /*#__PURE__*/React.createElement(OverflowMenu, {
|
137
|
+
}, /*#__PURE__*/React.createElement(AddSelectSort, {
|
138
|
+
items: filteredItems,
|
139
|
+
setSortAttribute: setSortAttribute,
|
140
|
+
setSortDirection: setSortDirection,
|
141
|
+
sortAttribute: sortAttribute,
|
142
|
+
sortDirection: sortDirection,
|
143
|
+
sortBy: sortBy
|
144
|
+
}), filterByOpts.length > 0 && /*#__PURE__*/React.createElement(OverflowMenu, {
|
187
145
|
renderIcon: Filter32,
|
188
146
|
className: "".concat(colClass, "-overflow"),
|
189
147
|
flipped: true
|
@@ -88,7 +88,7 @@ export var AddSelectFilter = function AddSelectFilter(_ref) {
|
|
88
88
|
};
|
89
89
|
|
90
90
|
var showFilter = multi && (filterOpts === null || filterOpts === void 0 ? void 0 : filterOpts.length) > 0;
|
91
|
-
return /*#__PURE__*/React.createElement(
|
91
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
92
92
|
className: "".concat(blockClass, "-search")
|
93
93
|
}, /*#__PURE__*/React.createElement(TextInput, {
|
94
94
|
id: "temp-id",
|
@@ -107,7 +107,7 @@ export var AddSelectFilter = function AddSelectFilter(_ref) {
|
|
107
107
|
className: "".concat(blockClass, "-toggle"),
|
108
108
|
size: "md"
|
109
109
|
}), open && /*#__PURE__*/React.createElement("div", {
|
110
|
-
className:
|
110
|
+
className: blockClass
|
111
111
|
}, /*#__PURE__*/React.createElement("div", {
|
112
112
|
className: "".concat(blockClass, "-content")
|
113
113
|
}, /*#__PURE__*/React.createElement("p", null, "Filters"), /*#__PURE__*/React.createElement("div", {
|
@@ -7,8 +7,8 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
7
7
|
// LICENSE file in the root directory of this source tree.
|
8
8
|
//
|
9
9
|
import React from 'react';
|
10
|
-
import { Checkbox, RadioButton, StructuredListRow, StructuredListWrapper, StructuredListBody, StructuredListCell, Dropdown } from 'carbon-components-react';
|
11
|
-
import { ChevronRight16 } from '@carbon/icons-react';
|
10
|
+
import { Button, Checkbox, RadioButton, StructuredListRow, StructuredListWrapper, StructuredListBody, StructuredListCell, Dropdown } from 'carbon-components-react';
|
11
|
+
import { ChevronRight16, View16 } from '@carbon/icons-react';
|
12
12
|
import PropTypes from 'prop-types';
|
13
13
|
import cx from 'classnames';
|
14
14
|
import { UserProfileImage } from '../UserProfileImage';
|
@@ -16,10 +16,13 @@ import { pkg } from '../../settings';
|
|
16
16
|
var componentName = 'AddSelectList';
|
17
17
|
export var AddSelectList = function AddSelectList(_ref) {
|
18
18
|
var filteredItems = _ref.filteredItems,
|
19
|
+
metaIconDescription = _ref.metaIconDescription,
|
19
20
|
modifiers = _ref.modifiers,
|
20
21
|
multi = _ref.multi,
|
21
22
|
multiSelection = _ref.multiSelection,
|
23
|
+
navIconDescription = _ref.navIconDescription,
|
22
24
|
path = _ref.path,
|
25
|
+
setDisplayMetaPanel = _ref.setDisplayMetaPanel,
|
23
26
|
setMultiSelection = _ref.setMultiSelection,
|
24
27
|
setPath = _ref.setPath,
|
25
28
|
setSingleSelection = _ref.setSingleSelection,
|
@@ -169,7 +172,7 @@ export var AddSelectList = function AddSelectList(_ref) {
|
|
169
172
|
light: true,
|
170
173
|
label: modifiers === null || modifiers === void 0 ? void 0 : modifiers.label,
|
171
174
|
disabled: !isSelected(item.id),
|
172
|
-
className: "".concat(blockClass, "-dropdown")
|
175
|
+
className: "".concat(blockClass, "-dropdown ").concat(blockClass, "-hidden-hover")
|
173
176
|
})) : /*#__PURE__*/React.createElement(RadioButton, {
|
174
177
|
className: "".concat(blockClass, "-radio"),
|
175
178
|
name: "add-select-selections",
|
@@ -178,19 +181,42 @@ export var AddSelectList = function AddSelectList(_ref) {
|
|
178
181
|
labelText: item.title,
|
179
182
|
onChange: handleSingleSelection,
|
180
183
|
selected: item.value === singleSelection
|
181
|
-
}), item.children && /*#__PURE__*/React.createElement(
|
184
|
+
}), item.children && /*#__PURE__*/React.createElement(Button, {
|
185
|
+
renderIcon: ChevronRight16,
|
186
|
+
iconDescription: navIconDescription,
|
187
|
+
tooltipPosition: "left",
|
188
|
+
tooltipAlignment: "center",
|
189
|
+
hasIconOnly: true,
|
182
190
|
onClick: function onClick() {
|
183
191
|
return onNavigateItem(item);
|
184
|
-
}
|
185
|
-
|
192
|
+
},
|
193
|
+
kind: "ghost",
|
194
|
+
size: "sm"
|
195
|
+
}), item.meta && /*#__PURE__*/React.createElement("div", {
|
196
|
+
className: "".concat(blockClass, "-hidden-hover")
|
197
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
198
|
+
renderIcon: View16,
|
199
|
+
iconDescription: metaIconDescription,
|
200
|
+
tooltipPosition: "left",
|
201
|
+
tooltipAlignment: "center",
|
202
|
+
hasIconOnly: true,
|
203
|
+
onClick: function onClick() {
|
204
|
+
return setDisplayMetaPanel(item);
|
205
|
+
},
|
206
|
+
kind: "ghost",
|
207
|
+
size: "sm"
|
208
|
+
})))));
|
186
209
|
}))));
|
187
210
|
};
|
188
211
|
AddSelectList.propTypes = {
|
189
212
|
filteredItems: PropTypes.array,
|
213
|
+
metaIconDescription: PropTypes.string,
|
190
214
|
modifiers: PropTypes.object,
|
191
215
|
multi: PropTypes.bool,
|
192
216
|
multiSelection: PropTypes.array,
|
217
|
+
navIconDescription: PropTypes.string,
|
193
218
|
path: PropTypes.array,
|
219
|
+
setDisplayMetaPanel: PropTypes.func,
|
194
220
|
setMultiSelection: PropTypes.func,
|
195
221
|
setPath: PropTypes.func,
|
196
222
|
setSingleSelection: PropTypes.func,
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import React, { isValidElement } from 'react';
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
import { Close16 } from '@carbon/icons-react';
|
4
|
+
import { Button } from 'carbon-components-react';
|
5
|
+
import { pkg } from '../../settings';
|
6
|
+
var componentName = 'AddSelectMetaPanel';
|
7
|
+
export var AddSelectMetaPanel = function AddSelectMetaPanel(_ref) {
|
8
|
+
var closeIconDescription = _ref.closeIconDescription,
|
9
|
+
meta = _ref.meta,
|
10
|
+
setDisplayMetaPanel = _ref.setDisplayMetaPanel,
|
11
|
+
title = _ref.title;
|
12
|
+
var blockClass = "".concat(pkg.prefix, "--add-select__meta-panel");
|
13
|
+
|
14
|
+
var onCloseHandler = function onCloseHandler() {
|
15
|
+
setDisplayMetaPanel({});
|
16
|
+
};
|
17
|
+
|
18
|
+
return /*#__PURE__*/React.createElement("div", {
|
19
|
+
className: blockClass
|
20
|
+
}, /*#__PURE__*/React.createElement("div", {
|
21
|
+
className: "".concat(blockClass, "-header")
|
22
|
+
}, /*#__PURE__*/React.createElement("p", {
|
23
|
+
className: "".concat(blockClass, "-title")
|
24
|
+
}, title), /*#__PURE__*/React.createElement(Button, {
|
25
|
+
renderIcon: Close16,
|
26
|
+
iconDescription: closeIconDescription,
|
27
|
+
tooltipPosition: "left",
|
28
|
+
tooltipAlignment: "center",
|
29
|
+
hasIconOnly: true,
|
30
|
+
onClick: onCloseHandler,
|
31
|
+
kind: "ghost",
|
32
|
+
size: "sm"
|
33
|
+
})), /*#__PURE__*/isValidElement(meta) ? meta : meta.map(function (entry) {
|
34
|
+
return /*#__PURE__*/React.createElement("div", {
|
35
|
+
key: entry.id,
|
36
|
+
className: "".concat(blockClass, "-entry")
|
37
|
+
}, /*#__PURE__*/React.createElement("p", {
|
38
|
+
className: "".concat(blockClass, "-entry-title")
|
39
|
+
}, entry.title), /*#__PURE__*/React.createElement("p", {
|
40
|
+
className: "".concat(blockClass, "-entry-body")
|
41
|
+
}, entry.value));
|
42
|
+
}));
|
43
|
+
};
|
44
|
+
AddSelectMetaPanel.propTypes = {
|
45
|
+
closeIconDescription: PropTypes.string,
|
46
|
+
meta: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.shape({
|
47
|
+
id: PropTypes.string,
|
48
|
+
title: PropTypes.string,
|
49
|
+
value: PropTypes.string
|
50
|
+
})), PropTypes.node]),
|
51
|
+
setDisplayMetaPanel: PropTypes.func,
|
52
|
+
title: PropTypes.string
|
53
|
+
};
|
54
|
+
AddSelectMetaPanel.displayName = componentName;
|
@@ -12,14 +12,19 @@ import { SubtractAlt32 } from '@carbon/icons-react';
|
|
12
12
|
import PropTypes from 'prop-types';
|
13
13
|
import { NoDataEmptyState } from '../../components/EmptyStates/NoDataEmptyState';
|
14
14
|
import { pkg } from '../../settings';
|
15
|
+
import { AddSelectMetaPanel } from './AddSelectMetaPanel';
|
15
16
|
var componentName = 'AddSelectSidebar';
|
16
17
|
export var AddSelectSidebar = function AddSelectSidebar(_ref) {
|
17
|
-
var
|
18
|
+
var closeIconDescription = _ref.closeIconDescription,
|
19
|
+
displayMetalPanel = _ref.displayMetalPanel,
|
20
|
+
influencerTitle = _ref.influencerTitle,
|
18
21
|
items = _ref.items,
|
22
|
+
metaPanelTitle = _ref.metaPanelTitle,
|
19
23
|
multiSelection = _ref.multiSelection,
|
20
24
|
noSelectionDescription = _ref.noSelectionDescription,
|
21
25
|
noSelectionTitle = _ref.noSelectionTitle,
|
22
26
|
removeIconDescription = _ref.removeIconDescription,
|
27
|
+
setDisplayMetaPanel = _ref.setDisplayMetaPanel,
|
23
28
|
setMultiSelection = _ref.setMultiSelection;
|
24
29
|
var blockClass = "".concat(pkg.prefix, "--add-select__sidebar");
|
25
30
|
|
@@ -69,6 +74,15 @@ export var AddSelectSidebar = function AddSelectSidebar(_ref) {
|
|
69
74
|
}));
|
70
75
|
};
|
71
76
|
|
77
|
+
if (Object.keys(displayMetalPanel).length !== 0) {
|
78
|
+
return /*#__PURE__*/React.createElement(AddSelectMetaPanel, {
|
79
|
+
closeIconDescription: closeIconDescription,
|
80
|
+
meta: displayMetalPanel.meta,
|
81
|
+
setDisplayMetaPanel: setDisplayMetaPanel,
|
82
|
+
title: metaPanelTitle
|
83
|
+
});
|
84
|
+
}
|
85
|
+
|
72
86
|
return /*#__PURE__*/React.createElement("div", {
|
73
87
|
className: blockClass
|
74
88
|
}, /*#__PURE__*/React.createElement("div", {
|
@@ -103,12 +117,16 @@ export var AddSelectSidebar = function AddSelectSidebar(_ref) {
|
|
103
117
|
})));
|
104
118
|
};
|
105
119
|
AddSelectSidebar.propTypes = {
|
120
|
+
closeIconDescription: PropTypes.string,
|
121
|
+
displayMetalPanel: PropTypes.object,
|
106
122
|
influencerTitle: PropTypes.string,
|
107
123
|
items: PropTypes.array,
|
124
|
+
metaPanelTitle: PropTypes.string,
|
108
125
|
multiSelection: PropTypes.array,
|
109
126
|
noSelectionDescription: PropTypes.string,
|
110
127
|
noSelectionTitle: PropTypes.string,
|
111
128
|
removeIconDescription: PropTypes.string,
|
129
|
+
setDisplayMetaPanel: PropTypes.func,
|
112
130
|
setMultiSelection: PropTypes.func
|
113
131
|
};
|
114
132
|
AddSelectSidebar.displayName = componentName;
|
@@ -0,0 +1,61 @@
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
2
|
+
//
|
3
|
+
// Copyright IBM Corp. 2022
|
4
|
+
//
|
5
|
+
// This source code is licensed under the Apache-2.0 license found in the
|
6
|
+
// LICENSE file in the root directory of this source tree.
|
7
|
+
//
|
8
|
+
import React from 'react';
|
9
|
+
import PropTypes from 'prop-types';
|
10
|
+
import { OverflowMenu, OverflowMenuItem } from 'carbon-components-react';
|
11
|
+
import { ArrowsVertical32, ArrowUp16, ArrowDown16 } from '@carbon/icons-react';
|
12
|
+
import { pkg } from '../../settings';
|
13
|
+
var componentName = 'AddSelect';
|
14
|
+
export var AddSelectSort = function AddSelectSort(_ref) {
|
15
|
+
var setSortAttribute = _ref.setSortAttribute,
|
16
|
+
setSortDirection = _ref.setSortDirection,
|
17
|
+
sortBy = _ref.sortBy;
|
18
|
+
var blockClass = "".concat(pkg.prefix, "--add-select-sort");
|
19
|
+
var sortByOpts = sortBy ? sortBy.reduce(function (acc, cur) {
|
20
|
+
var opts = [{
|
21
|
+
id: "".concat(cur, "-asc"),
|
22
|
+
itemText: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ArrowUp16, null), cur),
|
23
|
+
direction: 'asc',
|
24
|
+
attribute: cur
|
25
|
+
}, {
|
26
|
+
id: "".concat(cur, "-desc"),
|
27
|
+
itemText: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ArrowDown16, null), cur),
|
28
|
+
direction: 'desc',
|
29
|
+
attribute: cur
|
30
|
+
}];
|
31
|
+
return [].concat(_toConsumableArray(acc), opts);
|
32
|
+
}, []) : []; // handlers
|
33
|
+
|
34
|
+
var sortHandler = function sortHandler(_ref2) {
|
35
|
+
var direction = _ref2.direction,
|
36
|
+
attribute = _ref2.attribute;
|
37
|
+
setSortAttribute(attribute);
|
38
|
+
setSortDirection(direction);
|
39
|
+
};
|
40
|
+
|
41
|
+
return /*#__PURE__*/React.createElement("div", {
|
42
|
+
className: blockClass
|
43
|
+
}, sortByOpts.length > 0 && /*#__PURE__*/React.createElement(OverflowMenu, {
|
44
|
+
renderIcon: ArrowsVertical32,
|
45
|
+
flipped: true
|
46
|
+
}, sortByOpts.map(function (opt) {
|
47
|
+
return /*#__PURE__*/React.createElement(OverflowMenuItem, {
|
48
|
+
key: opt.id,
|
49
|
+
itemText: opt.itemText,
|
50
|
+
onClick: function onClick() {
|
51
|
+
return sortHandler(opt);
|
52
|
+
}
|
53
|
+
});
|
54
|
+
})));
|
55
|
+
};
|
56
|
+
AddSelectSort.propTypes = {
|
57
|
+
setSortAttribute: PropTypes.func,
|
58
|
+
setSortDirection: PropTypes.func,
|
59
|
+
sortBy: PropTypes.array
|
60
|
+
};
|
61
|
+
AddSelectSort.displayName = componentName;
|
@@ -91,4 +91,25 @@ export var getGlobalFilterValues = function getGlobalFilterValues(globalFilters,
|
|
91
91
|
return prevFilter;
|
92
92
|
}, []);
|
93
93
|
return filterOpts;
|
94
|
+
};
|
95
|
+
export var sortItems = function sortItems(attribute, direction) {
|
96
|
+
return function (a, b) {
|
97
|
+
var _a$attribute, _b$attribute;
|
98
|
+
|
99
|
+
var valueA = (_a$attribute = a[attribute]) === null || _a$attribute === void 0 ? void 0 : _a$attribute.split(' ').join('');
|
100
|
+
var valueB = (_b$attribute = b[attribute]) === null || _b$attribute === void 0 ? void 0 : _b$attribute.split(' ').join('');
|
101
|
+
|
102
|
+
if (direction === 'desc') {
|
103
|
+
return valueA > valueB ? -1 : 1;
|
104
|
+
}
|
105
|
+
|
106
|
+
return valueA < valueB ? -1 : 1;
|
107
|
+
};
|
108
|
+
};
|
109
|
+
export var getSortBy = function getSortBy(items) {
|
110
|
+
var _items$find;
|
111
|
+
|
112
|
+
return (_items$find = items.find(function (item) {
|
113
|
+
return item.sortBy;
|
114
|
+
})) === null || _items$find === void 0 ? void 0 : _items$find.sortBy;
|
94
115
|
};
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
2
|
+
import { useState } from 'react';
|
3
|
+
export var useItemSort = function useItemSort() {
|
4
|
+
var _useState = useState(''),
|
5
|
+
_useState2 = _slicedToArray(_useState, 2),
|
6
|
+
sortDirection = _useState2[0],
|
7
|
+
setSortDirection = _useState2[1];
|
8
|
+
|
9
|
+
var _useState3 = useState(''),
|
10
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
11
|
+
sortAttribute = _useState4[0],
|
12
|
+
setSortAttribute = _useState4[1];
|
13
|
+
|
14
|
+
return {
|
15
|
+
sortDirection: sortDirection,
|
16
|
+
setSortDirection: setSortDirection,
|
17
|
+
sortAttribute: sortAttribute,
|
18
|
+
setSortAttribute: setSortAttribute
|
19
|
+
};
|
20
|
+
};
|