From 8ab32787d6922b0c38fbc62689752e1c6d984c63 Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Mon, 30 Oct 2023 13:11:31 +0200
Subject: [PATCH 01/20] Add routes
---
src/App.js | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/App.js b/src/App.js
index b5b8479..6996257 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,10 +1,15 @@
import './App.css';
-import { Routes } from 'react-router-dom';
+import { Route, Routes } from 'react-router-dom';
+import Cars from './components/Cars';
+import Main from './components/Main';
function App() {
return (
-
+
+ } />
+ } />
+
);
}
From 71fa58aa5a6c15f6054eb4e5ff38d29245bb76d0 Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Mon, 30 Oct 2023 13:12:18 +0200
Subject: [PATCH 02/20] Create carsSlice
---
src/redux/cars/carsSlice.js | 50 +++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
create mode 100644 src/redux/cars/carsSlice.js
diff --git a/src/redux/cars/carsSlice.js b/src/redux/cars/carsSlice.js
new file mode 100644
index 0000000..036fb4f
--- /dev/null
+++ b/src/redux/cars/carsSlice.js
@@ -0,0 +1,50 @@
+import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
+import axios from 'axios';
+
+const initialState = {
+ cars: [],
+ isLoading: false,
+ error: null,
+};
+
+const url = 'http://localhost:3000/api/v1/users/1/cars';
+
+export const getCars = createAsyncThunk(
+ 'cars/getCars',
+ async () => {
+ try {
+ const response = await axios(url);
+ console.log(response.data);
+ return response.data;
+ } catch (error) {
+ console.log(error);
+ return error;
+ }
+ },
+);
+
+const carsSlice = createSlice({
+ name: 'cars',
+ initialState,
+ reducers: {},
+ extraReducers: {
+ [getCars.pending]: (state) => {
+ state.isLoading = true;
+ },
+ [getCars.fulfilled]: (state, action) => {
+ const data = action.payload;
+ const newdata = data.map((car) => ({
+ id: car.car_id,
+ name: car.car_name,
+ description: car.description,
+ }));
+ state.isLoading = false;
+ state.cars = newdata;
+ },
+ [getCars.rejected]: (state) => {
+ state.isLoading = false;
+ },
+ },
+});
+
+export default carsSlice.reducer;
From cad70973e036a2a379ab424d3d5a1ed03f68a3c3 Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Mon, 30 Oct 2023 13:12:54 +0200
Subject: [PATCH 03/20] Add carsReducer
---
src/redux/store.js | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/redux/store.js b/src/redux/store.js
index 99fe2cc..c601a43 100644
--- a/src/redux/store.js
+++ b/src/redux/store.js
@@ -1,5 +1,10 @@
import { configureStore } from '@reduxjs/toolkit';
+import carsReducer from './cars/carsSlice';
-const store = configureStore({ reducer: {} });
+const store = configureStore({
+ reducer: {
+ cars: carsReducer,
+ },
+});
export default store;
From 0e180de8e90e83ce821a6510e34f1aa4ab02d833 Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Mon, 30 Oct 2023 13:13:15 +0200
Subject: [PATCH 04/20] Add Cars Component
---
src/components/Cars.js | 30 ++++++++++++++++++++++++++++++
src/components/Main.js | 7 +++++++
2 files changed, 37 insertions(+)
create mode 100644 src/components/Cars.js
create mode 100644 src/components/Main.js
diff --git a/src/components/Cars.js b/src/components/Cars.js
new file mode 100644
index 0000000..6af8fcd
--- /dev/null
+++ b/src/components/Cars.js
@@ -0,0 +1,30 @@
+import React, { useEffect } from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+import { getCars } from '../redux/cars/carsSlice';
+
+const Cars = () => {
+ const { cars, isLoading } = useSelector((state) => state.cars);
+ const dispatch = useDispatch();
+ useEffect(() => {
+ dispatch(getCars());
+ }, [dispatch, cars.length]);
+
+ if (isLoading) {
+ return (
+
+
Loading...
+
+ );
+ }
+
+ return (
+
+
+ Cars Listed:
+ {cars.length}
+
+
+ );
+};
+
+export default Cars;
diff --git a/src/components/Main.js b/src/components/Main.js
new file mode 100644
index 0000000..5c71166
--- /dev/null
+++ b/src/components/Main.js
@@ -0,0 +1,7 @@
+import React from 'react';
+
+const Main = () => (
+ Main
+);
+
+export default Main;
From 6df935953c56c6260109b66d6f2c02c2cf7c84b0 Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Mon, 30 Oct 2023 13:13:52 +0200
Subject: [PATCH 05/20] Add Axios
---
package-lock.json | 29 +++++++++++++++++++++++++++++
package.json | 1 +
2 files changed, 30 insertions(+)
diff --git a/package-lock.json b/package-lock.json
index b8237d1..ca25027 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,6 +12,7 @@
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
+ "axios": "^1.6.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-redux": "^8.1.3",
@@ -5400,6 +5401,29 @@
"node": ">=4"
}
},
+ "node_modules/axios": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
+ "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
+ "dependencies": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/axios/node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/axobject-query": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
@@ -15519,6 +15543,11 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"node_modules/psl": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
diff --git a/package.json b/package.json
index 61e1b71..2fe64b0 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,7 @@
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
+ "axios": "^1.6.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-redux": "^8.1.3",
From 207ad7a24e26538b1c012392b6cb4f08ebef12dd Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Mon, 30 Oct 2023 17:39:58 +0200
Subject: [PATCH 06/20] Add slider functionality
---
package-lock.json | 1 +
package.json | 1 +
src/CSS/Cars.module.css | 11 ++++++++++
src/components/Car.js | 44 +++++++++++++++++++++++++++++++++++++
src/components/Cars.js | 18 +++++++++++++++
src/components/Slider.js | 18 +++++++++++++++
src/redux/cars/carsSlice.js | 22 +++++++++++++++----
7 files changed, 111 insertions(+), 4 deletions(-)
create mode 100644 src/CSS/Cars.module.css
create mode 100644 src/components/Car.js
create mode 100644 src/components/Slider.js
diff --git a/package-lock.json b/package-lock.json
index ca25027..ede9a28 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,6 +13,7 @@
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"axios": "^1.6.0",
+ "prop-types": "^15.8.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-redux": "^8.1.3",
diff --git a/package.json b/package.json
index 2fe64b0..42886b5 100644
--- a/package.json
+++ b/package.json
@@ -8,6 +8,7 @@
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"axios": "^1.6.0",
+ "prop-types": "^15.8.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-redux": "^8.1.3",
diff --git a/src/CSS/Cars.module.css b/src/CSS/Cars.module.css
new file mode 100644
index 0000000..719e91b
--- /dev/null
+++ b/src/CSS/Cars.module.css
@@ -0,0 +1,11 @@
+.cars {
+ display: flex;
+}
+
+.dblock {
+ display: block;
+}
+
+.dnone {
+ display: none;
+}
diff --git a/src/components/Car.js b/src/components/Car.js
new file mode 100644
index 0000000..ef60ee5
--- /dev/null
+++ b/src/components/Car.js
@@ -0,0 +1,44 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+
+const Car = ({
+ name, image, description,
+}) => (
+
+
+
+
+
+
+ Car Name:
+ {' '}
+ {name}
+
+
+ Car Description:
+ {' '}
+ {description}
+
+
+
+
+
+);
+
+Car.propTypes = {
+ name: PropTypes.string,
+ image: PropTypes.string,
+ description: PropTypes.string,
+};
+
+Car.defaultProps = {
+ name: '',
+ image: '',
+ description: '',
+};
+
+export default Car;
diff --git a/src/components/Cars.js b/src/components/Cars.js
index 6af8fcd..faf46ce 100644
--- a/src/components/Cars.js
+++ b/src/components/Cars.js
@@ -1,9 +1,13 @@
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { getCars } from '../redux/cars/carsSlice';
+import Car from './Car';
+import styles from '../CSS/Cars.module.css';
+import Slider from './Slider';
const Cars = () => {
const { cars, isLoading } = useSelector((state) => state.cars);
+ const slideIndex = useSelector((state) => state.cars.value);
const dispatch = useDispatch();
useEffect(() => {
dispatch(getCars());
@@ -23,6 +27,20 @@ const Cars = () => {
Cars Listed:
{cars.length}
+
+
+ {cars.map((car) => (
+
+
+
+ ))}
+
+
+
);
};
diff --git a/src/components/Slider.js b/src/components/Slider.js
new file mode 100644
index 0000000..5994dfa
--- /dev/null
+++ b/src/components/Slider.js
@@ -0,0 +1,18 @@
+import React from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+import { nextCar, prevCar } from '../redux/cars/carsSlice';
+
+const Slider = () => {
+ const sliderIndex = useSelector((state) => state.cars.value);
+ console.log('sliderIndex', sliderIndex);
+ const dispatch = useDispatch();
+ return (
+
+
+
+
+
+ );
+};
+
+export default Slider;
diff --git a/src/redux/cars/carsSlice.js b/src/redux/cars/carsSlice.js
index 036fb4f..402ae3d 100644
--- a/src/redux/cars/carsSlice.js
+++ b/src/redux/cars/carsSlice.js
@@ -5,6 +5,8 @@ const initialState = {
cars: [],
isLoading: false,
error: null,
+ value: null,
+ length: 4,
};
const url = 'http://localhost:3000/api/v1/users/1/cars';
@@ -14,7 +16,6 @@ export const getCars = createAsyncThunk(
async () => {
try {
const response = await axios(url);
- console.log(response.data);
return response.data;
} catch (error) {
console.log(error);
@@ -26,7 +27,17 @@ export const getCars = createAsyncThunk(
const carsSlice = createSlice({
name: 'cars',
initialState,
- reducers: {},
+ reducers: {
+ nextCar(state, action) {
+ // console.log('action', action.payload);
+ // console.log('state', state);
+ state.value = action.payload > state.length ? 1 : action.payload;
+ },
+ prevCar(state, action) {
+ state.value = action.payload < 1 ? state.length : action.payload;
+ },
+ dotCar() {},
+ },
extraReducers: {
[getCars.pending]: (state) => {
state.isLoading = true;
@@ -34,12 +45,14 @@ const carsSlice = createSlice({
[getCars.fulfilled]: (state, action) => {
const data = action.payload;
const newdata = data.map((car) => ({
- id: car.car_id,
- name: car.car_name,
+ id: car.id,
+ name: car.name,
description: car.description,
}));
state.isLoading = false;
state.cars = newdata;
+ state.length = newdata.length;
+ state.value = newdata.length - (newdata.length - 1);
},
[getCars.rejected]: (state) => {
state.isLoading = false;
@@ -47,4 +60,5 @@ const carsSlice = createSlice({
},
});
+export const { nextCar, prevCar, dotCar } = carsSlice.actions;
export default carsSlice.reducer;
From 201948743db062b1c4b4d1fd3ef298b0dbf03773 Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Mon, 30 Oct 2023 18:15:34 +0200
Subject: [PATCH 07/20] Add basic styles for cars
---
src/CSS/Car.module.css | 8 ++++++++
src/CSS/Cars.module.css | 4 ++++
src/CSS/Slider.module.css | 4 ++++
src/components/Car.js | 5 +++--
src/components/Cars.js | 7 +++++++
src/components/Slider.js | 4 ++--
src/redux/cars/carsSlice.js | 2 +-
7 files changed, 29 insertions(+), 5 deletions(-)
create mode 100644 src/CSS/Car.module.css
create mode 100644 src/CSS/Slider.module.css
diff --git a/src/CSS/Car.module.css b/src/CSS/Car.module.css
new file mode 100644
index 0000000..6cd2d9d
--- /dev/null
+++ b/src/CSS/Car.module.css
@@ -0,0 +1,8 @@
+.car {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ border: 2px solid black;
+ margin: 5%;
+ text-align: center;
+}
diff --git a/src/CSS/Cars.module.css b/src/CSS/Cars.module.css
index 719e91b..2e738e1 100644
--- a/src/CSS/Cars.module.css
+++ b/src/CSS/Cars.module.css
@@ -1,3 +1,7 @@
+body {
+ margin: 2%;
+}
+
.cars {
display: flex;
}
diff --git a/src/CSS/Slider.module.css b/src/CSS/Slider.module.css
new file mode 100644
index 0000000..886f727
--- /dev/null
+++ b/src/CSS/Slider.module.css
@@ -0,0 +1,4 @@
+.prevnextbtns {
+ display: flex;
+ justify-content: space-between;
+}
diff --git a/src/components/Car.js b/src/components/Car.js
index ef60ee5..9ae52a4 100644
--- a/src/components/Car.js
+++ b/src/components/Car.js
@@ -1,12 +1,13 @@
import React from 'react';
import PropTypes from 'prop-types';
+import styles from '../CSS/Car.module.css';
const Car = ({
name, image, description,
}) => (
-
+
-
+
diff --git a/src/components/Cars.js b/src/components/Cars.js
index faf46ce..9c53e24 100644
--- a/src/components/Cars.js
+++ b/src/components/Cars.js
@@ -23,8 +23,15 @@ const Cars = () => {
return (
+
+ Cars Avaliable
+
+
+ Please select a vehicle
+
Cars Listed:
+ {' '}
{cars.length}
diff --git a/src/components/Slider.js b/src/components/Slider.js
index 5994dfa..6ce6123 100644
--- a/src/components/Slider.js
+++ b/src/components/Slider.js
@@ -1,13 +1,13 @@
import React from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { nextCar, prevCar } from '../redux/cars/carsSlice';
+import styles from '../CSS/Slider.module.css';
const Slider = () => {
const sliderIndex = useSelector((state) => state.cars.value);
- console.log('sliderIndex', sliderIndex);
const dispatch = useDispatch();
return (
-
+
diff --git a/src/redux/cars/carsSlice.js b/src/redux/cars/carsSlice.js
index 402ae3d..987aeaf 100644
--- a/src/redux/cars/carsSlice.js
+++ b/src/redux/cars/carsSlice.js
@@ -6,7 +6,7 @@ const initialState = {
isLoading: false,
error: null,
value: null,
- length: 4,
+ length: null,
};
const url = 'http://localhost:3000/api/v1/users/1/cars';
From a7a84d4092895621c33ed90a6acb4972df8f7c9c Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Mon, 30 Oct 2023 18:33:16 +0200
Subject: [PATCH 08/20] Add Nav Menu component
---
src/App.js | 2 ++
src/CSS/NavMenu.module.css | 8 ++++++++
src/components/NavMenu.js | 27 +++++++++++++++++++++++++++
3 files changed, 37 insertions(+)
create mode 100644 src/CSS/NavMenu.module.css
create mode 100644 src/components/NavMenu.js
diff --git a/src/App.js b/src/App.js
index 6996257..54e7246 100644
--- a/src/App.js
+++ b/src/App.js
@@ -2,10 +2,12 @@ import './App.css';
import { Route, Routes } from 'react-router-dom';
import Cars from './components/Cars';
import Main from './components/Main';
+import NavMenu from './components/NavMenu';
function App() {
return (
+
} />
} />
diff --git a/src/CSS/NavMenu.module.css b/src/CSS/NavMenu.module.css
new file mode 100644
index 0000000..dbaeb63
--- /dev/null
+++ b/src/CSS/NavMenu.module.css
@@ -0,0 +1,8 @@
+.navigation {
+ display: block;
+}
+
+.navlist {
+ display: flex;
+ flex-direction: column;
+}
diff --git a/src/components/NavMenu.js b/src/components/NavMenu.js
new file mode 100644
index 0000000..cb2ba1c
--- /dev/null
+++ b/src/components/NavMenu.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import { NavLink } from 'react-router-dom';
+import styles from '../CSS/NavMenu.module.css';
+
+const NavMenu = () => (
+
+
+
+
+);
+
+export default NavMenu;
From 128bac85bdf79970a925c637e03cfc79c622b9b5 Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Mon, 30 Oct 2023 22:46:23 +0200
Subject: [PATCH 09/20] Add some styling for navigation
---
src/App.js | 10 ++++++++-
src/CSS/NavMenu.module.css | 22 ++++++++++++++++++-
src/components/NavMenu.js | 44 ++++++++++++++++++++------------------
3 files changed, 53 insertions(+), 23 deletions(-)
diff --git a/src/App.js b/src/App.js
index 54e7246..a7e9bef 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,13 +1,21 @@
import './App.css';
import { Route, Routes } from 'react-router-dom';
+import { useState } from 'react';
import Cars from './components/Cars';
import Main from './components/Main';
import NavMenu from './components/NavMenu';
function App() {
+ const [isOpen, setIsOpen] = useState(true);
+
+ const toggleMenu = () => {
+ setIsOpen(!isOpen);
+ };
+
return (
-
+
+ {isOpen && }
} />
} />
diff --git a/src/CSS/NavMenu.module.css b/src/CSS/NavMenu.module.css
index dbaeb63..f3c829a 100644
--- a/src/CSS/NavMenu.module.css
+++ b/src/CSS/NavMenu.module.css
@@ -1,8 +1,28 @@
+header {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 50%;
+ height: 100%;
+ background-color: azure;
+}
+
.navigation {
- display: block;
+ margin-top: 10rem;
}
.navlist {
display: flex;
flex-direction: column;
+ list-style-type: none;
+ gap: 2rem;
+ font-weight: 700;
+}
+
+a {
+ text-decoration: none;
+}
+
+.mobmenu {
+ display: block;
}
diff --git a/src/components/NavMenu.js b/src/components/NavMenu.js
index cb2ba1c..f60c378 100644
--- a/src/components/NavMenu.js
+++ b/src/components/NavMenu.js
@@ -2,26 +2,28 @@ import React from 'react';
import { NavLink } from 'react-router-dom';
import styles from '../CSS/NavMenu.module.css';
-const NavMenu = () => (
-
-
-
-
-);
+const NavMenu = () => {
+ (
+
+
+
+
+ );
+};
export default NavMenu;
From c472e9fdabc441faf94f6a64a835c717a52b3781 Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Tue, 31 Oct 2023 13:31:04 +0200
Subject: [PATCH 10/20] Add authorization
---
package-lock.json | 2 +-
src/App.js | 6 ++----
src/redux/cars/carsSlice.js | 19 +++++++++++++++----
3 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 4642b4c..a66e55b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,8 +13,8 @@
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"axios": "^1.6.0",
- "prop-types": "^15.8.1",
"jwt-decode": "^4.0.0",
+ "prop-types": "^15.8.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-redux": "^8.1.3",
diff --git a/src/App.js b/src/App.js
index 0f1dbfb..b72eb41 100644
--- a/src/App.js
+++ b/src/App.js
@@ -5,7 +5,6 @@ import { useEffect } from 'react';
import { isLogIn } from './redux/login/loginSlice';
import Login from './components/login/login';
import Cars from './components/Cars';
-import Main from './components/Main';
import NavMenu from './components/NavMenu';
function App() {
@@ -33,11 +32,10 @@ function App() {
} />
- } />
- } />
+ } />
);
}
-export default App;
\ No newline at end of file
+export default App;
diff --git a/src/redux/cars/carsSlice.js b/src/redux/cars/carsSlice.js
index 987aeaf..1167d8a 100644
--- a/src/redux/cars/carsSlice.js
+++ b/src/redux/cars/carsSlice.js
@@ -1,5 +1,12 @@
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
import axios from 'axios';
+import {
+ // getUserIdFromToken,
+ // getUserNameFromToken,
+ getLocalStorageAuth,
+ // setLocalStorageAuth,
+} from '../../utility/helper';
+import { API_URL } from '../../utility/globalVariable';
const initialState = {
cars: [],
@@ -9,13 +16,19 @@ const initialState = {
length: null,
};
-const url = 'http://localhost:3000/api/v1/users/1/cars';
+// const url = 'http://localhost:3000/api/v1/users/1/cars';
export const getCars = createAsyncThunk(
'cars/getCars',
async () => {
try {
- const response = await axios(url);
+ const authToken = getLocalStorageAuth();
+ const response = await axios(`${API_URL}/users/1/cars`,
+ {
+ headers: {
+ Authorization: `Bearer ${authToken}`, // Include the Authorization header with the token
+ },
+ });
return response.data;
} catch (error) {
console.log(error);
@@ -29,8 +42,6 @@ const carsSlice = createSlice({
initialState,
reducers: {
nextCar(state, action) {
- // console.log('action', action.payload);
- // console.log('state', state);
state.value = action.payload > state.length ? 1 : action.payload;
},
prevCar(state, action) {
From de5eaecfc8925db8ba57beb40998f4d597ff0164 Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Tue, 31 Oct 2023 14:49:03 +0200
Subject: [PATCH 11/20] Implement Navigation menu with minimal styling
---
src/App.css | 11 +++++++
src/App.js | 1 -
src/CSS/NavMenu.module.css | 9 ++----
src/assets/menu.png | Bin 0 -> 4534 bytes
src/components/NavMenu.js | 59 +++++++++++++++++++++++-------------
src/redux/cars/carsSlice.js | 5 ---
6 files changed, 52 insertions(+), 33 deletions(-)
create mode 100644 src/assets/menu.png
diff --git a/src/App.css b/src/App.css
index 8c7466b..49c95bf 100644
--- a/src/App.css
+++ b/src/App.css
@@ -50,3 +50,14 @@ section.signup > form {
.form-switch-link {
color: var(--color-white);
}
+
+.mobmenu {
+ position: fixed;
+ right: 1rem;
+ top: 1rem;
+ width: 30px;
+}
+
+.mobmenu > img {
+ width: 100%;
+}
diff --git a/src/App.js b/src/App.js
index b72eb41..da90928 100644
--- a/src/App.js
+++ b/src/App.js
@@ -28,7 +28,6 @@ function App() {
return (
- Main Page
} />
diff --git a/src/CSS/NavMenu.module.css b/src/CSS/NavMenu.module.css
index f3c829a..e5b030c 100644
--- a/src/CSS/NavMenu.module.css
+++ b/src/CSS/NavMenu.module.css
@@ -2,9 +2,9 @@ header {
position: fixed;
top: 0;
left: 0;
- width: 50%;
+ width: 70%;
height: 100%;
- background-color: azure;
+ background-color: #feeec9e2;
}
.navigation {
@@ -21,8 +21,5 @@ header {
a {
text-decoration: none;
-}
-
-.mobmenu {
- display: block;
+ color: rgb(0, 17, 17);
}
diff --git a/src/assets/menu.png b/src/assets/menu.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8f355e0e25f19438a9c7684e24dd29d809b43e1
GIT binary patch
literal 4534
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
PT_`?Yeut{xV}1H>d4Pwi
literal 0
HcmV?d00001
diff --git a/src/components/NavMenu.js b/src/components/NavMenu.js
index f60c378..28c3fd4 100644
--- a/src/components/NavMenu.js
+++ b/src/components/NavMenu.js
@@ -1,28 +1,45 @@
-import React from 'react';
+import React, { useState } from 'react';
import { NavLink } from 'react-router-dom';
import styles from '../CSS/NavMenu.module.css';
+import menu from '../assets/menu.png';
const NavMenu = () => {
- (
-
-
-
-
+ const [isOpen, setIsOpen] = useState(false);
+
+ const toggleMenu = () => {
+ setIsOpen(!isOpen);
+ };
+
+ return (
+
+
+ {isOpen && (
+
+
+
+
+ )}
+
);
};
diff --git a/src/redux/cars/carsSlice.js b/src/redux/cars/carsSlice.js
index 1167d8a..5d8a866 100644
--- a/src/redux/cars/carsSlice.js
+++ b/src/redux/cars/carsSlice.js
@@ -1,10 +1,7 @@
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
import axios from 'axios';
import {
- // getUserIdFromToken,
- // getUserNameFromToken,
getLocalStorageAuth,
- // setLocalStorageAuth,
} from '../../utility/helper';
import { API_URL } from '../../utility/globalVariable';
@@ -16,8 +13,6 @@ const initialState = {
length: null,
};
-// const url = 'http://localhost:3000/api/v1/users/1/cars';
-
export const getCars = createAsyncThunk(
'cars/getCars',
async () => {
From 713cd6981755e2592378807ba29520447f67e525 Mon Sep 17 00:00:00 2001
From: Sunga Thawethe
Date: Tue, 31 Oct 2023 14:50:44 +0200
Subject: [PATCH 12/20] change reservations to car
---
src/components/NavMenu.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/NavMenu.js b/src/components/NavMenu.js
index 28c3fd4..882c8df 100644
--- a/src/components/NavMenu.js
+++ b/src/components/NavMenu.js
@@ -33,7 +33,7 @@ const NavMenu = () => {
New Reservation
- Delete Reservation
+ Delete Car
From a7a2dbb4df76e363fdd3124018b4946cf65948ce Mon Sep 17 00:00:00 2001
From: Munish
Date: Tue, 31 Oct 2023 17:18:34 +0200
Subject: [PATCH 13/20] Fix linter errors
---
src/components/Cars.js | 15 ++++++--------
src/redux/cars/carsSlice.js | 40 ++++++++++++++++---------------------
2 files changed, 23 insertions(+), 32 deletions(-)
diff --git a/src/components/Cars.js b/src/components/Cars.js
index 9c53e24..d89063b 100644
--- a/src/components/Cars.js
+++ b/src/components/Cars.js
@@ -23,21 +23,19 @@ const Cars = () => {
return (
-
- Cars Avaliable
-
-
- Please select a vehicle
-
+
Cars Avaliable
+
Please select a vehicle
Cars Listed:
- {' '}
{cars.length}
{cars.map((car) => (
-
);
};
diff --git a/src/redux/cars/carsSlice.js b/src/redux/cars/carsSlice.js
index 5d8a866..a76e090 100644
--- a/src/redux/cars/carsSlice.js
+++ b/src/redux/cars/carsSlice.js
@@ -1,8 +1,6 @@
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
import axios from 'axios';
-import {
- getLocalStorageAuth,
-} from '../../utility/helper';
+import { getLocalStorageAuth } from '../../utility/helper';
import { API_URL } from '../../utility/globalVariable';
const initialState = {
@@ -13,34 +11,30 @@ const initialState = {
length: null,
};
-export const getCars = createAsyncThunk(
- 'cars/getCars',
- async () => {
- try {
- const authToken = getLocalStorageAuth();
- const response = await axios(`${API_URL}/users/1/cars`,
- {
- headers: {
- Authorization: `Bearer ${authToken}`, // Include the Authorization header with the token
- },
- });
- return response.data;
- } catch (error) {
- console.log(error);
- return error;
- }
- },
-);
+export const getCars = createAsyncThunk('cars/getCars', async () => {
+ try {
+ const authToken = getLocalStorageAuth();
+ const response = await axios(`${API_URL}/users/1/cars`, {
+ headers: {
+ Authorization: `Bearer ${authToken}`, // Include the Authorization header with the token
+ },
+ });
+ return response.data;
+ } catch (error) {
+ console.log(error);
+ return error;
+ }
+});
const carsSlice = createSlice({
name: 'cars',
initialState,
reducers: {
nextCar(state, action) {
- state.value = action.payload > state.length ? 1 : action.payload;
+ state.value = action.payload > state.length ? 6 : action.payload;
},
prevCar(state, action) {
- state.value = action.payload < 1 ? state.length : action.payload;
+ state.value = action.payload < 6 ? state.length : action.payload;
},
dotCar() {},
},
From cfa7120c896de8b583445a63a1a3886c426c8129 Mon Sep 17 00:00:00 2001
From: Munish
Date: Tue, 31 Oct 2023 21:37:34 +0200
Subject: [PATCH 14/20] Add cars list page & navbar stylings
---
.eslintrc.json | 3 ++-
src/App.css | 10 +++++++-
src/App.js | 2 +-
src/CSS/Car.module.css | 40 +++++++++++++++++++++++++++--
src/CSS/Cars.module.css | 19 ++++++++++++--
src/CSS/NavMenu.module.css | 18 ++++++++-----
src/CSS/Slider.module.css | 30 ++++++++++++++++++++++
src/assets/arrow.png | Bin 0 -> 16244 bytes
src/assets/car-1.png | Bin 0 -> 330663 bytes
src/assets/fb.png | Bin 0 -> 634 bytes
src/assets/insta.png | Bin 0 -> 153567 bytes
src/assets/logo.jpg | Bin 0 -> 24941 bytes
src/assets/twitter.png | Bin 0 -> 1273 bytes
src/components/Car.js | 47 +++++++++++++++-------------------
src/components/Cars.js | 38 +++++++++++++--------------
src/components/Main.js | 7 -----
src/components/NavMenu.js | 46 ---------------------------------
src/components/Slider.js | 43 ++++++++++++++++++++++++-------
src/components/nav/NavMenu.js | 47 ++++++++++++++++++++++++++++++++++
19 files changed, 227 insertions(+), 123 deletions(-)
create mode 100644 src/assets/arrow.png
create mode 100644 src/assets/car-1.png
create mode 100644 src/assets/fb.png
create mode 100644 src/assets/insta.png
create mode 100644 src/assets/logo.jpg
create mode 100644 src/assets/twitter.png
delete mode 100644 src/components/Main.js
delete mode 100644 src/components/NavMenu.js
create mode 100644 src/components/nav/NavMenu.js
diff --git a/.eslintrc.json b/.eslintrc.json
index 641c61e..7d401e6 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -22,7 +22,8 @@
"react/jsx-filename-extension": ["warn", { "extensions": [".js", ".jsx"] }],
"react/react-in-jsx-scope": "off",
"import/no-unresolved": "off",
- "no-shadow": "off"
+ "no-shadow": "off",
+ "quotes": "off"
},
"overrides": [
{
diff --git a/src/App.css b/src/App.css
index 49c95bf..c3d4cf3 100644
--- a/src/App.css
+++ b/src/App.css
@@ -51,11 +51,19 @@ section.signup > form {
color: var(--color-white);
}
+main {
+ display: flex;
+}
+
.mobmenu {
position: fixed;
- right: 1rem;
+ left: 1rem;
top: 1rem;
width: 30px;
+ z-index: 5;
+ background: none;
+ border: none;
+ cursor: pointer;
}
.mobmenu > img {
diff --git a/src/App.js b/src/App.js
index da90928..e15b4c3 100644
--- a/src/App.js
+++ b/src/App.js
@@ -5,7 +5,7 @@ import { useEffect } from 'react';
import { isLogIn } from './redux/login/loginSlice';
import Login from './components/login/login';
import Cars from './components/Cars';
-import NavMenu from './components/NavMenu';
+import NavMenu from './components/nav/NavMenu';
function App() {
const loginData = useSelector((state) => state.login);
diff --git a/src/CSS/Car.module.css b/src/CSS/Car.module.css
index 6cd2d9d..af19f06 100644
--- a/src/CSS/Car.module.css
+++ b/src/CSS/Car.module.css
@@ -1,8 +1,44 @@
.car {
display: flex;
flex-direction: column;
+ gap: 35px;
align-items: center;
- border: 2px solid black;
- margin: 5%;
text-align: center;
+ width: 350px;
+ /* height: 300px; */
+}
+
+.carImg {
+ width: 100%;
+}
+
+.carDetailsBox {
+ display: flex;
+ flex-direction: column;
+ gap: 25px;
+}
+
+.carName {
+ text-transform: uppercase;
+ font-weight: 700;
+ font-size: 1.3rem;
+}
+
+.carDescription {
+ color: #c7c9c8;
+ text-transform: capitalize;
+}
+
+.carSocialBox {
+ width: 50%;
+ display: flex;
+ justify-content: space-evenly;
+}
+
+.carSocialBox > img {
+ width: 30px;
+ padding: 5px;
+ border-radius: 50%;
+ border: 1px solid #c7c9c8;
+ cursor: pointer;
}
diff --git a/src/CSS/Cars.module.css b/src/CSS/Cars.module.css
index 2e738e1..5487e11 100644
--- a/src/CSS/Cars.module.css
+++ b/src/CSS/Cars.module.css
@@ -1,9 +1,24 @@
-body {
- margin: 2%;
+.carsSection {
+ width: 100%;
+ height: 100vh;
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-around;
+ overflow: hidden;
+}
+
+.titleBox > * {
+ text-transform: uppercase;
+ text-align: center;
}
.cars {
+ width: 70%;
display: flex;
+ gap: 25px;
+ transition: all 1s;
}
.dblock {
diff --git a/src/CSS/NavMenu.module.css b/src/CSS/NavMenu.module.css
index e5b030c..5a118c0 100644
--- a/src/CSS/NavMenu.module.css
+++ b/src/CSS/NavMenu.module.css
@@ -1,10 +1,14 @@
-header {
- position: fixed;
- top: 0;
- left: 0;
- width: 70%;
- height: 100%;
- background-color: #feeec9e2;
+.sidebarMenu {
+ width: 250px;
+ min-height: 100vh;
+ background-color: #ffffff;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+.logo {
+ width: 75%;
}
.navigation {
diff --git a/src/CSS/Slider.module.css b/src/CSS/Slider.module.css
index 886f727..432e9ce 100644
--- a/src/CSS/Slider.module.css
+++ b/src/CSS/Slider.module.css
@@ -1,4 +1,34 @@
.prevnextbtns {
display: flex;
justify-content: space-between;
+ position: absolute;
+ width: 100%;
+}
+
+.prevnextbtns > button {
+ padding: 15px 35px;
+ background-color: var(--color-bg-2);
+ border: none;
+ color: #fff;
+ font-size: 1rem;
+ cursor: pointer;
+}
+
+.prevnextbtns > button > img {
+ width: 15px;
+}
+
+.prevnextbtns > button:nth-child(1) {
+ border-top-right-radius: 16px;
+ border-bottom-right-radius: 16px;
+ background-color: #c7c9c8;
+}
+
+.prevnextbtns > button:nth-child(1) > img {
+ transform: rotateZ(180deg);
+}
+
+.prevnextbtns > button:nth-child(2) {
+ border-top-left-radius: 16px;
+ border-bottom-left-radius: 16px;
}
diff --git a/src/assets/arrow.png b/src/assets/arrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..2f1e2cf6847aee981059208238e7f3d0e73c47cd
GIT binary patch
literal 16244
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
U3K4z=4!=Y0s_DTiRPIOq9|Ql?A^-pY
literal 0
HcmV?d00001
diff --git a/src/assets/car-1.png b/src/assets/car-1.png
new file mode 100644
index 0000000000000000000000000000000000000000..c9fb2c73a461f51dc4d76c23726f87a5dc5bf3d3
GIT binary patch
literal 330663
zcmeFY<9}|!vo9DYJGO1xw(T9;){br4dSctzv2E?xwmtdXbI#12`!CGAT5I*{Pjz*7
zRdwOp5sLB>aM0M$KtMonQj(&|KtLc_KtR9`P!K;YPOC?5KM!DMWeH)RnrYlqARs~@
zDN!L+cfE_QUw`pTJp{fceV;myw+_q{Mj-})goFeI`@oTcr6ZfAm%cWtwbELa^M?Ov
zr7Wv|7o$^Vf{}tC14s1I66H_MyB(U5{pag{|4BGj
zk`4BMv^9qMlV&wSRBzP%zp4DRI>G-p#s8r(i4BryGmYKkH1K~ANwgW~`rkPCPk%;h
zD9Hvc>)CNQng3$ze~3snP#yo@@Bhtl6%pasQI!x42krkejsMl>hhfnFW32z5;s0Kc
z|F5lZ01088W8vF2gMe4A`}2tQ6?V7dddp3n!nXVVZmpCe8OR9ck9^`AQ^>+={I^2H
z(t)vm?&WTE`-qr>iSH_}xb-e3r(*7{-Um(3Is+5N!s!x>=zkDaP)g&D)EDe1FgBX1
z{4yrV>eAQPV-ivOt89KMD6T_wXhlG&h{67FOvUdD
zpRQUfjHR<(@BkxvLFIBVc(4Qz>61VWJV?a^-U|QzB0xQzC$N7xC>W7o6*i&>?9Mu+
zJBUAsBd##!ZkX|`3mhuApN8NZ>uhsdRmHd}E={3X31{jU&SxtA^(gv3-X8XP=c_vu
zg7&?>b;zGVC3A%$dZS`~%mM@Zo|E5y%ixVyL@%5`x6hUdTbs*sZb0o@jWyvItCPpg
zIUD!ZXtfCLE8@FK{FsT58ZgKVq+Em$n{0^=_V2fHN@!640zd^+Y)Np=wZwbxyc^PS
zkh2g)bjO{k4BFq45>cGnf_yu5xFuy~(6L4HZ)fG7xmfS|7ylGC{PHUf0^b=g`Cl*H
zCX`>#PU84{kYr;=bI$Y!lK;yF`it&hitV6i_)_Fe91zgOMbnF*N0>0h8bj&g5U)TW
zL2IB96!e0MDG{Zy3Ds96L>pc#vl*vZS{PROXHYe#sgkuADdsRjGXt#Xq6-x@Q0c<=
zB~>oQLJTp@_(sU4SYj2SV}Lc(2_a?>2yb}9!jFKeOvC-0F+0Vgf&no&Xsa!90sC=rwE~w*o2ey#LV-FU5CyBO
z1NhkdL0w$s>H`^Tv;)46pSO6ZmOcLEwe8)Gj3}3TP$}GAe|PshG=Kl~HW+*@F*1q7
z8X{LV?_>h2fl;y$;m-;ngf*~oLO!Cu_=-+s@V0)HsvQ1n#N>Vb_E^U8H9e8@XRBPJ
zQp~wYF(TLdB_dV~CaozjmCyH~{4%Pq4n3^96&r|FcSV8Oh0eGPx-1hSB@-_9T*$Nn
zqPaul&78|-}UiBOcB8s(5~cx
zVXn{FEB#Hq>LK$+94lFX6`C*Bpmf_n-49_M;da
zHSh3qua8>}F5qlH$dyNC%0zPuI!uO+&
zU}J;QarPBKv#T4Q6;Dztx5y)2&N)W#`*p{}I%QO>Uekg{)sED~7v
zd!v{7Opsi$z5a*jZJ&d04(^V@6mO
zl{nyrYCJqN5th4lBRgId+CyhNzMiJ!o$~3LCp<@3?MnxvnNIpPg9FTf*H^gvh6#5*
z*500vu{>0Pr_F11iy$iS^A2tMOXfw8*XxstrAiAWu=)~kyIH&-D=NhH{4%U?63Fl6
z
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