import React, { useCallback, useRef, useState, useEffect } from 'react'; import classNames from 'classnames'; import ExitIcon from '@moda/icons/exit-20'; import SearchIcon from '@moda/icons/search-20'; import { TextInput, TextInputProps } from '../TextInput'; import { Clickable } from '../Clickable'; import './SearchInput.scss'; const SEARCH_ICON_DEFAULT_SIZE = 20; export type SearchInputProps = TextInputProps & { value?: string; onClear?(): void; roundBorders?: boolean; noBorders?: boolean; searchIconSize?: number; }; const DEFAULT_INPUT_VALUE = ''; export const SearchInput: React.FC = ({ className, onChange, onClear, roundBorders = false, noBorders = false, value = DEFAULT_INPUT_VALUE, searchIconSize = SEARCH_ICON_DEFAULT_SIZE, ...rest }) => { const ref = useRef(null); const [controlledValue, setValue] = useState(value); const handleClear = useCallback(() => { setValue(DEFAULT_INPUT_VALUE); onChange?.(DEFAULT_INPUT_VALUE); onClear?.(); ref.current?.focus(); }, [onClear, onChange]); const handleChange = useCallback( (value: string) => { onChange?.(value); setValue(value); }, [onChange, setValue] ); useEffect(() => setValue(value), [value]); return (
{controlledValue && ( )}
); };