parent
b59f0d961c
commit
c041f6f4dd
@ -0,0 +1,54 @@
|
|||||||
|
import AsyncStorage from "@react-native-async-storage/async-storage";
|
||||||
|
import {Artist} from "../Model/Artist";
|
||||||
|
|
||||||
|
export const storeLikeArtists = async (artistsList) => {
|
||||||
|
try {
|
||||||
|
const jsonArtistsList = JSON.stringify(artistsList);
|
||||||
|
await AsyncStorage.setItem('likeArtists', jsonArtistsList);
|
||||||
|
} catch (e) {
|
||||||
|
console.log("An error occurred while storing artists list", e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getLikeArtist = async () => {
|
||||||
|
try {
|
||||||
|
const jsonArtistsList = await AsyncStorage.getItem('likeArtists');
|
||||||
|
const artistsList = jsonArtistsList !== null ? JSON.parse(jsonArtistsList) : [];
|
||||||
|
console.log("get")
|
||||||
|
artistsList.map(artist => console.log(artist, artist._id,artist._name,artist._image));
|
||||||
|
return artistsList.map(artist => new Artist(artist._id,artist._name,artist._image));
|
||||||
|
} catch (e) {
|
||||||
|
console.log("An error occurred while retrieving artists list", e);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export const getLikeArtistJson = async () => {
|
||||||
|
try {
|
||||||
|
const jsonArtistsList = await AsyncStorage.getItem('likeArtists');
|
||||||
|
return jsonArtistsList !== null ? JSON.parse(jsonArtistsList) : [];
|
||||||
|
} catch (e) {
|
||||||
|
console.log("An error occurred while retrieving artists list", e);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const addLikeArtist = async (artist) => {
|
||||||
|
try {
|
||||||
|
const artistsList = await getLikeArtistJson();
|
||||||
|
artistsList.push(artist);
|
||||||
|
await storeLikeArtists(artistsList);
|
||||||
|
} catch (e) {
|
||||||
|
console.log("An error occurred while adding artist to the list", e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
export const removeArtist = async (artistId) => {
|
||||||
|
try {
|
||||||
|
let artistsList = await getLikeArtistJson();
|
||||||
|
artistsList = artistsList.filter(artist => artist.id !== artistId);
|
||||||
|
await storeLikeArtists(artistsList);
|
||||||
|
} catch (e) {
|
||||||
|
console.log("An error occurred while removing artist from the list", e);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
import React, {useEffect, useState} from 'react';
|
||||||
|
import { TouchableOpacity, View } from 'react-native';
|
||||||
|
import {AntDesign} from "@expo/vector-icons";
|
||||||
|
import {addLikeArtist, getLikeArtist, removeArtist} from '../../AsyncStorage/likeArtistStorage';
|
||||||
|
|
||||||
|
const LikeButton = ({ artist }) => {
|
||||||
|
const [isLiked, setIsLiked] = useState(false);
|
||||||
|
const [likedArtists, setLikedArtists] = useState([]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const fetchLikedArtists = async () => {
|
||||||
|
const artists = await getLikeArtist();
|
||||||
|
setLikedArtists(artists);
|
||||||
|
setIsLiked(artists.some((a) => a._id === artist._id));
|
||||||
|
};
|
||||||
|
fetchLikedArtists();
|
||||||
|
}, [artist]);
|
||||||
|
|
||||||
|
const handleLike = () => {
|
||||||
|
setIsLiked(true);
|
||||||
|
addLikeArtist(artist);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDislike = () => {
|
||||||
|
setIsLiked(false);
|
||||||
|
removeArtist(artist._id);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<TouchableOpacity onPress={isLiked ? handleDislike : handleLike}>
|
||||||
|
<View>
|
||||||
|
<AntDesign name="heart" size={24} color={isLiked ? 'gold' : 'black'} />
|
||||||
|
</View>
|
||||||
|
</TouchableOpacity>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default LikeButton;
|
@ -1,5 +1,2 @@
|
|||||||
export const FETCH_ARTISTE = 'FETCH_ARTISTE';
|
|
||||||
export const FETCH_ARTISTE_SEARCH = 'FETCH_ARTISTE_SEARCH';
|
export const FETCH_ARTISTE_SEARCH = 'FETCH_ARTISTE_SEARCH';
|
||||||
|
|
||||||
|
|
||||||
export const ACCESS_TOKEN = 'M0GAzZXbwqfifGOTxfB7lLmEWlRNadkFGV99E9SQCgirIX58kbcvEFYhu2WajbGH';
|
export const ACCESS_TOKEN = 'M0GAzZXbwqfifGOTxfB7lLmEWlRNadkFGV99E9SQCgirIX58kbcvEFYhu2WajbGH';
|
@ -1,19 +1,15 @@
|
|||||||
import {FETCH_ARTISTE, FETCH_ARTISTE_SEARCH} from '../constants';
|
import { FETCH_ARTISTE_SEARCH} from '../constants';
|
||||||
|
|
||||||
const initialState = {
|
const initialState = {
|
||||||
artists: [],
|
|
||||||
artistsSearch: []
|
artistsSearch: []
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function ReducerArtist(state = initialState, action){
|
export default function ReducerArtist(state = initialState, action){
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case FETCH_ARTISTE:
|
|
||||||
// @ts-ignore
|
|
||||||
return {...state, artists: action.payload};
|
|
||||||
case FETCH_ARTISTE_SEARCH:
|
case FETCH_ARTISTE_SEARCH:
|
||||||
return {...state, artistsSearch: action.payload};
|
return {...state, artistsSearch: action.payload};
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
console.log("nothing")
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in new issue