prometheus
36 строк · 1.1 Кб
1import React, { ChangeEvent, FC, useEffect } from 'react';
2import { Input, InputGroup, InputGroupAddon, InputGroupText } from 'reactstrap';
3import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
4import { faSearch } from '@fortawesome/free-solid-svg-icons';
5
6export interface SearchBarProps {
7handleChange: (e: string) => void;
8placeholder: string;
9defaultValue: string;
10}
11
12const SearchBar: FC<SearchBarProps> = ({ handleChange, placeholder, defaultValue }) => {
13let filterTimeout: NodeJS.Timeout;
14
15const handleSearchChange = (e: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => {
16clearTimeout(filterTimeout);
17filterTimeout = setTimeout(() => {
18handleChange(e.target.value);
19}, 300);
20};
21
22useEffect(() => {
23handleChange(defaultValue);
24}, [defaultValue, handleChange]);
25
26return (
27<InputGroup>
28<InputGroupAddon addonType="prepend">
29<InputGroupText>{<FontAwesomeIcon icon={faSearch} />}</InputGroupText>
30</InputGroupAddon>
31<Input autoFocus onChange={handleSearchChange} placeholder={placeholder} defaultValue={defaultValue} />
32</InputGroup>
33);
34};
35
36export default SearchBar;
37