@coreui/react-pro
Version:
UI Components Library for React.js
67 lines (63 loc) • 3.22 kB
JavaScript
;
var tslib_es6 = require('../../node_modules/tslib/tslib.es6.js');
var React = require('react');
var PropTypes = require('prop-types');
var index = require('../../_virtual/index.js');
var useChipSet = require('./useChipSet.js');
require('@popperjs/core');
var useForkedRef = require('../../hooks/useForkedRef.js');
const itemValue = (item) => typeof item === 'string' ? item : item.value;
const CChipSet = React.forwardRef((_a, ref) => {
var { ariaRemoveLabel, as: Component = 'div', children, chips, className, defaultChips, defaultSelected, disabled, filter, onKeyDown, onRemove, onSelect, removable, removeIcon, selectable, selected, selectedIcon, selectionMode } = _a, rest = tslib_es6.__rest(_a, ["ariaRemoveLabel", "as", "children", "chips", "className", "defaultChips", "defaultSelected", "disabled", "filter", "onKeyDown", "onRemove", "onSelect", "removable", "removeIcon", "selectable", "selected", "selectedIcon", "selectionMode"]);
// The chip list is controlled by `chips` (or children) or, with `defaultChips`,
// uncontrolled — then the set owns the list and removes chips itself.
const isUncontrolledList = chips === undefined && defaultChips !== undefined;
const [_chips, setChips] = React.useState(defaultChips !== null && defaultChips !== void 0 ? defaultChips : []);
const { rootRef, handleKeyDown, renderChips, renderChipsFromData } = useChipSet.useChipSet({
ariaRemoveLabel,
defaultSelected,
disabled,
filter,
removable,
removeIcon,
selectable,
selected,
selectedIcon,
selectionMode,
onRemoveChip: (value) => {
if (isUncontrolledList) {
setChips((prev) => prev.filter((item) => itemValue(item) !== value));
}
onRemove === null || onRemove === void 0 ? void 0 : onRemove(value);
},
onSelectionChange: onSelect,
});
const forkedRef = useForkedRef.useForkedRef(ref, rootRef);
const items = chips !== null && chips !== void 0 ? chips : (isUncontrolledList ? _chips : undefined);
return (React.createElement(Component, Object.assign({ className: index.default('chip-set', { disabled }, className) }, (disabled && { 'aria-disabled': true }), { onKeyDown: (event) => {
handleKeyDown(event);
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
} }, rest, { ref: forkedRef }), items ? renderChipsFromData(items) : renderChips(children)));
});
CChipSet.propTypes = {
ariaRemoveLabel: PropTypes.string,
as: PropTypes.elementType,
children: PropTypes.node,
chips: PropTypes.array,
className: PropTypes.string,
defaultChips: PropTypes.array,
defaultSelected: PropTypes.array,
disabled: PropTypes.bool,
filter: PropTypes.bool,
onRemove: PropTypes.func,
onSelect: PropTypes.func,
removable: PropTypes.bool,
removeIcon: PropTypes.node,
selectable: PropTypes.bool,
selected: PropTypes.array,
selectedIcon: PropTypes.node,
selectionMode: PropTypes.oneOf(['single', 'multiple']),
};
CChipSet.displayName = 'CChipSet';
exports.CChipSet = CChipSet;
//# sourceMappingURL=CChipSet.js.map