@wordpress/components
Version:
UI components for WordPress.
81 lines (68 loc) • 2.42 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = UnitSelectControl;
var _element = require("@wordpress/element");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _lodash = require("lodash");
var _classnames = _interopRequireDefault(require("classnames"));
var _unitControlStyles = require("./styles/unit-control-styles");
var _utils = require("./utils");
/**
* External dependencies
*/
/**
* Internal dependencies
*/
/**
* Renders a `select` if there are multiple units.
* Otherwise, renders a non-selectable label.
*
* @param {Object} props Component props.
* @param {string} [props.className] Class to set on the `select` element.
* @param {boolean} [props.isTabbable=true] Whether the control can be focused via keyboard navigation.
* @param {Array} [props.options=CSS_UNITS] Available units to select from.
* @param {Function} [props.onChange=noop] A callback function invoked when the value is changed.
* @param {string} [props.size="default"] Size of the control option. Supports "default" and "small".
* @param {string} [props.value="px"] Current unit.
*/
function UnitSelectControl({
className,
isTabbable = true,
options = _utils.CSS_UNITS,
onChange = _lodash.noop,
size = 'default',
value = 'px',
...props
}) {
if (!(0, _utils.hasUnits)(options)) {
return (0, _element.createElement)(_unitControlStyles.UnitLabel, {
className: "components-unit-control__unit-label",
size: size
}, value);
}
const handleOnChange = event => {
const {
value: unitValue
} = event.target;
const data = options.find(option => option.value === unitValue);
onChange(unitValue, {
event,
data
});
};
const classes = (0, _classnames.default)('components-unit-control__select', className);
return (0, _element.createElement)(_unitControlStyles.UnitSelect, (0, _extends2.default)({
className: classes,
onChange: handleOnChange,
size: size,
tabIndex: isTabbable ? null : '-1',
value: value
}, props), options.map(option => (0, _element.createElement)("option", {
value: option.value,
key: option.value
}, option.label)));
}
//# sourceMappingURL=unit-select-control.js.map