From 89282974882bf6c08a736a47824a20bc6bfccf87 Mon Sep 17 00:00:00 2001 From: Alberto Defendi <1369-ahl-berto@users.noreply.gitlab.inf.unibz.it> Date: Tue, 22 Jun 2021 15:00:21 +0200 Subject: [PATCH] Elements to manage vehicles. --- src/api/getVehicleList.ts | 10 +++++++++ src/api/routes.ts | 1 + src/components/Dashboard/Dashboard.tsx | 2 ++ src/components/Dashboard/HomePage/NavBar.tsx | 13 +++++++++++ .../Dashboard/VehiclePage/InsertVeicle.tsx | 7 ++++++ .../Dashboard/VehiclePage/VehicleList.tsx | 17 ++++++++++++++ .../Dashboard/VehiclePage/VehiclePage.tsx | 8 +++++++ src/hooks/useVehicle.ts | 22 +++++++++++++++++++ src/types/VehicleType.ts | 7 ++++++ 9 files changed, 87 insertions(+) create mode 100644 src/api/getVehicleList.ts create mode 100644 src/components/Dashboard/VehiclePage/InsertVeicle.tsx create mode 100644 src/components/Dashboard/VehiclePage/VehicleList.tsx create mode 100644 src/components/Dashboard/VehiclePage/VehiclePage.tsx create mode 100644 src/hooks/useVehicle.ts create mode 100644 src/types/VehicleType.ts diff --git a/src/api/getVehicleList.ts b/src/api/getVehicleList.ts new file mode 100644 index 0000000..092bece --- /dev/null +++ b/src/api/getVehicleList.ts @@ -0,0 +1,10 @@ +import axios from 'axios'; +import { VehicleType } from 'types/VehicleType'; + +/** + * @async + * Perform GET to get a list of all the veicle. + * @returns a list of reservations. + */ +export const getVehicleList = async (): Promise<VehicleType[]> => + axios(`/api/web/vehicles`).then((res) => res.data); diff --git a/src/api/routes.ts b/src/api/routes.ts index cd70399..dbe9e68 100644 --- a/src/api/routes.ts +++ b/src/api/routes.ts @@ -9,6 +9,7 @@ export enum AuthRoutes { profile = '/profile', reservation = '/reservation', choseRole = '/choseRole', + veicle = '/veicle', } /** diff --git a/src/components/Dashboard/Dashboard.tsx b/src/components/Dashboard/Dashboard.tsx index 4453cc5..3d66bfb 100644 --- a/src/components/Dashboard/Dashboard.tsx +++ b/src/components/Dashboard/Dashboard.tsx @@ -5,6 +5,7 @@ import { AuthRoutes } from 'api/routes'; import { HomePage } from './HomePage/HomePage'; import { ProfilePage } from './ProfilePage/ProfilePage'; import { ReservationPage } from './ReservationPage/ReservationPage'; +import { VeiclePage } from './VehiclePage/VehiclePage'; export const Dashboard: FC = () => { const { path } = useRouteMatch(); @@ -16,6 +17,7 @@ export const Dashboard: FC = () => { path={`${path}${AuthRoutes.reservation}`} component={ReservationPage} /> + <Route path={`${path}${AuthRoutes.veicle}`} component={VeiclePage} /> </> ); }; diff --git a/src/components/Dashboard/HomePage/NavBar.tsx b/src/components/Dashboard/HomePage/NavBar.tsx index 4d8f56e..49bd2ea 100644 --- a/src/components/Dashboard/HomePage/NavBar.tsx +++ b/src/components/Dashboard/HomePage/NavBar.tsx @@ -3,6 +3,7 @@ import { Tabs, Tab, Grid, Hidden } from '@material-ui/core'; import HomeIcon from '@material-ui/icons/Home'; import ImportContactsIcon from '@material-ui/icons/ImportContacts'; import AccountCircleIcon from '@material-ui/icons/AccountCircle'; +import DriveEtaIcon from '@material-ui/icons/DriveEta'; import { AuthRoutes } from 'api/routes'; import { useHistory } from 'react-router-dom'; import { navBarStyle } from './NavBar.style'; @@ -49,6 +50,12 @@ export const NavBar: FC = () => { className={classes.tabPan} icon={<AccountCircleIcon className={classes.tabIcon} />} /> + <Tab + label="Veicles" + value={`${AuthRoutes.dashboard}${AuthRoutes.veicle}`} + className={classes.tabPan} + icon={<DriveEtaIcon className={classes.tabIcon} />} + /> </Tabs> </Hidden> @@ -79,6 +86,12 @@ export const NavBar: FC = () => { icon={<AccountCircleIcon className={classes.tabIconSmall} />} className={classes.tabPanSmall} /> + <Tab + label="" + value={`${AuthRoutes.dashboard}${AuthRoutes.veicle}`} + icon={<DriveEtaIcon className={classes.tabIconSmall} />} + className={classes.tabPanSmall} + /> </Tabs> </Hidden> </div> diff --git a/src/components/Dashboard/VehiclePage/InsertVeicle.tsx b/src/components/Dashboard/VehiclePage/InsertVeicle.tsx new file mode 100644 index 0000000..8e7d378 --- /dev/null +++ b/src/components/Dashboard/VehiclePage/InsertVeicle.tsx @@ -0,0 +1,7 @@ +import React, { FC } from 'react'; + +export const InsertVeicle: FC = () => ( + <div data-testid="NotFound"> + <h1>Page not found</h1> + </div> +); diff --git a/src/components/Dashboard/VehiclePage/VehicleList.tsx b/src/components/Dashboard/VehiclePage/VehicleList.tsx new file mode 100644 index 0000000..479a6c4 --- /dev/null +++ b/src/components/Dashboard/VehiclePage/VehicleList.tsx @@ -0,0 +1,17 @@ +import React, { FC } from 'react'; +import { useVehicle } from 'hooks/useVehicle'; + +export const VehicleList: FC = () => { + const vehicles = useVehicle(); + return ( + <div data-testid="NotFound"> + {vehicles.length !== 0 ? ( + vehicles.map((vehicle, index) => ( + <h1 key={vehicle.plateNumber}>🚗{vehicle.carModel}</h1> + )) + ) : ( + <h1>No vehicles</h1> + )} + </div> + ); +}; diff --git a/src/components/Dashboard/VehiclePage/VehiclePage.tsx b/src/components/Dashboard/VehiclePage/VehiclePage.tsx new file mode 100644 index 0000000..3e6255f --- /dev/null +++ b/src/components/Dashboard/VehiclePage/VehiclePage.tsx @@ -0,0 +1,8 @@ +import React, { FC } from 'react'; +import { VehicleList } from './VehicleList'; + +export const VeiclePage: FC = () => ( + <div data-testid="VehiclePage"> + <VehicleList /> + </div> +); diff --git a/src/hooks/useVehicle.ts b/src/hooks/useVehicle.ts new file mode 100644 index 0000000..1261dc3 --- /dev/null +++ b/src/hooks/useVehicle.ts @@ -0,0 +1,22 @@ +import { getVehicleList } from 'api/getVehicleList'; +import { useMemo, useState } from 'react'; +import { VehicleType } from 'types/VehicleType'; + +export const useVehicle = (): VehicleType[] => { + const [vehicleList, setVehicleList] = useState<VehicleType[]>([]); + const [isLoading, setIsLoading] = useState<boolean>(true); + useMemo(() => { + let isMounted = true; + + getVehicleList().then((list) => { + if (isMounted) { + setVehicleList(list); + setIsLoading(false); + } + }); + return () => { + isMounted = false; + }; + }, [isLoading]); + return vehicleList; +}; diff --git a/src/types/VehicleType.ts b/src/types/VehicleType.ts new file mode 100644 index 0000000..01ebf84 --- /dev/null +++ b/src/types/VehicleType.ts @@ -0,0 +1,7 @@ +export type VehicleType = { + owner: null; + user: null; + plateNumber: string; + carModel: string; + wheelchair: boolean; +}; -- GitLab