import useDebouncedCallback from '../hooks/use-debounced-callback'; import { Icon, Button } from '@elementor/app-ui'; import { useState, useEffect } from 'react'; import './search-input.scss'; export default function SearchInput( props ) { const [ localValue, setLocalValue ] = useState( props.value || '' ); const debouncedOnChange = useDebouncedCallback( ( value ) => props.onChange( value ), props.debounceTimeout ); useEffect( () => { if ( props.value !== localValue ) { setLocalValue( props.value ); } }, [ props.value ] ); return (
{ setLocalValue( e.target.value ); debouncedOnChange( e.target.value ); } } /> { props.value &&
); } SearchInput.propTypes = { placeholder: PropTypes.string, value: PropTypes.string.isRequired, onChange: PropTypes.func.isRequired, className: PropTypes.string, size: PropTypes.oneOf( [ 'md', 'sm' ] ), debounceTimeout: PropTypes.number, }; SearchInput.defaultProps = { className: '', size: 'md', debounceTimeout: 300, };