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 c262912..60724c9 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/redux/Constants.ts b/R-Dash/redux/Constants.ts index e69de29..7d5b0d7 100644 --- a/R-Dash/redux/Constants.ts +++ b/R-Dash/redux/Constants.ts @@ -0,0 +1,53 @@ +import { Geocalisation } from "../core/Geocalisation"; +import { Lap } from "../core/Lap"; +import { Member } from "../core/Member"; +import { Owner } from "../core/Owner"; +import { Point } from "../core/Point"; +import { Session } from "../core/Session"; +import { SessionType } from "../core/SessionType"; +import { Team } from "../core/Team"; +import { User } from "../core/User"; +import { WaitingMember } from "../core/WaitingMember"; + +const owner1 = new Owner("eric", "PASSWORD123", "eric@gmail.com", []); +const owner2 = new Owner("castor", "PASSWORD123", "castor@gmail.com", []); + +export const Fetch_Users: User[] = [ + new Member("stickman", "PASSWORD123", "stickman@gmail.com", []), + new Member("crapaud", "PASSWORD123", "crapaud@gmail.com", []), + new WaitingMember("mcdo", "PASSWORD123", "mcdo@gmail.com", []), + new WaitingMember("bucheron", "PASSWORD123", "bucheron@gmail.com", []), +] + +export const Fetch_Teams: Team[] = [ + new Team("La team 1", owner1, Fetch_Users), + new Team("Bat INFO", owner2, Fetch_Users) +] + +export const Fetch_Laps: Lap[] = [ +] + + + +const geo1 = new Geocalisation(40.7128, -74.0060); +const geo2 = new Geocalisation(51.5074, -0.1278); +const geo3 = new Geocalisation(35.6895, 139.6917); + + +const point1 = new Point(geo1, 120, 10, 3, 50, 90, 20, 10, 20, 100); +const point2 = new Point(geo2, 130, 15, 4, 60, 100, 30, 15, 25, 120); +const point3 = new Point(geo3, 140, 20, 5, 70, 110, 40, 20, 30, 140); + + +const lap1 = new Lap(1, [point1, point2], 250); +const lap2 = new Lap(2, [point2, point3], 300); +const lap3 = new Lap(3, [point3, point1], 350); + + +const session1 = new Session("First Session", [lap1, lap2], SessionType.PrivateTest); +const session2 = new Session("Second Session", [lap2, lap3], SessionType.Qualification); +const session3 = new Session("Third Session", [lap3, lap1], SessionType.Unknown); + +export const Fetch_Sessions: Session[] = [ + session1, session2, session3 +] \ 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..4d51e2f --- /dev/null +++ b/R-Dash/redux/actions/sessions.ts @@ -0,0 +1,35 @@ +import { Geocalisation } from "../../core/Geocalisation"; +import { Lap } from "../../core/Lap"; +import { Point } from "../../core/Point"; +import { Session } from "../../core/Session"; +import { Fetch_Sessions } from "../Constants"; + +export const setSessionsList = (sessionsList: Session[]) => { + return { + type: Fetch_Sessions, + payload: sessionsList, + }; +} + +export const getSessionsList = () => { + return async dispatch => { + try { + const sessionsPromise = await fetch('https://codefirst.iut.uca.fr/containers/enzojolys-r-dash_container/Sessions'); + 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..407dc68 100644 --- a/R-Dash/redux/actions/teams.ts +++ b/R-Dash/redux/actions/teams.ts @@ -1,20 +1,21 @@ import { Team } from "../../core/Team"; import { Fetch_Teams } from "../Constants"; -export const setCitiesList = (citiesList: Team[]) => { +export const setTeamsList = (teamsList: Team[]) => { return { type: Fetch_Teams, - payload: citiesList, + payload: teamsList, }; } -export const getCitiesList = () => { +export const getTeamsList = () => { 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 teamsPromise = await fetch('https://codefirst.iut.uca.fr/containers/enzojolys-r-dash_container/Ecuries'); + console.log(teamsPromise); + 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)) diff --git a/R-Dash/redux/actions/users.ts b/R-Dash/redux/actions/users.ts new file mode 100644 index 0000000..b9eeb27 --- /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'); + 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..30fb29a 100644 --- a/R-Dash/redux/reducers/appReducer.ts +++ b/R-Dash/redux/reducers/appReducer.ts @@ -1,32 +1,17 @@ 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] }; + return { ...state, teams: [...state.teams, action.payload] }; + case 'Fetch_Users': + return { ...state, users: [...state.users, action.payload] }; case 'Fetch_Sessions': - return { ...state, cities: [...state.Sessions, action.payload] }; - case 'Fetch_Tracks': - return { ...state, cities: [...state.Tracks, action.payload] }; + return { ...state, sessions: [...state.sessions, action.payload] }; default: return state; } 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} /> } />