@carbon/ibm-products
Version:
Carbon for IBM Products
81 lines (76 loc) • 2.55 kB
JavaScript
/**
* Copyright IBM Corp. 2020, 2025
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/
import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
import React__default from 'react';
import PropTypes from '../../_virtual/index.js';
import { OverflowMenu, OverflowMenuItem } from '@carbon/react';
import { ArrowUp, ArrowDown, ArrowsVertical } from '@carbon/react/icons';
import { pkg } from '../../settings.js';
var _ArrowUp, _ArrowDown;
const blockClass = `${pkg.prefix}--add-select-sort`;
const componentName = 'AddSelectSort';
const AddSelectSort = _ref => {
let {
setSortAttribute,
setSortDirection,
sortBy,
sortByLabel
} = _ref;
const sortByOpts = sortBy ? sortBy?.reduce((acc, cur) => {
const opts = [{
id: `${cur}-asc`,
itemText: /*#__PURE__*/React__default.createElement(React__default.Fragment, null, _ArrowUp || (_ArrowUp = /*#__PURE__*/React__default.createElement(ArrowUp, {
size: 16
})), cur),
direction: 'asc',
attribute: cur
}, {
id: `${cur}-desc`,
itemText: /*#__PURE__*/React__default.createElement(React__default.Fragment, null, _ArrowDown || (_ArrowDown = /*#__PURE__*/React__default.createElement(ArrowDown, {
size: 16
})), cur),
direction: 'desc',
attribute: cur
}];
return [...acc, ...opts];
}, []) : [];
// handlers
const sortHandler = _ref2 => {
let {
direction,
attribute
} = _ref2;
setSortAttribute?.(attribute);
setSortDirection?.(direction);
};
return /*#__PURE__*/React__default.createElement("div", {
className: blockClass
}, sortByOpts.length > 0 && /*#__PURE__*/React__default.createElement(OverflowMenu, {
renderIcon: props => /*#__PURE__*/React__default.createElement(ArrowsVertical, _extends({
size: 32
}, props)),
className: `${blockClass}_overflow`,
flipped: true,
"aria-label": sortByLabel,
iconDescription: sortByLabel
}, sortByOpts.map(opt => {
return /*#__PURE__*/React__default.createElement(OverflowMenuItem, {
className: `${blockClass}_overflow-item`,
key: opt?.id,
itemText: opt?.itemText,
onClick: () => sortHandler(opt)
});
})));
};
AddSelectSort.propTypes = {
setSortAttribute: PropTypes.func,
setSortDirection: PropTypes.func,
sortBy: PropTypes.array,
sortByLabel: PropTypes.string
};
AddSelectSort.displayName = componentName;
export { AddSelectSort };