@carbon/ibm-products 1.62.1 → 1.63.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 +8 -0
- 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-released-only.css +4 -0
- package/css/index-without-carbon-released-only.css.map +1 -1
- package/css/index-without-carbon-released-only.min.css +1 -1
- package/css/index-without-carbon-released-only.min.css.map +1 -1
- package/css/index-without-carbon.css +8 -0
- 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 +8 -0
- 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/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +4 -3
- package/es/components/Datagrid/utils/handleFilterTagLabelText.js +26 -0
- package/es/components/FilterSummary/FilterSummary.js +21 -7
- package/es/components/TagSet/TagSet.js +22 -5
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +4 -3
- package/lib/components/Datagrid/utils/handleFilterTagLabelText.js +33 -0
- package/lib/components/FilterSummary/FilterSummary.js +23 -6
- package/lib/components/TagSet/TagSet.js +21 -4
- package/package.json +3 -3
- package/scss/components/FilterSummary/_filter-summary.scss +6 -1
@@ -0,0 +1,26 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright IBM Corp. 2023, 2023
|
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
|
+
|
8
|
+
// Example usage for custom filter tag labels, in practice this
|
9
|
+
// is where a translation service would be utilized. This
|
10
|
+
// utility is for storybook demonstration purposes only.
|
11
|
+
export var handleFilterTagLabelText = function handleFilterTagLabelText(key, value) {
|
12
|
+
switch (key) {
|
13
|
+
case 'role':
|
14
|
+
return "Role: ".concat(value);
|
15
|
+
case 'joined':
|
16
|
+
return "Joined: ".concat(value);
|
17
|
+
case 'visits':
|
18
|
+
return "Visits: ".concat(value);
|
19
|
+
case 'passwordStrength':
|
20
|
+
return "Password strength: ".concat(value);
|
21
|
+
case 'status':
|
22
|
+
return "Status: ".concat(value);
|
23
|
+
default:
|
24
|
+
return "".concat(key, ": ").concat(value);
|
25
|
+
}
|
26
|
+
};
|
@@ -4,19 +4,21 @@ var _excluded = ["key", "value"];
|
|
4
4
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
5
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
6
|
/**
|
7
|
-
* Copyright IBM Corp. 2022,
|
7
|
+
* Copyright IBM Corp. 2022, 2023
|
8
8
|
*
|
9
9
|
* This source code is licensed under the Apache-2.0 license found in the
|
10
10
|
* LICENSE file in the root directory of this source tree.
|
11
11
|
*/
|
12
12
|
import { Button } from 'carbon-components-react';
|
13
|
-
import React from 'react';
|
13
|
+
import React, { useRef } from 'react';
|
14
14
|
import PropTypes from 'prop-types';
|
15
15
|
import cx from 'classnames';
|
16
16
|
import { TagSet } from '../TagSet';
|
17
17
|
import { pkg } from '../../settings';
|
18
|
+
import uuidv4 from '../../global/js/utils/uuidv4';
|
18
19
|
var blockClass = "".concat(pkg.prefix, "--filter-summary");
|
19
20
|
var FilterSummary = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
21
|
+
var _filterSummaryClearBu;
|
20
22
|
var _ref$className = _ref.className,
|
21
23
|
className = _ref$className === void 0 ? '' : _ref$className,
|
22
24
|
_ref$clearFiltersText = _ref.clearFiltersText,
|
@@ -28,7 +30,10 @@ var FilterSummary = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
28
30
|
_ref$renderLabel = _ref.renderLabel,
|
29
31
|
renderLabel = _ref$renderLabel === void 0 ? null : _ref$renderLabel,
|
30
32
|
_ref$overflowType = _ref.overflowType,
|
31
|
-
overflowType = _ref$overflowType === void 0 ? 'default' : _ref$overflowType
|
33
|
+
overflowType = _ref$overflowType === void 0 ? 'default' : _ref$overflowType,
|
34
|
+
_ref$clearButtonInlin = _ref.clearButtonInline,
|
35
|
+
clearButtonInline = _ref$clearButtonInlin === void 0 ? true : _ref$clearButtonInlin;
|
36
|
+
var filterSummaryId = "".concat(blockClass, "__").concat(uuidv4());
|
32
37
|
var tagFilters = filters.map(function (_ref2) {
|
33
38
|
var _renderLabel;
|
34
39
|
var key = _ref2.key,
|
@@ -39,26 +44,35 @@ var FilterSummary = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
39
44
|
label: (_renderLabel = renderLabel === null || renderLabel === void 0 ? void 0 : renderLabel(key, value)) !== null && _renderLabel !== void 0 ? _renderLabel : "".concat(key, ": ").concat(value)
|
40
45
|
});
|
41
46
|
});
|
47
|
+
var filterSummaryClearButton = useRef();
|
48
|
+
var filterSummaryRef = useRef();
|
49
|
+
var localRef = filterSummaryRef || ref;
|
42
50
|
return /*#__PURE__*/React.createElement("div", {
|
43
|
-
ref:
|
44
|
-
className: cx([blockClass, className])
|
51
|
+
ref: localRef,
|
52
|
+
className: cx([blockClass, className]),
|
53
|
+
id: filterSummaryId
|
45
54
|
}, /*#__PURE__*/React.createElement(TagSet, {
|
46
55
|
allTagsModalSearchLabel: "Search all tags",
|
47
56
|
allTagsModalSearchPlaceholderText: "Search all tags",
|
48
57
|
allTagsModalTitle: "All tags",
|
49
58
|
showAllTagsLabel: "View all tags",
|
50
59
|
tags: tagFilters,
|
51
|
-
overflowType: overflowType
|
60
|
+
overflowType: overflowType,
|
61
|
+
className: cx(_defineProperty({}, "".concat(blockClass, "__clear-button-inline"), clearButtonInline)),
|
62
|
+
containingElementRef: localRef,
|
63
|
+
measurementOffset: filterSummaryClearButton === null || filterSummaryClearButton === void 0 ? void 0 : (_filterSummaryClearBu = filterSummaryClearButton.current) === null || _filterSummaryClearBu === void 0 ? void 0 : _filterSummaryClearBu.offsetWidth
|
52
64
|
}), /*#__PURE__*/React.createElement(Button, {
|
53
65
|
kind: "ghost",
|
54
66
|
size: "sm",
|
55
|
-
onClick: clearFilters
|
67
|
+
onClick: clearFilters,
|
68
|
+
ref: filterSummaryClearButton
|
56
69
|
}, clearFiltersText));
|
57
70
|
});
|
58
71
|
var componentName = 'FilterSummary';
|
59
72
|
FilterSummary.displayName = componentName;
|
60
73
|
FilterSummary.propTypes = {
|
61
74
|
className: PropTypes.string,
|
75
|
+
clearButtonInline: PropTypes.boolean,
|
62
76
|
clearFilters: PropTypes.func.isRequired,
|
63
77
|
clearFiltersText: PropTypes.string,
|
64
78
|
filters: PropTypes.arrayOf(PropTypes.object).isRequired,
|
@@ -2,13 +2,13 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
import _extends from "@babel/runtime/helpers/extends";
|
3
3
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
4
4
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
5
|
-
var _excluded = ["align", "allTagsModalTarget", "className", "maxVisible", "multiline", "overflowAlign", "overflowClassName", "overflowType", "overflowDirection", "allTagsModalTitle", "allTagsModalSearchLabel", "allTagsModalSearchPlaceholderText", "showAllTagsLabel", "tags"],
|
5
|
+
var _excluded = ["align", "allTagsModalTarget", "className", "maxVisible", "multiline", "overflowAlign", "overflowClassName", "overflowType", "overflowDirection", "allTagsModalTitle", "allTagsModalSearchLabel", "allTagsModalSearchPlaceholderText", "showAllTagsLabel", "tags", "containingElementRef", "measurementOffset"],
|
6
6
|
_excluded2 = ["label", "id"],
|
7
7
|
_excluded3 = ["label"];
|
8
8
|
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; }
|
9
9
|
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; }
|
10
10
|
//
|
11
|
-
// Copyright IBM Corp. 2020,
|
11
|
+
// Copyright IBM Corp. 2020, 2023
|
12
12
|
//
|
13
13
|
// This source code is licensed under the Apache-2.0 license found in the
|
14
14
|
// LICENSE file in the root directory of this source tree.
|
@@ -33,6 +33,7 @@ var allTagsModalSearchThreshold = 10;
|
|
33
33
|
var defaults = {
|
34
34
|
align: 'start',
|
35
35
|
// allTagsModalTarget: document.body,
|
36
|
+
measurementOffset: 0,
|
36
37
|
overflowAlign: 'center',
|
37
38
|
overflowDirection: 'bottom',
|
38
39
|
overflowType: 'default'
|
@@ -56,6 +57,9 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
56
57
|
allTagsModalSearchPlaceholderText = _ref.allTagsModalSearchPlaceholderText,
|
57
58
|
showAllTagsLabel = _ref.showAllTagsLabel,
|
58
59
|
tags = _ref.tags,
|
60
|
+
containingElementRef = _ref.containingElementRef,
|
61
|
+
_ref$measurementOffse = _ref.measurementOffset,
|
62
|
+
measurementOffset = _ref$measurementOffse === void 0 ? defaults.measurementOffset : _ref$measurementOffse,
|
59
63
|
rest = _objectWithoutProperties(_ref, _excluded);
|
60
64
|
var _useState = useState(3),
|
61
65
|
_useState2 = _slicedToArray(_useState, 2),
|
@@ -160,7 +164,9 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
160
164
|
// how many will fit?
|
161
165
|
var willFit = 0;
|
162
166
|
if (sizingTags.length > 0) {
|
163
|
-
var
|
167
|
+
var optionalContainingElement = containingElementRef === null || containingElementRef === void 0 ? void 0 : containingElementRef.current;
|
168
|
+
var measurementOffsetValue = typeof measurementOffset === 'number' ? measurementOffset : 0;
|
169
|
+
var spaceAvailable = optionalContainingElement ? optionalContainingElement.offsetWidth - measurementOffsetValue : tagSetRef.current.offsetWidth;
|
164
170
|
for (var i in sizingTags) {
|
165
171
|
var tagWidth = sizingTags[i].offsetWidth;
|
166
172
|
if (spaceAvailable >= tagWidth) {
|
@@ -183,7 +189,7 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
183
189
|
} else {
|
184
190
|
setDisplayCount(maxVisible ? Math.min(willFit, maxVisible) : willFit);
|
185
191
|
}
|
186
|
-
}, [maxVisible, multiline, sizingTags, tagSetRef]);
|
192
|
+
}, [maxVisible, multiline, sizingTags, tagSetRef, containingElementRef, measurementOffset]);
|
187
193
|
useEffect(function () {
|
188
194
|
checkFullyVisibleTags();
|
189
195
|
}, [checkFullyVisibleTags, maxVisible, multiline, sizingTags]);
|
@@ -205,7 +211,8 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
205
211
|
setShowAllModalOpen(false);
|
206
212
|
};
|
207
213
|
useResizeObserver(sizingContainerRef, handleSizerTagsResize);
|
208
|
-
|
214
|
+
var resizeOption = containingElementRef ? containingElementRef : tagSetRef;
|
215
|
+
useResizeObserver(resizeOption, handleResize);
|
209
216
|
return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
|
210
217
|
className: cx([blockClass, className]),
|
211
218
|
ref: tagSetRef
|
@@ -284,10 +291,20 @@ TagSet.propTypes = {
|
|
284
291
|
* className
|
285
292
|
*/
|
286
293
|
className: PropTypes.string,
|
294
|
+
/**
|
295
|
+
* Optional ref for custom resize container to measure available space
|
296
|
+
* Default will measure the available space of the TagSet container itself.
|
297
|
+
*/
|
298
|
+
containingElementRef: PropTypes.object,
|
287
299
|
/**
|
288
300
|
* maximum visible tags
|
289
301
|
*/
|
290
302
|
maxVisible: PropTypes.number,
|
303
|
+
/**
|
304
|
+
* Specify offset amount for measure available space, only used when `containingElementSelector`
|
305
|
+
* is also provided
|
306
|
+
*/
|
307
|
+
measurementOffset: PropTypes.number,
|
291
308
|
/**
|
292
309
|
* display tags in multiple lines
|
293
310
|
*/
|
@@ -53,7 +53,7 @@ var useFilters = function useFilters(_ref) {
|
|
53
53
|
/** Methods */
|
54
54
|
// If the user decides to cancel or click outside the flyout, it reverts back to the filters that were
|
55
55
|
// there when they opened the flyout
|
56
|
-
var revertToPreviousFilters = function
|
56
|
+
var revertToPreviousFilters = (0, _react.useCallback)(function () {
|
57
57
|
setFiltersState(JSON.parse(prevFiltersRef.current));
|
58
58
|
setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
|
59
59
|
setAllFilters(JSON.parse(lastAppliedFilters.current));
|
@@ -63,7 +63,7 @@ var useFilters = function useFilters(_ref) {
|
|
63
63
|
holdingPrevFiltersRef.current = JSON.parse(prevFiltersRef.current);
|
64
64
|
holdingLastAppliedFiltersRef.current = JSON.parse(prevFiltersObjectArrayRef.current);
|
65
65
|
holdingPrevFiltersObjectArrayRef.current = JSON.parse(lastAppliedFilters.current);
|
66
|
-
};
|
66
|
+
}, [setAllFilters]);
|
67
67
|
var reset = (0, _react.useCallback)(function () {
|
68
68
|
// When we reset we want the "initialFilters" to be an empty array
|
69
69
|
var resetFiltersArray = [];
|
@@ -317,6 +317,7 @@ var useFilters = function useFilters(_ref) {
|
|
317
317
|
*/
|
318
318
|
(0, _react.useEffect)(function () {
|
319
319
|
if (!panelOpen && previousState !== null && previousState !== void 0 && previousState.panelOpen) {
|
320
|
+
revertToPreviousFilters();
|
320
321
|
setAllFilters(holdingLastAppliedFiltersRef.current);
|
321
322
|
}
|
322
323
|
if (panelOpen && !(previousState !== null && previousState !== void 0 && previousState.panelOpen)) {
|
@@ -326,7 +327,7 @@ var useFilters = function useFilters(_ref) {
|
|
326
327
|
setAllFilters(JSON.parse(prevFiltersObjectArrayRef.current));
|
327
328
|
}
|
328
329
|
}
|
329
|
-
}, [panelOpen, previousState, previousState === null || previousState === void 0 ? void 0 : previousState.panelOpen, reset, setAllFilters]);
|
330
|
+
}, [panelOpen, previousState, previousState === null || previousState === void 0 ? void 0 : previousState.panelOpen, reset, setAllFilters, revertToPreviousFilters]);
|
330
331
|
var cancel = function cancel() {
|
331
332
|
// Reverting to previous filters only applies when using batch actions
|
332
333
|
if (updateMethod === _constants.BATCH) {
|
@@ -0,0 +1,33 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.handleFilterTagLabelText = void 0;
|
7
|
+
/**
|
8
|
+
* Copyright IBM Corp. 2023, 2023
|
9
|
+
*
|
10
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
11
|
+
* LICENSE file in the root directory of this source tree.
|
12
|
+
*/
|
13
|
+
|
14
|
+
// Example usage for custom filter tag labels, in practice this
|
15
|
+
// is where a translation service would be utilized. This
|
16
|
+
// utility is for storybook demonstration purposes only.
|
17
|
+
var handleFilterTagLabelText = function handleFilterTagLabelText(key, value) {
|
18
|
+
switch (key) {
|
19
|
+
case 'role':
|
20
|
+
return "Role: ".concat(value);
|
21
|
+
case 'joined':
|
22
|
+
return "Joined: ".concat(value);
|
23
|
+
case 'visits':
|
24
|
+
return "Visits: ".concat(value);
|
25
|
+
case 'passwordStrength':
|
26
|
+
return "Password strength: ".concat(value);
|
27
|
+
case 'status':
|
28
|
+
return "Status: ".concat(value);
|
29
|
+
default:
|
30
|
+
return "".concat(key, ": ").concat(value);
|
31
|
+
}
|
32
|
+
};
|
33
|
+
exports.handleFilterTagLabelText = handleFilterTagLabelText;
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
5
6
|
value: true
|
6
7
|
});
|
@@ -8,16 +9,20 @@ exports.default = void 0;
|
|
8
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
9
10
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
10
11
|
var _carbonComponentsReact = require("carbon-components-react");
|
11
|
-
var _react =
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
12
13
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
13
14
|
var _classnames = _interopRequireDefault(require("classnames"));
|
14
15
|
var _TagSet = require("../TagSet");
|
15
16
|
var _settings = require("../../settings");
|
17
|
+
var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
|
16
18
|
var _excluded = ["key", "value"];
|
19
|
+
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); }
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
17
21
|
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; }
|
18
22
|
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) { (0, _defineProperty2.default)(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; }
|
19
23
|
var blockClass = "".concat(_settings.pkg.prefix, "--filter-summary");
|
20
24
|
var FilterSummary = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
25
|
+
var _filterSummaryClearBu;
|
21
26
|
var _ref$className = _ref.className,
|
22
27
|
className = _ref$className === void 0 ? '' : _ref$className,
|
23
28
|
_ref$clearFiltersText = _ref.clearFiltersText,
|
@@ -29,7 +34,10 @@ var FilterSummary = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
|
|
29
34
|
_ref$renderLabel = _ref.renderLabel,
|
30
35
|
renderLabel = _ref$renderLabel === void 0 ? null : _ref$renderLabel,
|
31
36
|
_ref$overflowType = _ref.overflowType,
|
32
|
-
overflowType = _ref$overflowType === void 0 ? 'default' : _ref$overflowType
|
37
|
+
overflowType = _ref$overflowType === void 0 ? 'default' : _ref$overflowType,
|
38
|
+
_ref$clearButtonInlin = _ref.clearButtonInline,
|
39
|
+
clearButtonInline = _ref$clearButtonInlin === void 0 ? true : _ref$clearButtonInlin;
|
40
|
+
var filterSummaryId = "".concat(blockClass, "__").concat((0, _uuidv.default)());
|
33
41
|
var tagFilters = filters.map(function (_ref2) {
|
34
42
|
var _renderLabel;
|
35
43
|
var key = _ref2.key,
|
@@ -40,26 +48,35 @@ var FilterSummary = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
|
|
40
48
|
label: (_renderLabel = renderLabel === null || renderLabel === void 0 ? void 0 : renderLabel(key, value)) !== null && _renderLabel !== void 0 ? _renderLabel : "".concat(key, ": ").concat(value)
|
41
49
|
});
|
42
50
|
});
|
51
|
+
var filterSummaryClearButton = (0, _react.useRef)();
|
52
|
+
var filterSummaryRef = (0, _react.useRef)();
|
53
|
+
var localRef = filterSummaryRef || ref;
|
43
54
|
return /*#__PURE__*/_react.default.createElement("div", {
|
44
|
-
ref:
|
45
|
-
className: (0, _classnames.default)([blockClass, className])
|
55
|
+
ref: localRef,
|
56
|
+
className: (0, _classnames.default)([blockClass, className]),
|
57
|
+
id: filterSummaryId
|
46
58
|
}, /*#__PURE__*/_react.default.createElement(_TagSet.TagSet, {
|
47
59
|
allTagsModalSearchLabel: "Search all tags",
|
48
60
|
allTagsModalSearchPlaceholderText: "Search all tags",
|
49
61
|
allTagsModalTitle: "All tags",
|
50
62
|
showAllTagsLabel: "View all tags",
|
51
63
|
tags: tagFilters,
|
52
|
-
overflowType: overflowType
|
64
|
+
overflowType: overflowType,
|
65
|
+
className: (0, _classnames.default)((0, _defineProperty2.default)({}, "".concat(blockClass, "__clear-button-inline"), clearButtonInline)),
|
66
|
+
containingElementRef: localRef,
|
67
|
+
measurementOffset: filterSummaryClearButton === null || filterSummaryClearButton === void 0 ? void 0 : (_filterSummaryClearBu = filterSummaryClearButton.current) === null || _filterSummaryClearBu === void 0 ? void 0 : _filterSummaryClearBu.offsetWidth
|
53
68
|
}), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
|
54
69
|
kind: "ghost",
|
55
70
|
size: "sm",
|
56
|
-
onClick: clearFilters
|
71
|
+
onClick: clearFilters,
|
72
|
+
ref: filterSummaryClearButton
|
57
73
|
}, clearFiltersText));
|
58
74
|
});
|
59
75
|
var componentName = 'FilterSummary';
|
60
76
|
FilterSummary.displayName = componentName;
|
61
77
|
FilterSummary.propTypes = {
|
62
78
|
className: _propTypes.default.string,
|
79
|
+
clearButtonInline: _propTypes.default.boolean,
|
63
80
|
clearFilters: _propTypes.default.func.isRequired,
|
64
81
|
clearFiltersText: _propTypes.default.string,
|
65
82
|
filters: _propTypes.default.arrayOf(_propTypes.default.object).isRequired,
|
@@ -21,7 +21,7 @@ var _useResizeObserver = require("../../global/js/hooks/useResizeObserver");
|
|
21
21
|
var _devtools = require("../../global/js/utils/devtools");
|
22
22
|
var _propsHelper = require("../../global/js/utils/props-helper");
|
23
23
|
var _settings = require("../../settings");
|
24
|
-
var _excluded = ["align", "allTagsModalTarget", "className", "maxVisible", "multiline", "overflowAlign", "overflowClassName", "overflowType", "overflowDirection", "allTagsModalTitle", "allTagsModalSearchLabel", "allTagsModalSearchPlaceholderText", "showAllTagsLabel", "tags"],
|
24
|
+
var _excluded = ["align", "allTagsModalTarget", "className", "maxVisible", "multiline", "overflowAlign", "overflowClassName", "overflowType", "overflowDirection", "allTagsModalTitle", "allTagsModalSearchLabel", "allTagsModalSearchPlaceholderText", "showAllTagsLabel", "tags", "containingElementRef", "measurementOffset"],
|
25
25
|
_excluded2 = ["label", "id"],
|
26
26
|
_excluded3 = ["label"];
|
27
27
|
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); }
|
@@ -36,6 +36,7 @@ var allTagsModalSearchThreshold = 10;
|
|
36
36
|
var defaults = {
|
37
37
|
align: 'start',
|
38
38
|
// allTagsModalTarget: document.body,
|
39
|
+
measurementOffset: 0,
|
39
40
|
overflowAlign: 'center',
|
40
41
|
overflowDirection: 'bottom',
|
41
42
|
overflowType: 'default'
|
@@ -59,6 +60,9 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
59
60
|
allTagsModalSearchPlaceholderText = _ref.allTagsModalSearchPlaceholderText,
|
60
61
|
showAllTagsLabel = _ref.showAllTagsLabel,
|
61
62
|
tags = _ref.tags,
|
63
|
+
containingElementRef = _ref.containingElementRef,
|
64
|
+
_ref$measurementOffse = _ref.measurementOffset,
|
65
|
+
measurementOffset = _ref$measurementOffse === void 0 ? defaults.measurementOffset : _ref$measurementOffse,
|
62
66
|
rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
63
67
|
var _useState = (0, _react.useState)(3),
|
64
68
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
@@ -163,7 +167,9 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
163
167
|
// how many will fit?
|
164
168
|
var willFit = 0;
|
165
169
|
if (sizingTags.length > 0) {
|
166
|
-
var
|
170
|
+
var optionalContainingElement = containingElementRef === null || containingElementRef === void 0 ? void 0 : containingElementRef.current;
|
171
|
+
var measurementOffsetValue = typeof measurementOffset === 'number' ? measurementOffset : 0;
|
172
|
+
var spaceAvailable = optionalContainingElement ? optionalContainingElement.offsetWidth - measurementOffsetValue : tagSetRef.current.offsetWidth;
|
167
173
|
for (var i in sizingTags) {
|
168
174
|
var tagWidth = sizingTags[i].offsetWidth;
|
169
175
|
if (spaceAvailable >= tagWidth) {
|
@@ -186,7 +192,7 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
186
192
|
} else {
|
187
193
|
setDisplayCount(maxVisible ? Math.min(willFit, maxVisible) : willFit);
|
188
194
|
}
|
189
|
-
}, [maxVisible, multiline, sizingTags, tagSetRef]);
|
195
|
+
}, [maxVisible, multiline, sizingTags, tagSetRef, containingElementRef, measurementOffset]);
|
190
196
|
(0, _react.useEffect)(function () {
|
191
197
|
checkFullyVisibleTags();
|
192
198
|
}, [checkFullyVisibleTags, maxVisible, multiline, sizingTags]);
|
@@ -208,7 +214,8 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
208
214
|
setShowAllModalOpen(false);
|
209
215
|
};
|
210
216
|
(0, _useResizeObserver.useResizeObserver)(sizingContainerRef, handleSizerTagsResize);
|
211
|
-
|
217
|
+
var resizeOption = containingElementRef ? containingElementRef : tagSetRef;
|
218
|
+
(0, _useResizeObserver.useResizeObserver)(resizeOption, handleResize);
|
212
219
|
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
|
213
220
|
className: (0, _classnames.default)([blockClass, className]),
|
214
221
|
ref: tagSetRef
|
@@ -289,10 +296,20 @@ TagSet.propTypes = {
|
|
289
296
|
* className
|
290
297
|
*/
|
291
298
|
className: _propTypes.default.string,
|
299
|
+
/**
|
300
|
+
* Optional ref for custom resize container to measure available space
|
301
|
+
* Default will measure the available space of the TagSet container itself.
|
302
|
+
*/
|
303
|
+
containingElementRef: _propTypes.default.object,
|
292
304
|
/**
|
293
305
|
* maximum visible tags
|
294
306
|
*/
|
295
307
|
maxVisible: _propTypes.default.number,
|
308
|
+
/**
|
309
|
+
* Specify offset amount for measure available space, only used when `containingElementSelector`
|
310
|
+
* is also provided
|
311
|
+
*/
|
312
|
+
measurementOffset: _propTypes.default.number,
|
296
313
|
/**
|
297
314
|
* display tags in multiple lines
|
298
315
|
*/
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@carbon/ibm-products",
|
3
3
|
"description": "Carbon for IBM Products",
|
4
|
-
"version": "1.
|
4
|
+
"version": "1.63.0",
|
5
5
|
"license": "Apache-2.0",
|
6
6
|
"main": "lib/index.js",
|
7
7
|
"module": "es/index.js",
|
@@ -92,10 +92,10 @@
|
|
92
92
|
"@carbon/themes": "^10.55.3",
|
93
93
|
"@carbon/type": "^10.45.3",
|
94
94
|
"carbon-components": "^10.58.12",
|
95
|
-
"carbon-components-react": "^7.59.
|
95
|
+
"carbon-components-react": "^7.59.17",
|
96
96
|
"carbon-icons": "^7.0.7",
|
97
97
|
"react": "^16.8.6 || ^17.0.1",
|
98
98
|
"react-dom": "^16.8.6 || ^17.0.1"
|
99
99
|
},
|
100
|
-
"gitHead": "
|
100
|
+
"gitHead": "2fe150f0f2374e506659d44f2c4a616ef7c4f2b0"
|
101
101
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
//
|
2
|
-
// Copyright IBM Corp. 2022
|
2
|
+
// Copyright IBM Corp. 2022, 2023
|
3
3
|
//
|
4
4
|
// This source code is licensed under the Apache-2.0 license found in the
|
5
5
|
// LICENSE file in the root directory of this source tree.
|
@@ -17,3 +17,8 @@ $block-class: #{$pkg-prefix}--filter-summary;
|
|
17
17
|
border-top: 1px solid $ui-03;
|
18
18
|
background: $ui-01;
|
19
19
|
}
|
20
|
+
|
21
|
+
.#{$block-class}
|
22
|
+
.#{$pkg-prefix}--tag-set.#{$pkg-prefix}--tag-set.#{$block-class}__clear-button-inline {
|
23
|
+
width: auto;
|
24
|
+
}
|