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 (
)
} else {
return
}
} 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 (
{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 (
{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 (
{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()}
);
}