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 ACCESS_TOKEN = 'M0GAzZXbwqfifGOTxfB7lLmEWlRNadkFGV99E9SQCgirIX58kbcvEFYhu2WajbGH';
|
@ -1,19 +1,15 @@
|
||||
import {FETCH_ARTISTE, FETCH_ARTISTE_SEARCH} from '../constants';
|
||||
import { FETCH_ARTISTE_SEARCH} from '../constants';
|
||||
|
||||
const initialState = {
|
||||
artists: [],
|
||||
artistsSearch: []
|
||||
}
|
||||
|
||||
export default function ReducerArtist(state = initialState, action){
|
||||
switch (action.type) {
|
||||
case FETCH_ARTISTE:
|
||||
// @ts-ignore
|
||||
return {...state, artists: action.payload};
|
||||
case FETCH_ARTISTE_SEARCH:
|
||||
return {...state, artistsSearch: action.payload};
|
||||
|
||||
default:
|
||||
console.log("nothing")
|
||||
return state;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue