in source/app/components/SearchBar/SearchBar.js [53:141]
function SearchBar({
className,
dispatch,
searchQuery,
searchPersona,
light,
suggestions,
placeholder,
}) {
const searchBarClassNames = classNames(css.searchBar, className);
const [hasTerm, setHasTerm] = useState(!!searchQuery);
const handleClearClick = useCallback(() => {
dispatch(clearSearchQuery());
input.current.value = "";
}, [dispatch]);
useEffect(() => {
dispatch(clearSearchQuery());
// eslint-disable-next-line
}, []);
const input = useRef();
const handleSubmit = useCallback((e) => {
e.preventDefault();
dispatch(setSearchQuery(input.current.value));
dispatch(setSearchPersona(undefined))
input.current.blur();
}, []);
const searchValueChange = useCallback((e) => {
setHasTerm(!!e.target.value);
}, []);
useEffect(() => {
input.current.value = searchQuery;
searchValueChange({ target: { value: searchQuery } });
}, [searchQuery]);
const selectSuggestion = useCallback(
(q) => {
dispatch(setSearchQuery(q));
dispatch(setSearchPersona(undefined))
},
[dispatch]
);
return (
<form className={searchBarClassNames} onSubmit={handleSubmit}>
<div className={css.wrapper}>
<FormInput
ref={input}
light={light}
type="search"
className={css.search}
placeholder={placeholder || "Search..."}
defaultValue={searchQuery}
onChange={searchValueChange}
/>
{hasTerm ? (
<Button
type="button"
simple
palette="black"
className={css.clear}
onClick={handleClearClick}
>
<svg
height="24"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<path d="m12 10.5857864 5.2928932-5.29289318c.3905243-.39052429 1.0236893-.39052429 1.4142136 0s.3905243 1.02368927 0 1.41421356l-5.2928932 5.29289322 5.2928932 5.2928932c.3905243.3905243.3905243 1.0236893 0 1.4142136s-1.0236893.3905243-1.4142136 0l-5.2928932-5.2928932-5.29289322 5.2928932c-.39052429.3905243-1.02368927.3905243-1.41421356 0s-.39052429-1.0236893 0-1.4142136l5.29289318-5.2928932-5.29289318-5.29289322c-.39052429-.39052429-.39052429-1.02368927 0-1.41421356s1.02368927-.39052429 1.41421356 0z" />
</svg>
</Button>
) : null}
{suggestions ? (
<div className={css.suggestions}>
<ul>
{suggestions.map((q) => (
<li key={q} onClick={() => selectSuggestion(q)}>
{q}
</li>
))}
</ul>
</div>
) : null}