You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
3.1 KiB

import {FETCH_ARTISTE_SEARCH, ACCESS_TOKEN} from '../constants';
import {Artist} from "../../Model/Artist";
import {Album} from "../../Model/Album";
export const setArtistSearchList = (artistList: Artist[]) => {
return {
type: FETCH_ARTISTE_SEARCH,
payload: artistList,
};
}
export const searchArtists = (recherche) => {
return async dispatch => {
try{
const response = await fetch(`https://genius.com/api/search/artists?page=1&q=${encodeURIComponent(recherche)}`);
if (!response.ok) {
throw new Error('[searchArtists] Network response was not ok');
}
const artistListJson = await response.json();
const artistList: Artist[] = artistListJson.response.sections[0].hits.map(hit =>
new Artist(hit.result.id, hit.result.name, hit.result.image_url,"")
);
dispatch(setArtistSearchList(artistList));
} catch (error) {
console.error('Error:', error);
}
}
}
export const getArtistInfo = (artist) => {
return async (dispatch) => {
try {
const response = await fetch(
`https://api.genius.com/artists/${artist.id}`,
{
headers: {
Authorization: `Bearer ${ACCESS_TOKEN}`,
"Content-Type": "application/json",
},
}
);
if (!response.ok) {
console.log(response);
throw new Error("[getArtistInfo] Network response was not ok");
}
const artistInfoJson = await response.json();
var bio = "";
artistInfoJson.response.artist.description.dom.children[0].children.map(
(b) => {
if (typeof b === "object") {
bio += b.children[0];
} else {
bio += b;
}
}
);
return bio; // Return the JSON object
} catch (error) {
console.error("Error:", error);
}
};
};
export const getAlbumByArtist = (artist) => {
return async dispatch => {
try{
const response = await fetch(`https://genius.com/api/artists/${artist.id}/albums`)
if (!response.ok) {
console.log(response);
throw new Error('[getAlbumByArtist] Network response was not ok');
}
const artistAlbumJson = await response.json();
const albumList: Album[] = artistAlbumJson.response.albums.map((album: any) =>
new Album(album.id,
album.name,
album.cover_art_thumbnail_url,
// @ts-ignore
new Date(album.release_date_components.year, album.release_date_components.month, album.release_date_components.day)
)
);
return albumList;
} catch (error) {
console.error('Error:', error);
}
}
}