@wordpress/components
Version:
UI components for WordPress.
130 lines (110 loc) • 3.52 kB
JavaScript
;
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