Merge branch 'redux' into Dev

redux
mohamed 2 years ago
commit 0329133e1a

@ -15,14 +15,18 @@ import Register from './screens/Register';
import Session_browser from './screens/Session_browser';
import Team_Browser from './screens/Team_Browser';
import Team_Selection from './screens/Team_Selection';
import { Provider } from 'react-redux';
import store from './redux/Store';
export default function App() {
return (
<Provider store={store}>
<SafeAreaView style={styles.container}>
<NavigationContainer independent={true}>
<LoginStack />
</NavigationContainer>
</SafeAreaView>
</Provider>
);
}

@ -14,8 +14,8 @@ export class Lap {
getNumber(){
return this.number;
}
setNumber(){
return this.number;
setNumber(number :number){
this.number = number;
}
getPoints() {

@ -1,4 +1,5 @@
import { Lap } from "./Lap";
import { SessionType } from "./SessionType";
export class Session {
private name: string;

@ -14,7 +14,6 @@ export class Team {
this.logo = logo;
}
getName() {
return this.name;
}

@ -0,0 +1,5 @@
export const FETCH_USERS = 'FETCH_USERS';
export const FETCH_TEAMS = 'FETCH_TEAMS';
export const FETCH_SESSIONS = 'FETCH_SESSIONS';
export const ADD_TEAM = 'ADD_TEAM';
export const ADD_FILE = 'ADD_FILE';

@ -0,0 +1,51 @@
import { Geocalisation } from "../../core/Geocalisation";
import { Lap } from "../../core/Lap";
import { Point } from "../../core/Point";
import { Session } from "../../core/Session";
import { User } from "../../core/User";
import { FETCH_SESSIONS } from "../Constants";
export const setSessionsList = (sessionsList: Session[]) => {
return {
type: FETCH_SESSIONS,
payload: sessionsList,
};
}
export const addXlsFile = async (file: File) => {
try {
const formData = new FormData();
formData.append('file', file);
const response = await fetch('https://codefirst.iut.uca.fr/containers/enzojolys-r-dash_container/upload', {
method: 'POST',
body: formData
});
const data = await response.json();
return data;
} catch (error) {
console.log('Error---------', error);
}
};
export const getSessionsList = (user: User) => {
return async dispatch => {
try {
const sessionsPromise = await fetch('https://codefirst.iut.uca.fr/containers/enzojolys-r-dash_container/Sessions/'+user.getUsername);
const sessionsListJson = await sessionsPromise.json();
const sessionsList: Session[] = sessionsListJson.map(elt => {
const laps: Lap[] = elt.laps.map(lap => {
const points: Point[] = lap.points.map(point => {
const geo = new Geocalisation(point.geo.latitude, point.geo.longitude);
return new Point(geo, point.timer, point.distance, point.nGear, point.pBrakeF, point.aSteer, point.rPedal, point.gLong, point.gLat, point.vCar);
});
return new Lap(lap.number, points, lap.time);
});
return new Session(elt.name, laps, elt.type);
});
dispatch(setSessionsList(sessionsList));
} catch (error) {
console.log('Error---------', error);
//dispatch(fetchDataRejected(error))
}
}
}

@ -1,20 +1,42 @@
import { Team } from "../../core/Team";
import { Fetch_Teams } from "../Constants";
import { FETCH_TEAMS, ADD_TEAM } from "../Constants";
export const setCitiesList = (citiesList: Team[]) => {
export const setTeamsList = (teamsList: Team[]) => {
return {
type: Fetch_Teams,
payload: citiesList,
type: FETCH_TEAMS,
payload: teamsList,
};
}
export const getCitiesList = () => {
export const addNewTeam = (newTeam: Team) => {
return async dispatch => {
try {
const citiesPromise = await fetch('https://iut-weather-api.azurewebsites.net/');
const citiesListJson = await citiesPromise.json();
const citiesList: Team[] = citiesListJson.map(elt => new Localisation(elt["name"], elt["latitude"], elt["longitude"]));
dispatch(setCitiesList(citiesList));
const response = await fetch('https://codefirst.iut.uca.fr/containers/enzojolys-r-dash_container/Ecuries', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(newTeam)
});
const team = await response.json();
dispatch({
type: ADD_TEAM,
payload: team
});
} catch (error) {
console.log('Error---------', error);
//dispatch(fetchDataRejected(error))
}
}
}
export const getTeamsList = () => {
return async dispatch => {
try {
const teamsPromise = await fetch('https://codefirst.iut.uca.fr/containers/enzojolys-r-dash_container/Ecuries');
const teamsListJson = await teamsPromise.json();
const teamsList: Team[] = teamsListJson.map(elt => new Team(elt["name"], elt["owner"], elt["users"], elt["logo"]));
dispatch(setTeamsList(teamsList));
} catch (error) {
console.log('Error---------', error);
//dispatch(fetchDataRejected(error))

@ -0,0 +1,36 @@
import { Member } from "../../core/Member";
import { Owner } from "../../core/Owner";
import { Team } from "../../core/Team";
import { User } from "../../core/User";
import { WaitingMember } from "../../core/WaitingMember";
import { FETCH_USERS } from "../Constants";
import { DtoUserEcurie } from "../dto/dtoUserEcurie";
export const setUsersList = (usersList: User[]) => {
return {
type: FETCH_USERS,
payload: usersList,
};
}
export const getUsersList = (team: Team) => {
return async dispatch => {
try {
const usersPromise = await fetch('https://codefirst.iut.uca.fr/containers/enzojolys-r-dash_container/Pilotes/'+team);
const usersListJson = await usersPromise.json();
const dto: DtoUserEcurie = usersListJson.map(elt => new DtoUserEcurie(elt["owner"], elt["members"], elt["waitingMember"]));
const usersList: User[] = []
usersList.push(dto.getOwner())
dto.getMembers().forEach(element => {
usersList.push(element);
});
dto.getWaitingMember().forEach(element => {
usersList.push(element)
});
dispatch(setUsersList(usersList));
} catch (error) {
console.log('Error---------', error);
//dispatch(fetchDataRejected(error))
}
}
}

@ -0,0 +1,37 @@
import { Member } from "../../core/Member";
import { Owner } from "../../core/Owner";
import { WaitingMember } from "../../core/WaitingMember";
export class DtoUserEcurie {
private owner: Owner;
private members: Member[];
private waitingMember: WaitingMember[];
constructor(owner: Owner, members: Member[], waitingMember: WaitingMember[]) {
this.owner = owner;
this.members = members;
this.waitingMember = waitingMember;
}
getOwner() {
return this.owner;
}
setOwner(owner: Owner) {
this.owner = owner;
}
getMembers() {
return this.members;
}
setMembers(members: Member[]) {
this.members = members;
}
getWaitingMember() {
return this.waitingMember;
}
setWaitingMember(waitingMember: WaitingMember[]) {
this.waitingMember = waitingMember;
}
}

@ -1,32 +1,25 @@
import { addXlsFile } from "../actions/sessions";
import { addNewTeam } from "../actions/teams";
import { FETCH_SESSIONS, FETCH_TEAMS, FETCH_USERS, ADD_TEAM, ADD_FILE } from "../Constants";
const initialState = {
Teams: [],
Owners: [],
Members: [],
WaitingMembers: [],
Laps: [],
Points: [],
Sessions: [],
Tracks: [],
teams: [],
users: [],
sessions: [],
};
const appReducer = (state = initialState, action: { type: any; payload: any; }) => {
switch (action.type) {
case 'Fetch_Teams':
return { ...state, cities: [...state.Teams, action.payload] };
case 'Fetch_Owners':
return { ...state, cities: [...state.Owners, action.payload] };
case 'Fetch_Members':
return { ...state, cities: [...state.Members, action.payload] };
case 'Fetch_WaitingMembers':
return { ...state, cities: [...state.WaitingMembers, action.payload] };
case 'Fetch_laps':
return { ...state, cities: [...state.Laps, action.payload] };
case 'Fetch_Points':
return { ...state, cities: [...state.Points, action.payload] };
case 'Fetch_Sessions':
return { ...state, cities: [...state.Sessions, action.payload] };
case 'Fetch_Tracks':
return { ...state, cities: [...state.Tracks, action.payload] };
case ADD_TEAM:
return { ...state, teams: [...state.teams, addNewTeam] };
case ADD_FILE:
return { ...state, sessions: [...state.sessions, addXlsFile] };
case FETCH_TEAMS:
return { ...state, teams: action.payload };
case FETCH_USERS:
return { ...state, users: action.payload };
case FETCH_SESSIONS:
return { ...state, sessions: action.payload };
default:
return state;
}

@ -1,8 +1,10 @@
import React, { useState } from 'react';
import React, { useEffect, useState } from 'react';
import { Button, Pressable } from 'react-native';
import { StyleSheet, Text, View, Image, TextInput } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import * as DocumentPicker from 'expo-document-picker';
import { useDispatch, useSelector } from 'react-redux';
import { addNewTeam } from '../redux/actions/teams';
export default function CreateTeam(props: { navigation: any }) {
const { navigation } = props;
@ -20,6 +22,17 @@ export default function CreateTeam(props: { navigation: any }) {
}
};
const nList = useSelector(state => state.appReducer.teams);
const dispatch = useDispatch();
useEffect(() => {
const addTeams = async () => {
await dispatch(addNewTeam());
};
addTeams();
}, [dispatch]);
return (
<SafeAreaView style={styles.container}>
<View style={styles.maincard}>

@ -1,11 +1,12 @@
import { FlatList, StyleSheet, Text, View } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import { SearchBar } from '@rneui/base';
import React, { useState } from 'react';
import React, { useState, useEffect } from 'react';
import { TEAMS } from '../stub/stub';
import TeamListItem from '../components/TeamCmp';
import { Team } from '../core/Team';
import { useDispatch, useSelector } from 'react-redux';
import { getTeamsList } from "../redux/actions/teams";
export default function Team_Browser(props: { navigation: any }) {
@ -21,6 +22,17 @@ export default function Team_Browser(props: { navigation: any }) {
item.getName().toLowerCase().includes(search.toLowerCase())
) : TEAMS;
const nList = useSelector(state => state.appReducer.teams);
const dispatch = useDispatch();
useEffect(() => {
const loadTeams = async () => {
await dispatch(getTeamsList());
};
loadTeams();
}, [dispatch]);
return (
<SafeAreaView style={styles.container}>
@ -33,7 +45,7 @@ export default function Team_Browser(props: { navigation: any }) {
onChangeText={setSearch}
/>
<FlatList
data={filteredData}
data={nList}
renderItem={({ item }) => <TeamListItem team={item} onPress={handlePress}/>} />
</View>

Loading…
Cancel
Save