UNPKG

@wordpress/components

Version:
130 lines (110 loc) 3.52 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.SearchControl = void 0; var _element = require("@wordpress/element"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _classnames = _interopRequireDefault(require("classnames")); var _compose = require("@wordpress/compose"); var _i18n = require("@wordpress/i18n"); var _icons = require("@wordpress/icons"); var _button = _interopRequireDefault(require("../button")); var _baseControl = _interopRequireDefault(require("../base-control")); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function UnforwardedSearchControl(_ref, forwardedRef) { let { __nextHasNoMarginBottom, className, onChange, onKeyDown, value, label, placeholder = (0, _i18n.__)('Search'), hideLabelFromVision = true, help, onClose, ...restProps } = _ref; const searchRef = (0, _element.useRef)(); const instanceId = (0, _compose.useInstanceId)(SearchControl); const id = `components-search-control-${instanceId}`; const renderRightButton = () => { if (onClose) { return (0, _element.createElement)(_button.default, { icon: _icons.closeSmall, label: (0, _i18n.__)('Close search'), onClick: onClose }); } if (!!value) { return (0, _element.createElement)(_button.default, { icon: _icons.closeSmall, label: (0, _i18n.__)('Reset search'), onClick: () => { var _searchRef$current; onChange(''); (_searchRef$current = searchRef.current) === null || _searchRef$current === void 0 ? void 0 : _searchRef$current.focus(); } }); } return (0, _element.createElement)(_icons.Icon, { icon: _icons.search }); }; return (0, _element.createElement)(_baseControl.default, { __nextHasNoMarginBottom: __nextHasNoMarginBottom, label: label, id: id, hideLabelFromVision: hideLabelFromVision, help: help, className: (0, _classnames.default)(className, 'components-search-control') }, (0, _element.createElement)("div", { className: "components-search-control__input-wrapper" }, (0, _element.createElement)("input", (0, _extends2.default)({}, restProps, { ref: (0, _compose.useMergeRefs)([searchRef, forwardedRef]), className: "components-search-control__input", id: id, type: "search", placeholder: placeholder, onChange: event => onChange(event.target.value), onKeyDown: onKeyDown, autoComplete: "off", value: value || '' })), (0, _element.createElement)("div", { className: "components-search-control__icon" }, renderRightButton()))); } /** * SearchControl components let users display a search control. * * ```jsx * import { SearchControl } from '@wordpress/components'; * import { useState } from '@wordpress/element'; * * function MySearchControl( { className, setState } ) { * const [ searchInput, setSearchInput ] = useState( '' ); * * return ( * <SearchControl * value={ searchInput } * onChange={ setSearchInput } * /> * ); * } * ``` */ const SearchControl = (0, _element.forwardRef)(UnforwardedSearchControl); exports.SearchControl = SearchControl; var _default = SearchControl; exports.default = _default; //# sourceMappingURL=index.js.map