PluginProbe
Elementor Website Builder – more than just a page builder / 3.8.0-beta1
Elementor Website Builder – more than just a page builder v3.8.0-beta1
4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 All 457 releases
elementor / app / modules / kit-library / assets / js / components / search-input.js

search-input.js in Elementor Website Builder – more than just a page builder 3.8.0-beta1, at app/modules/kit-library/assets/js/components/search-input.js

56 lines 1.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import useDebouncedCallback from '../hooks/use-debounced-callback';
2 import { Icon, Button } from '@elementor/app-ui';
3 import { useState, useEffect } from 'react';
4
5 import './search-input.scss';
6
7 export default function SearchInput( props ) {
8 const [ localValue, setLocalValue ] = useState( props.value || '' );
9 const debouncedOnChange = useDebouncedCallback( ( value ) => props.onChange( value ), props.debounceTimeout );
10
11 useEffect( () => {
12 if ( props.value !== localValue ) {
13 setLocalValue( props.value );
14 }
15 }, [ props.value ] );
16
17 return (
18 <div className={ `eps-search-input__container ${ props.className }` }>
19 <input
20 className={ `eps-search-input eps-search-input--${ props.size }` }
21 placeholder={ props.placeholder }
22 value={ localValue }
23 onChange={ ( e ) => {
24 setLocalValue( e.target.value );
25 debouncedOnChange( e.target.value );
26 } }
27 />
28 <Icon className={ `eicon-search-bold eps-search-input__icon eps-search-input__icon--${ props.size }` } />
29 {
30 props.value &&
31 <Button
32 text={ __( 'Clear', 'elementor' ) }
33 hideText={ true }
34 className={ `eicon-close-circle eps-search-input__clear-icon eps-search-input__clear-icon--${ props.size }` }
35 onClick={ () => props.onChange( '' ) }
36 />
37 }
38 </div>
39 );
40 }
41
42 SearchInput.propTypes = {
43 placeholder: PropTypes.string,
44 value: PropTypes.string.isRequired,
45 onChange: PropTypes.func.isRequired,
46 className: PropTypes.string,
47 size: PropTypes.oneOf( [ 'md', 'sm' ] ),
48 debounceTimeout: PropTypes.number,
49 };
50
51 SearchInput.defaultProps = {
52 className: '',
53 size: 'md',
54 debounceTimeout: 300,
55 };
56