prometheus/web/ui/react-app/src/components/SearchBar.tsx

37 lines
1.1 KiB
TypeScript
Raw Normal View History

2022-04-26 12:20:48 -07:00
import React, { ChangeEvent, FC, useEffect } from 'react';
import { Input, InputGroup, InputGroupAddon, InputGroupText } from 'reactstrap';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faSearch } from '@fortawesome/free-solid-svg-icons';
export interface SearchBarProps {
2022-04-26 12:20:48 -07:00
handleChange: (e: string) => void;
placeholder: string;
2022-04-26 12:20:48 -07:00
defaultValue: string;
}
2022-04-26 12:20:48 -07:00
const SearchBar: FC<SearchBarProps> = ({ handleChange, placeholder, defaultValue }) => {
let filterTimeout: NodeJS.Timeout;
const handleSearchChange = (e: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => {
clearTimeout(filterTimeout);
filterTimeout = setTimeout(() => {
2022-04-26 12:20:48 -07:00
handleChange(e.target.value);
}, 300);
};
2022-04-26 12:20:48 -07:00
useEffect(() => {
handleChange(defaultValue);
}, [defaultValue, handleChange]);
return (
<InputGroup>
<InputGroupAddon addonType="prepend">
<InputGroupText>{<FontAwesomeIcon icon={faSearch} />}</InputGroupText>
</InputGroupAddon>
2022-04-26 12:20:48 -07:00
<Input autoFocus onChange={handleSearchChange} placeholder={placeholder} defaultValue={defaultValue} />
</InputGroup>
);
};
export default SearchBar;