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 React, {useState} from "react";
import {SampleJoke} from "../model/SampleJoke"; import {SampleJoke} from "../model/SampleJoke";
import {Joke} from "../model/Joke"; import {Joke} from "../model/Joke";
import {CustomJoke} from "../model/CustomJoke";
type DetailJokeProps = { 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)); // 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, tabBarShowLabel: false,
tabBarStyle: styles.top, tabBarStyle: styles.top,
}} > }} >
<BottomTabNavigator.Screen name="Accueil" component={AddJokeScreen} <BottomTabNavigator.Screen name="Accueil" component={AccueilScreen}
options={{ options={{
tabBarIcon: ({focused}) => ( tabBarIcon: ({focused}) => (
<Image <Image

@ -4,6 +4,7 @@ import {JokeFactory} from "../../model/JokeFactory";
export enum CustomActionType { export enum CustomActionType {
POST_CUSTOM_JOKE = 'POST_CUSTOM_JOKE', POST_CUSTOM_JOKE = 'POST_CUSTOM_JOKE',
FETCH_CUSTOMS_JOKE = 'FETCH_CUSTOMS_JOKE', FETCH_CUSTOMS_JOKE = 'FETCH_CUSTOMS_JOKE',
FETCH_CUSTOMS_JOKE_BY_ID = 'FETCH_CUSTOMS_JOKE_BY_ID',
} }
export interface CustomAction { 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) => { 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 = () => { export const getJokesCustoms = () => {
return async dispatch => { return async dispatch => {
try { try {
const custom = await fetch('https://iut-weather-api.azurewebsites.net/jokes/', { const custom = await fetch('https://iut-weather-api.azurewebsites.net/jokes/');
method: 'GET',
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
});
const customsJson = await custom.text(); const customsJson = await custom.text();
const customJokes = JokeFactory.createCustomJokes(customsJson); const customJokes = JokeFactory.createCustomJokes(customsJson);
dispatch(setCustomsJoke(customJokes)); 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 { interface state {
postJoke: CustomJoke; postJoke: CustomJoke;
customJokes: CustomJoke[]; customJokes: CustomJoke[];
completCustomJoke: CustomJoke;
} }
// initial state for sampleJokes // initial state for sampleJokes
const initialState: state = { const initialState: state = {
postJoke: {} as CustomJoke, postJoke: {} as CustomJoke,
customJokes: [], customJokes: [],
completCustomJoke: {} as CustomJoke,
} }
// app reducer for sampleJokes // app reducer for sampleJokes
@ -28,6 +30,11 @@ export default appReducer = (state = initialState, action: Action) => {
...state, ...state,
customJokes: action.payload, customJokes: action.payload,
} }
case CustomActionType.FETCH_CUSTOMS_JOKE_BY_ID:
return {
...state,
completCustomJoke: action.payload,
}
default: default:
return state; return state;

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

@ -7,21 +7,26 @@ import {Joke} from "../model/Joke";
import {useDispatch, useSelector} from "react-redux"; import {useDispatch, useSelector} from "react-redux";
import {getCompletJokes, setCompletJokes, setSample} from "../redux/actions/sampleAction"; import {getCompletJokes, setCompletJokes, setSample} from "../redux/actions/sampleAction";
import {validatePathConfig} from "@react-navigation/native"; import {validatePathConfig} from "@react-navigation/native";
import {getJokesCustomsById} from "../redux/actions/customAction";
//svjh //svjh
export default function JokeDetailScreen({route}) { export default function JokeDetailScreen({route}) {
const jokeId = route.params.joke; const jokeId = route.params.joke;
console.log(jokeId); const state = route.params.state;
const DataGen = useSelector((state: any) => state.sampleReducer.completJoke); 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(); const dispatch = useDispatch();
useEffect(() => { useEffect(() => {
const getDetails = async () => { const getDetails = async () => {
// @ts-ignore // @ts-ignore
await dispatch(getCompletJokes(jokeId)) { state ? await dispatch(getJokesCustomsById(jokeId)) : await dispatch(getCompletJokes(jokeId));}
}; };
getDetails(); getDetails();
}, [dispatch]); }, [dispatch]);
console.log(DataGen);
return ( return (
<View style={styles.font}> <View style={styles.font}>
<DetailJoke item={DataGen}/> <DetailJoke item={DataGen}/>

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

Loading…
Cancel
Save