diff --git a/R-Dash/App.tsx b/R-Dash/App.tsx
index c5531cd..9d75d5e 100644
--- a/R-Dash/App.tsx
+++ b/R-Dash/App.tsx
@@ -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 (
-
-
-
-
-
+
+
+
+
+
+
+
);
}
diff --git a/R-Dash/core/Lap.ts b/R-Dash/core/Lap.ts
index fc45595..430466f 100644
--- a/R-Dash/core/Lap.ts
+++ b/R-Dash/core/Lap.ts
@@ -14,8 +14,8 @@ export class Lap {
getNumber(){
return this.number;
}
- setNumber(){
- return this.number;
+ setNumber(number :number){
+ this.number = number;
}
getPoints() {
diff --git a/R-Dash/core/Session.ts b/R-Dash/core/Session.ts
index 80e1c40..3adabdb 100644
--- a/R-Dash/core/Session.ts
+++ b/R-Dash/core/Session.ts
@@ -1,4 +1,5 @@
import { Lap } from "./Lap";
+import { SessionType } from "./SessionType";
export class Session {
private name: string;
diff --git a/R-Dash/core/Team.ts b/R-Dash/core/Team.ts
index fe9811a..bafbecf 100644
--- a/R-Dash/core/Team.ts
+++ b/R-Dash/core/Team.ts
@@ -7,14 +7,13 @@ export class Team {
private users: User[];
private logo: HTMLImageElement;
- constructor(name: string, owner: User,users: User[] = [], logo: HTMLImageElement = require('../assets/images/people.jpg')) {
+ constructor(name: string, owner: User ,users: User[] = [], logo: HTMLImageElement = require('../assets/images/people.jpg')) {
this.name = name;
this.owner = owner;
this.users = users;
this.logo = logo;
}
-
getName() {
return this.name;
}
diff --git a/R-Dash/redux/Constants.ts b/R-Dash/redux/Constants.ts
index e69de29..c64d810 100644
--- a/R-Dash/redux/Constants.ts
+++ b/R-Dash/redux/Constants.ts
@@ -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';
\ No newline at end of file
diff --git a/R-Dash/redux/actions/sessions.ts b/R-Dash/redux/actions/sessions.ts
new file mode 100644
index 0000000..f883fd5
--- /dev/null
+++ b/R-Dash/redux/actions/sessions.ts
@@ -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))
+ }
+ }
+}
\ No newline at end of file
diff --git a/R-Dash/redux/actions/teams.ts b/R-Dash/redux/actions/teams.ts
index f08baa3..5f6c042 100644
--- a/R-Dash/redux/actions/teams.ts
+++ b/R-Dash/redux/actions/teams.ts
@@ -1,23 +1,45 @@
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))
}
}
-}
\ No newline at end of file
+}
+
+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))
+ }
+ }
+}
\ No newline at end of file
diff --git a/R-Dash/redux/actions/users.ts b/R-Dash/redux/actions/users.ts
new file mode 100644
index 0000000..32f89b7
--- /dev/null
+++ b/R-Dash/redux/actions/users.ts
@@ -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))
+ }
+ }
+}
\ No newline at end of file
diff --git a/R-Dash/redux/dto/dtoUserEcurie.ts b/R-Dash/redux/dto/dtoUserEcurie.ts
new file mode 100644
index 0000000..7b51e62
--- /dev/null
+++ b/R-Dash/redux/dto/dtoUserEcurie.ts
@@ -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;
+ }
+
+}
\ No newline at end of file
diff --git a/R-Dash/redux/reducers/appReducer.ts b/R-Dash/redux/reducers/appReducer.ts
index 74da99e..0962117 100644
--- a/R-Dash/redux/reducers/appReducer.ts
+++ b/R-Dash/redux/reducers/appReducer.ts
@@ -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;
}
diff --git a/R-Dash/screens/CreateTeam.tsx b/R-Dash/screens/CreateTeam.tsx
index 2a836b8..292cc8b 100644
--- a/R-Dash/screens/CreateTeam.tsx
+++ b/R-Dash/screens/CreateTeam.tsx
@@ -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 (
diff --git a/R-Dash/screens/Team_Browser.tsx b/R-Dash/screens/Team_Browser.tsx
index cd4c88d..8d5756b 100644
--- a/R-Dash/screens/Team_Browser.tsx
+++ b/R-Dash/screens/Team_Browser.tsx
@@ -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 }) {
@@ -19,7 +20,18 @@ export default function Team_Browser(props: { navigation: any }) {
const filteredData = search !== '' ? TEAMS.filter((item) =>
item.getName().toLowerCase().includes(search.toLowerCase())
- ) : TEAMS;
+ ) : TEAMS;
+
+ const nList = useSelector(state => state.appReducer.teams);
+
+ const dispatch = useDispatch();
+
+ useEffect(() => {
+ const loadTeams = async () => {
+ await dispatch(getTeamsList());
+ };
+ loadTeams();
+ }, [dispatch]);
return (
@@ -33,7 +45,7 @@ export default function Team_Browser(props: { navigation: any }) {
onChangeText={setSearch}
/>
} />