import React from "react"; import { IoSearch } from "react-icons/io5"; import { searchSong } from "../../helpers"; import { Song } from "../../types/song"; import * as Styled from "./index.styled"; interface Props { currentTry: number; setSelectedSong: React.Dispatch>; } export function Search({ currentTry, setSelectedSong }: Props) { const [value, setValue] = React.useState(""); const [results, setResults] = React.useState([]); React.useEffect(() => { let cancelled = false; async function runSearch() { if (!value) { setResults([]); return; } const songs = await searchSong(value); if (!cancelled) { setResults(songs); } } runSearch(); return () => { cancelled = true; }; }, [value]); // clear value on selection React.useEffect(() => { setValue(""); }, [currentTry]); return ( {results.map((song) => ( { setSelectedSong(song); setValue(`${song.artist} - ${song.name}`); setResults([]); }} > {song.artist} - {song.name} ))} setValue(e.currentTarget.value)} placeholder="Search" value={value} /> ); }