import { useRef, useState } from 'react' import * as cheerio from 'cheerio' import Album from './Album' import type { AlbumRow } from 'utils/types' import { politeFetch, searchAlbums } from 'utils/search' import Loader from './Loader' export default function Downloader() { const [loading, setLoading] = useState(false) const [results, setResults] = useState([]) const [lastQuery, setLastQuery] = useState(null) const lastReqRef = useRef(Date.now()) async function handleSearch(ev: React.FormEvent) { ev.preventDefault() setLoading(true) const formData = new FormData(ev.target as HTMLFormElement) const query = formData.get('query') as string try { const uniqueAlbums = await searchAlbums(query, lastReqRef) setResults(uniqueAlbums) } catch (error) { // handle error } finally { setLoading(false) setLastQuery(query) } } return ( <>
{!loading && lastQuery ? (
{results.length > 0 ? ( {`Found ${results.length} ${results.length === 1 ? 'album' : 'albums'}`} ) : (
No albums found for "{lastQuery}"
)}
) : null}
{results.map((r) => ( ))}
) }