finission tp

tp6
Tony Fages 1 year ago
parent dd8de95ed6
commit f09a8fcc8f

@ -3,9 +3,10 @@ import {darksalmonColor, greyColor, indigo, purpleColor, whiteColor} from "../Th
import React, {useState} from "react";
import {SampleJoke} from "../model/SampleJoke";
import {Joke} from "../model/Joke";
import {CustomJoke} from "../model/CustomJoke";
type DetailJokeProps = {
item: SampleJoke;
item: CustomJoke;
}

@ -35,4 +35,11 @@ export class JokeFactory {
// array.push(new SampleJoke(joke.type, joke.setup, joke.image,joke.punchline, joke.id));
//})
}
static createCustomJokeById(jsonArray: string): CustomJoke {
let array = [];
let json = JSON.parse(jsonArray);
return new CustomJoke(json.type, json.setup, json.punchline,json.image, json.id)
}
}

@ -32,7 +32,7 @@ export function Navigation(){
tabBarShowLabel: false,
tabBarStyle: styles.top,
}} >
<BottomTabNavigator.Screen name="Accueil" component={AddJokeScreen}
<BottomTabNavigator.Screen name="Accueil" component={AccueilScreen}
options={{
tabBarIcon: ({focused}) => (
<Image

@ -4,6 +4,7 @@ import {JokeFactory} from "../../model/JokeFactory";
export enum CustomActionType {
POST_CUSTOM_JOKE = 'POST_CUSTOM_JOKE',
FETCH_CUSTOMS_JOKE = 'FETCH_CUSTOMS_JOKE',
FETCH_CUSTOMS_JOKE_BY_ID = 'FETCH_CUSTOMS_JOKE_BY_ID',
}
export interface CustomAction {
@ -38,6 +39,14 @@ export const setCustomsJoke = (customJokes: CustomJoke[]): CustomsAction => {
}
}
export const setCustomsJokeById = (completCustomJoke: CustomJoke): postCustomAction => {
return {
type: CustomActionType.FETCH_CUSTOMS_JOKE_BY_ID,
payload: completCustomJoke
}
}
export const postJoke = (type : string, setup : string, punchline : string) => {
@ -69,13 +78,7 @@ export const postJoke = (type : string, setup : string, punchline : string) => {
export const getJokesCustoms = () => {
return async dispatch => {
try {
const custom = await fetch('https://iut-weather-api.azurewebsites.net/jokes/', {
method: 'GET',
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
});
const custom = await fetch('https://iut-weather-api.azurewebsites.net/jokes/');
const customsJson = await custom.text();
const customJokes = JokeFactory.createCustomJokes(customsJson);
dispatch(setCustomsJoke(customJokes));
@ -84,3 +87,17 @@ export const getJokesCustoms = () => {
}
}
}
export const getJokesCustomsById = (id : number) => {
return async dispatch => {
try {
const custom = await fetch('https://iut-weather-api.azurewebsites.net/jokes/' + id);
const customsJson = await custom.text();
const customJokes = JokeFactory.createCustomJokeById(customsJson);
console.log('customJokes', customJokes);
dispatch(setCustomsJokeById(customJokes));
} catch (error) {
console.log('Error---------', error);
}
}
}

@ -6,12 +6,14 @@ import {CustomActionType} from "../actions/customAction";
interface state {
postJoke: CustomJoke;
customJokes: CustomJoke[];
completCustomJoke: CustomJoke;
}
// initial state for sampleJokes
const initialState: state = {
postJoke: {} as CustomJoke,
customJokes: [],
completCustomJoke: {} as CustomJoke,
}
// app reducer for sampleJokes
@ -28,6 +30,11 @@ export default appReducer = (state = initialState, action: Action) => {
...state,
customJokes: action.payload,
}
case CustomActionType.FETCH_CUSTOMS_JOKE_BY_ID:
return {
...state,
completCustomJoke: action.payload,
}
default:
return state;

@ -7,8 +7,6 @@ interface state {
sampleJoke: SampleJoke[];
recentJokes: SampleJoke[];
completJoke: SampleJoke;
postJoke: CustomJoke;
customJokes: CustomJoke[];
}
// initial state for sampleJokes
@ -16,8 +14,6 @@ const initialState: state = {
completJoke: {} as SampleJoke,
sampleJoke: [],
recentJokes: [],
postJoke: {} as CustomJoke,
customJokes: [],
}
// app reducer for sampleJokes

@ -7,21 +7,26 @@ import {Joke} from "../model/Joke";
import {useDispatch, useSelector} from "react-redux";
import {getCompletJokes, setCompletJokes, setSample} from "../redux/actions/sampleAction";
import {validatePathConfig} from "@react-navigation/native";
import {getJokesCustomsById} from "../redux/actions/customAction";
//svjh
export default function JokeDetailScreen({route}) {
const jokeId = route.params.joke;
console.log(jokeId);
const DataGen = useSelector((state: any) => state.sampleReducer.completJoke);
const state = route.params.state;
console.log(state);
// Déterminer quelle donnée utiliser en fonction de l'état de `state`
const DataGen = state ? useSelector((state: any) => state.customReducer.completCustomJoke) : useSelector((state: any) => state.sampleReducer.completJoke);
// const DataGen = useSelector((state: any) => state.sampleReducer.completJoke);
const dispatch = useDispatch();
useEffect(() => {
const getDetails = async () => {
// @ts-ignore
await dispatch(getCompletJokes(jokeId))
{ state ? await dispatch(getJokesCustomsById(jokeId)) : await dispatch(getCompletJokes(jokeId));}
};
getDetails();
}, [dispatch]);
console.log(DataGen);
return (
<View style={styles.font}>
<DetailJoke item={DataGen}/>

@ -39,7 +39,7 @@ export function ListJokeScreen({route, navigation}) {
<FlatList
data={isActivated2 ? DataCustomsJoke : DataGen}
renderItem={({ item }) => (
<TouchableHighlight onPress={() => navigation.navigate("JokeDetail", {"joke" : item.id})}>
<TouchableHighlight onPress={() => navigation.navigate("JokeDetail", {"joke" : item.id, "state" : isActivated2})}>
<JokeListItems item={item}/>
</TouchableHighlight>
)}

Loading…
Cancel
Save