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 {darksalmonColor, indigo, purpleColor} from "./Theme";
import {Provider} from "react-redux"; import {Provider} from "react-redux";
import store from "./redux/store"; import store from "./redux/store";
import AsyncStorage from "@react-native-async-storage/async-storage";
export default function App() { export default function App() {

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

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

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

Loading…
Cancel
Save