Tony Fages 1 year ago
parent 296c8d66e8
commit 51ceb3511f

@ -5,6 +5,7 @@ import {Navigation} from "./navigation/Navigation";
import {darksalmonColor, indigo, purpleColor} from "./Theme";
import {Provider} from "react-redux";
import store from "./redux/store";
import AsyncStorage from "@react-native-async-storage/async-storage";
export default function App() {

@ -15,7 +15,6 @@ export function DetailJoke(props: DetailJokeProps) {
const [isActivated, setIsActivated] = useState(false);
const [isActivated2, setIsActivated2] = useState(false);
const favoriteJokes = useAppSelector(state => state.customReducer.favoriteJokes) as [CustomJoke, SampleJoke];
const dispatch = useAppDispatch();
@ -23,7 +22,7 @@ export function DetailJoke(props: DetailJokeProps) {
setIsActivated(!isActivated);
if (isActivated) {
console.log("Joke retirée des favoris");
dispatch(removeFavoriteJoke());
dispatch(removeFavoriteJoke(props.item));
}
else {
dispatch(storeFavoriteJoke(props.item));

@ -9,6 +9,7 @@ import {setFavoriteJoke} from "./actions/customAction";
import {TypedUseSelectorHook, useDispatch, useSelector} from "react-redux";
import {SampleJoke} from "../model/SampleJoke";
import {Joke} from "../model/Joke";
import {JokeFactory} from "../model/JokeFactory";
const reducer = {
categorieReducer: categorieReducer,
@ -46,21 +47,19 @@ export const getTheme = async () => {
}
}
export const storeFavoriteJoke = (joke : Joke) => {
export const storeFavoriteJoke = (joke : CustomJoke) => {
return async dispatch => {
try {
const favoriteJokes = await AsyncStorage.getItem('favorites');
const favoriteJokesList = favoriteJokes != null ? JSON.parse(favoriteJokes) : [];
const favoriteJokesList: CustomJoke[] = favoriteJokes != null ? JokeFactory.createCustomJokes(favoriteJokes) : [];
favoriteJokesList.push(joke);
await AsyncStorage.setItem('favorites', JSON.stringify(favoriteJokesList));
const favorites = favoriteJokesList.map(joke => new SampleJoke(joke["type"], joke["setup"], joke["punchline"], joke["image"], joke["id"]))
dispatch(setFavoriteJoke(favorites));
await AsyncStorage.setItem('favorites', JSON.stringify(favoriteJokesList.map(j => ({type: j.type, setup: j.setup, punchline: j.punchline, image: j.image, id: j.id}))));
dispatch(setFavoriteJoke(favoriteJokesList));
} catch (e) {
console.log(e);
}
}
}
export const getFavorite = () => {
return async (dispatch) => {
try {
@ -76,16 +75,23 @@ export const getFavorite = () => {
}
}
export const removeFavoriteJoke = () => {
export const removeFavoriteJoke = (joke : CustomJoke) => {
return async dispatch => {
try {
await AsyncStorage.clear()
const favoriteJokes = await AsyncStorage.getItem('favorites');
let favoriteJokesList: CustomJoke[] = favoriteJokes != null ? JokeFactory.createCustomJokes(favoriteJokes) : [];
const index = favoriteJokesList.findIndex((j) => j.id === joke.id);
if (index !== -1) {
favoriteJokesList.splice(index, 1);
await AsyncStorage.setItem('favorites', JSON.stringify(favoriteJokesList.map(j => ({type: j.type, setup: j.setup, punchline: j.punchline, image: j.image, id: j.id}))));
dispatch(setFavoriteJoke(favoriteJokesList));
}
} catch (e) {
console.log("An error occurred", e);
}
}
}
export type AppDispatch = typeof store.dispatch;
export type AppStore = ReturnType<typeof store.getState>;

@ -10,7 +10,7 @@ import {useAppSelector, useAppDispatch} from "../redux/store";
import {useDispatch} from "react-redux";
export function ListFavoriteJokeScreen({route, navigation}){
const favoriteJokes = useAppSelector((state) => state.customReducer.favoriteJokes as [CustomJoke, SampleJoke]);
const favoriteJokes: CustomJoke[] = useAppSelector((state) => state.customReducer.favoriteJokes);
const dispatch = useDispatch();
useEffect(() => {
@ -20,6 +20,8 @@ export function ListFavoriteJokeScreen({route, navigation}){
}
getFavoriteJokes();
}, []);
let fav = true;
if (favoriteJokes.length <= 0) {
fav = false;

Loading…
Cancel
Save