@wordpress/components
Version:
UI components for WordPress.
139 lines (116 loc) • 3.65 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _element = require("@wordpress/element");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _lodash = require("lodash");
var _classnames = _interopRequireDefault(require("classnames"));
var _compose = require("@wordpress/compose");
var _icons = require("@wordpress/icons");
var _baseControl = _interopRequireDefault(require("../base-control"));
var _inputBase = _interopRequireDefault(require("../input-control/input-base"));
var _selectControlStyles = require("./styles/select-control-styles");
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
function useUniqueId(idProp) {
const instanceId = (0, _compose.useInstanceId)(SelectControl);
const id = `inspector-select-control-${instanceId}`;
return idProp || id;
}
function SelectControl({
className,
disabled = false,
help,
hideLabelFromVision,
id: idProp,
label,
multiple = false,
onBlur = _lodash.noop,
onChange = _lodash.noop,
onFocus = _lodash.noop,
options = [],
size = 'default',
value: valueProp,
labelPosition = 'top',
...props
}, ref) {
const [isFocused, setIsFocused] = (0, _element.useState)(false);
const id = useUniqueId(idProp);
const helpId = help ? `${id}__help` : undefined; // Disable reason: A select with an onchange throws a warning
if ((0, _lodash.isEmpty)(options)) return null;
const handleOnBlur = event => {
onBlur(event);
setIsFocused(false);
};
const handleOnFocus = event => {
onFocus(event);
setIsFocused(true);
};
const handleOnChange = event => {
if (multiple) {
const selectedOptions = [...event.target.options].filter(({
selected
}) => selected);
const newValues = selectedOptions.map(({
value
}) => value);
onChange(newValues);
return;
}
onChange(event.target.value, {
event
});
};
const classes = (0, _classnames.default)('components-select-control', className);
/* eslint-disable jsx-a11y/no-onchange */
return (0, _element.createElement)(_baseControl.default, {
help: help
}, (0, _element.createElement)(_inputBase.default, (0, _extends2.default)({
className: classes,
disabled: disabled,
hideLabelFromVision: hideLabelFromVision,
id: id,
isFocused: isFocused,
label: label,
size: size,
suffix: (0, _element.createElement)(_selectControlStyles.DownArrowWrapper, null, (0, _element.createElement)(_icons.Icon, {
icon: _icons.chevronDown,
size: 18
})),
labelPosition: labelPosition
}, props), (0, _element.createElement)(_selectControlStyles.Select, (0, _extends2.default)({}, props, {
"aria-describedby": helpId,
className: "components-select-control__input",
disabled: disabled,
id: id,
multiple: multiple,
onBlur: handleOnBlur,
onChange: handleOnChange,
onFocus: handleOnFocus,
ref: ref,
size: size,
value: valueProp
}), options.map((option, index) => {
const key = option.id || `${option.label}-${option.value}-${index}`;
return (0, _element.createElement)("option", {
key: key,
value: option.value,
disabled: option.disabled
}, option.label);
}))));
/* eslint-enable jsx-a11y/no-onchange */
}
const ForwardedComponent = (0, _element.forwardRef)(SelectControl);
var _default = ForwardedComponent;
exports.default = _default;
//# sourceMappingURL=index.js.map