UNPKG

@wordpress/components

Version:
139 lines (116 loc) 3.65 kB
"use strict"; 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