diff --git a/src/components/Dashboard/TrackCard.vue b/src/components/Dashboard/TrackCard.vue new file mode 100644 index 0000000..597e5ca --- /dev/null +++ b/src/components/Dashboard/TrackCard.vue @@ -0,0 +1,39 @@ + diff --git a/src/views/NewDashboard.vue b/src/views/NewDashboard.vue index a441339..3e5f3f6 100644 --- a/src/views/NewDashboard.vue +++ b/src/views/NewDashboard.vue @@ -24,6 +24,7 @@ const query = ref(''); //Holds query string const results = ref([]); //Holds results from the search const selectedResult = ref(null); //Holds the result selected by the user + const emit = defineEmits(['selectTrack']); function storeToken(data) { @@ -89,6 +90,7 @@ async function search(){ 'Authorization': 'Bearer ' + token } }); + if(!response.ok){ console.error("Show error message") return; @@ -105,25 +107,111 @@ async function search(){ }) } -function selectTrack(track){ - console.log('') + + + + + + + + + + + + +async function selectTrack(track){ selectedResult.value = track; + await getSpotifyToken() + .then(async (token)=>{ + const response = await fetch (`https://api.spotify.com/v1/tracks/${track.id}`, {method:'GET', headers:{'Authorization':'Bearer '+token}}); + if(!response.ok){ + console.log("NOT OK"); + selectedResult.value = null; + return; + }else{ + const data = await response.json(); + selectedResult.value = data; + /* + * At this point the track is selected but not yet analyzed, + * so we need to display the basic info and a loader while we fetch the audio features. + */ + analyzeTrack(); + } + }) +} + + + +async function analyzeTrack(){ + // Check if track is actually selected + if(!selectedResult.value) return; + // Fetch audio features + await getSpotifyToken() + .then(async (token)=>{ + const response = await fetch (`https://api.spotify.com/v1/audio-features/${selectedResult.value.id}`, {method:'GET', headers:{'Authorization':'Bearer '+token}}); + if(!response.ok){ + console.log("NOT OK"); + return; + }else{ + const data = await response.json(); + console.log(data); + } + }); // -} + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +