- Images now pull from spotify if setup!
- Show top artists/album
This commit is contained in:
Daniel Mason 2021-04-08 20:46:31 +12:00
parent b1de018b27
commit 8294791abe
Signed by: idanoo
GPG key ID: 387387CDBC02F132
12 changed files with 278 additions and 106 deletions

View file

@ -326,3 +326,12 @@ export const getTopTracks = (uuid) => {
return handleErrorResp(error)
});
}
export const getTopArtists = (uuid) => {
return axios.get(process.env.REACT_APP_API_URL + "artists/top/" + uuid).then(
(data) => {
return data.data;
}).catch((error) => {
return handleErrorResp(error)
});
}

View file

@ -3,13 +3,13 @@ import './TopTable.css'
import TopTableBox from './TopTableBox';
const TopTable = (props) => {
if (!props.items || !props.items.tracks) {
if (!props.items || Object.keys(props.items).length < 1) {
return (
<span>No data.</span>
<span>Not enough data to show top {props.type}s.<br/></span>
)
}
let tracks = props.items.tracks;
let tracks = props.items;
return (
<div>
@ -24,101 +24,105 @@ const TopTable = (props) => {
img={tracks[1].img}
/>
</div>
<div className="biggestBox">
{ Object.keys(props.items).length > 5 &&
<div className="biggestBox">
<TopTableBox
size={150}
number="2"
title={tracks[2].name}
link={"/" + props.type + "/" + tracks[2].uuid}
img={tracks[2].img}
/>
<TopTableBox
size={150}
number="3"
title={tracks[3].name}
link={"/" + props.type + "/" + tracks[3].uuid}
img={tracks[3].img}
/>
<TopTableBox
size={150}
number="4"
title={tracks[4].name}
link={"/" + props.type + "/" + tracks[4].uuid}
img={tracks[4].img}
/>
<TopTableBox
size={150}
number="5"
title={tracks[5].name}
link={"/" + props.type + "/" + tracks[5].uuid}
img={tracks[5].img}
/>
</div>
}
{ Object.keys(props.items).length >= 14 &&
<div className="biggestBox">
<TopTableBox
size={150}
number="2"
title={tracks[2].name}
link={"/" + props.type + "/" + tracks[2].uuid}
img={tracks[2].img}
size={100}
number="6"
title={tracks[6].name}
link={"/" + props.type + "/" + tracks[6].uuid}
img={tracks[6].img}
/>
<TopTableBox
size={150}
number="3"
title={tracks[3].name}
link={"/" + props.type + "/" + tracks[3].uuid}
img={tracks[3].img}
size={100}
number="7"
title={tracks[7].name}
link={"/" + props.type + "/" + tracks[7].uuid}
img={tracks[7].img}
/>
<TopTableBox
size={150}
number="4"
title={tracks[4].name}
link={"/" + props.type + "/" + tracks[4].uuid}
img={tracks[4].img}
size={100}
number="8"
title={tracks[8].name}
link={"/" + props.type + "/" + tracks[8].uuid}
img={tracks[8].img}
/>
<TopTableBox
size={150}
number="5"
title={tracks[5].name}
link={"/" + props.type + "/" + tracks[5].uuid}
img={tracks[5].img}
size={100}
number="9"
title={tracks[9].name}
link={"/" + props.type + "/" + tracks[9].uuid}
img={tracks[9].img}
/>
</div>
<div className="biggestBox">
<TopTableBox
size={100}
number="6"
title={tracks[6].name}
link={"/" + props.type + "/" + tracks[6].uuid}
img={tracks[6].img}
/>
<TopTableBox
size={100}
number="7"
title={tracks[7].name}
link={"/" + props.type + "/" + tracks[7].uuid}
img={tracks[7].img}
/>
<TopTableBox
size={100}
number="8"
title={tracks[8].name}
link={"/" + props.type + "/" + tracks[8].uuid}
img={tracks[8].img}
/>
<TopTableBox
size={100}
number="9"
title={tracks[9].name}
link={"/" + props.type + "/" + tracks[9].uuid}
img={tracks[9].img}
/>
<TopTableBox
size={100}
number="10"
title={tracks[10].name}
link={"/" + props.type + "/" + tracks[10].uuid}
img={tracks[10].img}
/>
<TopTableBox
size={100}
number="11"
title={tracks[11].name}
link={"/" + props.type + "/" + tracks[11].uuid}
img={tracks[11].img}
/>
<TopTableBox
size={100}
number="12"
title={tracks[12].name}
link={"/" + props.type + "/" + tracks[12].uuid}
img={tracks[12].img}
/>
<TopTableBox
size={100}
number="13"
title={tracks[13].name}
link={"/" + props.type + "/" + tracks[13].uuid}
img={tracks[13].img}
/>
<TopTableBox
size={100}
number="14"
title={tracks[14].name}
link={"/" + props.type + "/" + tracks[14].uuid}
img={tracks[14].img}
/>
</div>
<TopTableBox
size={100}
number="10"
title={tracks[10].name}
link={"/" + props.type + "/" + tracks[10].uuid}
img={tracks[10].img}
/>
<TopTableBox
size={100}
number="11"
title={tracks[11].name}
link={"/" + props.type + "/" + tracks[11].uuid}
img={tracks[11].img}
/>
<TopTableBox
size={100}
number="12"
title={tracks[12].name}
link={"/" + props.type + "/" + tracks[12].uuid}
img={tracks[12].img}
/>
<TopTableBox
size={100}
number="13"
title={tracks[13].name}
link={"/" + props.type + "/" + tracks[13].uuid}
img={tracks[13].img}
/>
<TopTableBox
size={100}
number="14"
title={tracks[14].name}
link={"/" + props.type + "/" + tracks[14].uuid}
img={tracks[14].img}
/>
</div>
}
</div>
</div>
);

View file

@ -10,7 +10,6 @@ img {
.topOverlay {
position: absolute;
margin: 5px;
padding: 2px 5px 5px 5px;
background-color: rgba(0, 0, 0, 0.6);
line-height: 0.6em;

View file

@ -20,7 +20,7 @@ const TopTableBox = (props) => {
height: `${props.size}px`,
float: `left`,
}} >
<div className="topOverlay" style={{ maxWidth: `${props.size-'10'}px` }}>
<div className="topOverlay" style={{ maxWidth: `${props.size-'5'}px` }}>
<span className="topText" style={{
fontSize: `${props.size === 300 ? '11pt' : (props.size === 150 ? '8pt': '8pt' )}`
}}>#{props.number} {props.title}</span>

View file

@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
import '../App.css';
import './Profile.css';
import ScaleLoader from 'react-spinners/ScaleLoader';
import { getProfile, getTopTracks } from '../Api/index'
import { getProfile, getTopTracks, getTopArtists } from '../Api/index'
import ScrobbleTable from '../Components/ScrobbleTable'
import TopTable from '../Components/TopTable'
@ -10,6 +10,7 @@ const Profile = (route) => {
const [loading, setLoading] = useState(true);
const [profile, setProfile] = useState({});
const [topTracks, setTopTracks] = useState({})
const [topArtists, setTopArtists] = useState({})
let username = false;
if (route && route.match && route.match.params && route.match.params.uuid) {
@ -30,9 +31,14 @@ const Profile = (route) => {
// Fetch top tracks
getTopTracks(data.uuid)
.then(data => {
setTopTracks(data)
}
)
setTopTracks(data.tracks)
})
// Fetch top artists
getTopArtists(data.uuid)
.then(data => {
setTopArtists(data.artists)
})
setLoading(false);
})
@ -63,6 +69,8 @@ const Profile = (route) => {
<div className="pageBody">
<TopTable type="track" items={topTracks} />
<br/>
<TopTable type="artist" items={topArtists} />
<br/>
Last 10 scrobbles...<br/>
<ScrobbleTable data={profile.scrobbles}/>
</div>