import React, {Fragment, useEffect, useState} from "react"; import queryString from "query-string"; import {searchArtist, searchDisc, searchSong} from "../services/search_service"; import {SearchBar} from "./SearchBar"; import {Paginate} from "./Paginate"; import {Link} from "react-router-dom"; import {Tab, TabList, TabPanel, Tabs} from "react-tabs"; import {ReactComponent as DiscSVG} from "../svg/disc.svg"; const CoverArt = (props) => { const [loading, setLoading] = useState(true); const handleLoad = () => setLoading(false) if (props.cover_art) { if (loading) { return ( {props.alt} ) } else { return {props.alt}/ } } else { return } } const SearchPlaceholder = (props) => { return ( {[...Array(10)].map((e, i) =>
  • )} ) } const SearchSong = (props) => { const song = props.song; return (
  • {song.title} {song.artist[0].name}
  • ) } const SearchSongs = (props) => { const [songs, setSongs] = useState(null); const [paginate, setPaginate] = useState(null); const [page, setPage] = useState(props.page ? props.page : 1); useEffect(() => { setSongs(null); setPaginate(null); loadSongs(props.query, page) }, [props.query, page]); const makeLink = page => `/search/song?query=${props.query}&page=${page}`; const handlePageChange = page => { setSongs(null); setPage(page); props.onPageChange(page); } const loadSongs = (query, page) => { page = page ? page : 1; searchSong(query, page).then((response) => { setSongs(response.recordings); setPaginate(response.paginate); }) }; let songsComponent = ; if (songs) { songsComponent = songs.map((song) => ); } let paginateComponent; if (paginate) { const total = paginate.total; const currentPage = paginate.current_page; const pageLimit = paginate.per_page; paginateComponent = } return (
      {songsComponent}
    {paginateComponent}
    ) } const SearchDisc = (props) => { const disc = props.disc; return (
  • {disc.title} {disc.artist[0].name}
  • ) } const SearchDiscs = (props) => { const [discs, setDiscs] = useState(null); const [paginate, setPaginate] = useState(null); const [page, setPage] = useState(null); useEffect(_ => { setDiscs(null) setPaginate(null) loadDiscs(props.query, page) }, [props.query, page]) const makeLink = page => `/search/disc?query=${props.query}&page=${page}`; const handlePageChange = page => { setDiscs(null); setPage(page); props.onPageChange(page); } const loadDiscs = (query, page) => { page = page ? page : 1; searchDisc(query, page).then((response) => { setDiscs(response.discs); setPaginate(response.paginate); }) }; let discsComponent = ; if (discs) { discsComponent = discs.map((disc) => ); } let paginateComponent; if (paginate) { const total = paginate.total; const currentPage = paginate.current_page; const pageLimit = paginate.per_page; paginateComponent = } return (
      {discsComponent}
    {paginateComponent}
    ) } const SearchArtist = (props) => { const artist = props.artist; return (
  • {artist.name} {[artist.type, artist.country].filter(Boolean).join(' - ')}
  • ) } const SearchArtists = (props) => { const [artists, setArtist] = useState(null); const [paginate, setPaginate] = useState(null); const [page, setPage] = useState(props.page ? props.page : 1); useEffect(_ => { setArtist(null) setPaginate(null) loadArtists(props.query, page) }, [props.query, page]) const makeLink = page => `/search/artist?query=${props.query}&page=${page}`; const handlePageChange = page => { setArtist(null); setPage(page); props.onPageChange(page); } const loadArtists = (query, page) => { page = page ? page : 1; searchArtist(query, page).then((response) => { setArtist(response.artists); setPaginate(response.paginate); }) }; let artistsContent = ; if (artists) { artistsContent = artists.map((artist) => ); } let paginateContent; if (paginate) { const total = paginate.total; const currentPage = paginate.current_page; const pageLimit = paginate.per_page; paginateContent = } return (
      {artistsContent}
    {paginateContent}
    ) } const SearchTabs = (props) => { const nameToIndex = (name) => { if (name === 'artist') return 0 if (name === 'disc') return 1 if (name === 'song') return 2 else return 0; } const indexToName = (index) => { if (index === 0) return 'artist' if (index === 1) return 'disc' if (index === 2) return 'song' else return 'artist'; } const handleSelect = (index) => { props.onTabChanged(indexToName(index)) } const handlePageChange = (who) => (index) => props.onPageChange(who, index); return ( Artistas Discos Canciones ) } export const Search = (props) => { const parsedParams = queryString.parse(props.location.search); const [who, setWho] = useState(props.match.params['who'] ? props.match.params['who'] : 'artist') const [query, setQuery] = useState(parsedParams.query) const [page, setPage] = useState(!isNaN(+parsedParams.page) ? +parsedParams.page : 1) const navigateTo = (who, query, page) => props.history.push(`/search/${who}?query=${query}&page=${page}`); const handleQueryChange = query => { setQuery(query); setPage(1); navigateTo(who, query, 1) }; const handleTabChange = who => { setWho(who); setPage(1) navigateTo(who, query, 1) }; const handlePageChange = (who, page) => { setWho(who); setPage(page); navigateTo(who, query, page); window.scroll({left: 0, top: 0, behavior: 'smooth'}); }; const content = _ => { if (query) { return } else { return null; } } return (

    Búsqueda

    {content()}
    ); }