import React, {Fragment, useEffect, useState} from "react"; import {Tab, TabList, TabPanel, Tabs} from "react-tabs"; import queryString from "query-string"; import {searchArtist, searchDisc, searchSong} from "../services/search_service"; import {SearchBar} from "../components/SearchBar"; import {Paginate} from "../components/Paginate"; import {CoverArt} from "../components/CoverArt"; import {EntityList} from "../components/EntityList"; 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) { const items = songs.map((song) => { return { 'cover': null, 'link': `/song/${song.id}`, 'title': song.title, 'subtitle': song.artist.name }; }); const list = [{ 'items': items }] songsComponent = } let paginateComponent; if (paginate) { const total = paginate.total; const currentPage = paginate.current_page; const pageLimit = paginate.per_page; paginateComponent = } return (
    {songsComponent}
{paginateComponent}
) } 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, 16).then((response) => { setDiscs(response.discs); setPaginate(response.paginate); }) }; let discsComponent = ; if (discs) { const items = discs.map((disc) => ({ 'cover': , 'link': `/disc/${disc.id}`, 'title': disc.title, 'subtitle': disc.artist.name })); const list = [{ 'items': items }] discsComponent = } let paginateComponent; if (paginate) { const total = paginate.total; const currentPage = paginate.current_page; const pageLimit = paginate.per_page; paginateComponent = } return (
    {discsComponent}
{paginateComponent}
) } 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) { const items = artists.map((artist) => ({ 'cover': null, 'link': `/artist/${artist.id}`, 'title': artist.name, 'subtitle': [artist.type, artist.country].filter(Boolean).join(' - ') })); const list = [{ 'items': items }]; artistsContent = } 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); }; const content = _ => { if (query) { return } else { return null; } } return (

Búsqueda

{content()}
); }