From 02eb2e9ba7e4ac71161da9b80205580751c5705a Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 17 May 2022 14:31:59 +0530 Subject: [PATCH 01/85] assets --- public/assets/book-images/doepicshit.jpg | Bin 0 -> 21933 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/assets/book-images/doepicshit.jpg diff --git a/public/assets/book-images/doepicshit.jpg b/public/assets/book-images/doepicshit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a0f4156e94f78f0c891f57fe15917f3d5ef1703 GIT binary patch literal 21933 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�t;o5E3bU1+<@gLc}K&{jbqDf~lB+&Wm33 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 literal 0 HcmV?d00001 From 1eded835b2e52844405e86c06dc6dc821a8e754e Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 17 May 2022 14:32:37 +0530 Subject: [PATCH 02/85] styles: for cards and filter pane --- src/App.css | 268 +++++++++++++++++--- src/components/Card/Card.css | 0 src/components/Header/Header.css | 0 src/pages/ProductListing/ProductListing.css | 0 4 files changed, 236 insertions(+), 32 deletions(-) create mode 100644 src/components/Card/Card.css create mode 100644 src/components/Header/Header.css create mode 100644 src/pages/ProductListing/ProductListing.css diff --git a/src/App.css b/src/App.css index d937db9..727f77d 100644 --- a/src/App.css +++ b/src/App.css @@ -1,51 +1,255 @@ -.App { - text-align: center; +@import url(https://www.w3schools.com/w3css/4/w3.css); +@import url(https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css); +@import url(https://veeuiforbookstorecss.netlify.app/components/main.css); + +/* styles.index */ + +body{ + font-family: 'Open Sans', sans-serif; +} + +.navbar{ + display: flex; + background-color: var(--background-color); + padding: 0 1rem; + align-items: center; + justify-content: space-between; +} + +.navbar-title{ + font-size: 2rem; + color: var(--primary-color); + font-weight: 400; + letter-spacing: 3px; + font-weight: bold; +} + +.navbar-search{ + height: 2rem; + border: 5px solid transparent; + width: 28rem; + padding: 0rem 1rem; +} + +.navbar-catagory{ + display: block; + text-transform: uppercase; + color: var(--text-color); +} + +.navbar-catagory li{ + display: inline; + cursor: pointer; + padding: 0rem 1rem; + +} + +img{ + max-width: 70%; + margin: auto; +} + + +.container{ + margin-top: 2rem; + display: flex; + width: 100%; + min-height: 28rem; + gap: 2rem; + padding: 2rem; + background-color: var(--section-background); + +} +.wrap{ + flex-wrap: wrap; +} +/* .center-items{ + align-items: center; + justify-content: center; +} */ + +.offer{ + background-color: var(--yellow-color); + padding: 6em; + display: flex; + flex-flow: column; + justify-content: center; + align-items: center; + +} + +.subheading { + text-align: center; + max-width: 800px; + margin: auto; + padding: 1rem; + text-transform: uppercase; +} + +.offer-saving{ + color: var(--green-color); +} + +.price{ + font-weight: bold; + color: var(--text-color); +} + +.footer{ + background-color:var(--dark-background); + display: flex; + justify-content: space-around; + align-items: center; + gap: 2rem; + padding: 2rem; +} + +.footer-title{ + font-weight: bold; + +} + +.footer-links{ + color: white; + list-style: none; + padding: 0.8rem; + cursor: pointer; +} + +.center-div{ + display: flex; + align-items: center; + justify-content: center; + margin: auto; + padding: 6rem; } -.App-logo { - height: 40vmin; - pointer-events: none; +.green{ + color: var(--green-color); } -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } + +.strike{ + text-decoration: line-through; } -.App-header { - background-color: #22201c; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - color: white; +.quantity{ + display: flex; + font-weight: bold; } -.App-link { - color: #61dafb; +.quantity input{ + width: 3rem; + } -.brand-title { - font-size: 3rem; - color: #d9d9d9; +.cart-price{ + display: flex; + flex-direction: column; + gap: 2rem; + margin: 2rem; } -.brand-title span { - color: #ffde59; +.price-field{ + font-weight: lighter; + color: var(--text-color); + gap: 4rem; + display: flex; + flex-direction: row; + justify-content: space-between; + } -.brand-description { - font-size: 1.4rem; +.highlight{ + font-weight: bold; + color: var(--green-color); } -.links { - display: flex; +.text-center{ + text-align: center; } -.links a { - color: #d9d9d9; - font-size: 1.2rem; - margin: 1rem; + +/* grid for product list page */ + +.grid{ + display: grid; + width: 100%; + height: auto; + padding: 1rem; +} + +.grid-2-8{ + grid-template-rows:auto; + grid-template-columns: 20% auto; + gap:2rem; +} + +@media(max-width:550px){ + .grid-2-8{ + grid-template-columns: auto; + grid-template-rows: auto ; + gap: 2rem; + } +} + +.product-filter{ + background-color: var(--background-color); + display: flex; + flex-direction: column; + justify-content: space-around; + height: 98vh; + padding: 1rem; + gap: 2rem; + } +.product-display{ + background-color: var(--section-background); + height: auto; + overflow-y: scroll; + display:flex ; + gap: 2rem; + justify-content:space-around; +} + +.filter{ + display: flex; + justify-content: space-between; +} + +.slider{ + width: 100%; +} +.scale-values{ + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.category{ + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.category input{ + margin-right: 1rem; +} + + +input[type="reset"]{ + color: var(--text-color); + border-radius: 4px; + background-color: var(--section-background); + border: none; +} + +.heart{ + position: absolute; + top:0; + color: var(--primary-color); + padding: 5px; + border-radius: 50%; + background-color: var(--background-color); + +} \ No newline at end of file diff --git a/src/components/Card/Card.css b/src/components/Card/Card.css new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Header/Header.css b/src/components/Header/Header.css new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/ProductListing/ProductListing.css b/src/pages/ProductListing/ProductListing.css new file mode 100644 index 0000000..e69de29 From d8d2e0e67fb2d56f0b5549a6a9b25089ec8df0b0 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 17 May 2022 14:33:17 +0530 Subject: [PATCH 03/85] Basic component structure --- public/index.html | 42 ++++++------- src/App.js | 7 ++- src/components/Card/Card.jsx | 19 ++++++ src/components/Header/Header.jsx | 7 +++ .../ProductsFilterPane/ProductsFilter.jsx | 61 +++++++++++++++++++ src/components/index.js | 5 ++ src/pages/Cart/Cart.jsx | 0 src/pages/ProductListing/ProductListing.jsx | 22 +++++++ src/pages/index.js | 4 ++ 9 files changed, 144 insertions(+), 23 deletions(-) create mode 100644 src/components/Card/Card.jsx create mode 100644 src/components/Header/Header.jsx create mode 100644 src/components/ProductsFilterPane/ProductsFilter.jsx create mode 100644 src/components/index.js create mode 100644 src/pages/Cart/Cart.jsx create mode 100644 src/pages/ProductListing/ProductListing.jsx create mode 100644 src/pages/index.js diff --git a/public/index.html b/public/index.html index aa069f2..80dfffc 100644 --- a/public/index.html +++ b/public/index.html @@ -1,21 +1,19 @@ - - - - - - - - - - - React App - - - -
- - - + + + \ No newline at end of file diff --git a/src/App.js b/src/App.js index 9cef773..ab8ebf0 100644 --- a/src/App.js +++ b/src/App.js @@ -1,10 +1,13 @@ import "./App.css"; -import logo from "./logo.png"; +import {Header} from "./components/index" +import {ProductListing} from "./pages/index" +// import logo from "./logo.png"; function App() { return (
-

Welcome Veeresh B V

+
+
); } diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx new file mode 100644 index 0000000..0e762e8 --- /dev/null +++ b/src/components/Card/Card.jsx @@ -0,0 +1,19 @@ +// import { doepicshit } from "../../../public/assets/book-images" + +export default function Card() { + return ( + +
+ + ) +} \ No newline at end of file diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx new file mode 100644 index 0000000..e9d9af7 --- /dev/null +++ b/src/components/Header/Header.jsx @@ -0,0 +1,7 @@ +export default function Header() { + return ( +
+

This is Header

+
+ ) +} \ No newline at end of file diff --git a/src/components/ProductsFilterPane/ProductsFilter.jsx b/src/components/ProductsFilterPane/ProductsFilter.jsx new file mode 100644 index 0000000..91136c1 --- /dev/null +++ b/src/components/ProductsFilterPane/ProductsFilter.jsx @@ -0,0 +1,61 @@ +export default function ProductFilter() { + return ( +
+ +
+ filter + +
+ +
+

Range

+
+ 20 + 20 + 20 +
+ +
+ +
+

Category

+ + + + +
+ +
+

Rating

+ + + +
+ +
+

Sort by

+ + +
+ +
+ ) +} \ No newline at end of file diff --git a/src/components/index.js b/src/components/index.js new file mode 100644 index 0000000..451cb2f --- /dev/null +++ b/src/components/index.js @@ -0,0 +1,5 @@ +import Header from "./Header/Header" +import Card from "./Card/Card" +import ProductsFilter from "./ProductsFilterPane/ProductsFilter" + +export {Header, Card, ProductsFilter} \ No newline at end of file diff --git a/src/pages/Cart/Cart.jsx b/src/pages/Cart/Cart.jsx new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/ProductListing/ProductListing.jsx b/src/pages/ProductListing/ProductListing.jsx new file mode 100644 index 0000000..7ec2143 --- /dev/null +++ b/src/pages/ProductListing/ProductListing.jsx @@ -0,0 +1,22 @@ + +import { Card, ProductsFilter } from "../../components" + + +export default function ProductListing() { + return ( + <> +

Showing all Books

+
+ +
+ + + + + +
+
+ + + ) +} diff --git a/src/pages/index.js b/src/pages/index.js new file mode 100644 index 0000000..33babdb --- /dev/null +++ b/src/pages/index.js @@ -0,0 +1,4 @@ +import Cart from "./Cart/Cart" +import ProductListing from "./ProductListing/ProductListing" + +export {Cart, ProductListing} \ No newline at end of file From 2f9e6e47fbd0978b9cb1c5f556f789d49bcdec66 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 17 May 2022 20:28:15 +0530 Subject: [PATCH 04/85] fix: useffect working --- src/components/Card/doepicshit.jpg | Bin 0 -> 21933 bytes .../ProductsFilterPane/ProductsFilter.jsx | 50 +++++++++--------- src/pages/ProductListing/ProductListing.jsx | 34 ++++++++---- 3 files changed, 49 insertions(+), 35 deletions(-) create mode 100644 src/components/Card/doepicshit.jpg diff --git a/src/components/Card/doepicshit.jpg b/src/components/Card/doepicshit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a0f4156e94f78f0c891f57fe15917f3d5ef1703 GIT binary patch literal 21933 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�t;o5E3bU1+<@gLc}K&{jbqDf~lB+&Wm33 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 literal 0 HcmV?d00001 diff --git a/src/components/ProductsFilterPane/ProductsFilter.jsx b/src/components/ProductsFilterPane/ProductsFilter.jsx index 91136c1..016b18c 100644 --- a/src/components/ProductsFilterPane/ProductsFilter.jsx +++ b/src/components/ProductsFilterPane/ProductsFilter.jsx @@ -1,57 +1,55 @@ export default function ProductFilter() { return ( -
+ -
+
filter
-
-

Range

-
+
+

Range

+
20 20 20
- +
-
-

Category

-
-

Rating

-
-

Sort by

-
+

Showing all Books

+
-
- - - - - +
+ {productsList.map(product => ( + + ))}
From 3cf1f9b498ef938d73988e08968332a8d8da4b16 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 17 May 2022 20:28:41 +0530 Subject: [PATCH 05/85] fix: class to className --- src/backend/db/products.js | 256 +++++++++++++++++++++++++++++++++-- src/components/Card/Card.jsx | 14 +- 2 files changed, 254 insertions(+), 16 deletions(-) diff --git a/src/backend/db/products.js b/src/backend/db/products.js index b82ba44..0c79d13 100644 --- a/src/backend/db/products.js +++ b/src/backend/db/products.js @@ -6,25 +6,263 @@ import { v4 as uuid } from "uuid"; * */ export const products = [ +// 3 caterories > fiction, horror, romantic + // 7 Fiction Books { _id: uuid(), - title: "You Can WIN", + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "Think and Grow Rich", author: "Shiv Khera", - price: "5000", - categoryName: "non-fiction", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "fiction", + }, + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "Danielle Steel Spy", + author: "Robert Brown", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "fiction", + }, + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "Wishpering in Dark", + author: "Ruskin Bond", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "fiction", + }, + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "Ikigai", + author: "Garcia Hector", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "fiction", + }, + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "Being The Other", + author: "Saeed Naqvi", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "fiction", + }, + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "Tears of Jhelum", + author: "Garcia Hector", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "fiction", }, { _id: uuid(), - title: "You are Winner", + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "Casual Vacancy", + author: "J K Rowling", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "fiction", + }, + + // 8 Horror Books + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "Poison Apple", author: "Junaid Qureshi", - price: "3000", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "horror", + }, + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "The House Of Strange Stories", + author: "Ruskin Bond", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "horror", + }, + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "The Girl In Room 105", + author: "Chetan Bhagat", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "horror", + }, + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "Ghost Of The Silent Hills", + author: "Anita Krishnan", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "horror", + }, + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "Almost Dark", + author: "Chandradip Paitandi", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "horror", + }, + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "The Shining", + author: "Stephen King", + price: { + original: 869, + discounted: 699, + discount: 20 + }, categoryName: "horror", }, { _id: uuid(), - title: "Think and Grow Rich", - author: "Shiv Khera", - price: "1000", - categoryName: "fiction", + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "The Shining", + author: "Stephen King", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "horror", + }, + { + _id: uuid(), + productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + title: "The Green Room", + author: "Nag Mani", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "horror", }, + ]; + + + + +/* + + // 6 ROMANTIC BOOKS + { + _id: uuid(), + title: "The Mister", + author: "EL James", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "romantic", + }, + { + _id: uuid(), + title: "Better Than Best Friends", + author: "Ahona Sadhu", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "romantic", + }, + { + _id: uuid(), + title: "A Tale Of Two Souls", + author: "Anand Kumar", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "romantic", + }, + { + _id: uuid(), + title: "Promise Me", + author: "Keshav Aneel", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "romantic", + }, + { + _id: uuid(), + title: "Intense Love", + author: "Manogyna", + price: { + original: 869, + discounted: 699, + discount: 20 + }, + categoryName: "romantic", + }, + { + _id: uuid(), + title: "Prema Naada Pandita", + author: "S B Akshobhya", + price: { + original: 869, + discounted: 399, + discount: 10 + }, + categoryName: "romantic", + }, +*/ \ No newline at end of file diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx index 0e762e8..28b5a1c 100644 --- a/src/components/Card/Card.jsx +++ b/src/components/Card/Card.jsx @@ -3,15 +3,15 @@ export default function Card() { return ( -
- sample image +
+ sample image - New + New - From 958f3cc8cd7139593a64f6dded4ee5be9e856fed Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 17 May 2022 21:05:58 +0530 Subject: [PATCH 06/85] feat: card display --- public/assets/book-images/ikigai.jpg | Bin 0 -> 22972 bytes src/backend/db/products.js | 6 +++--- src/components/Card/Card.jsx | 18 +++++++++++++----- src/pages/ProductListing/ProductListing.jsx | 4 ++-- 4 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 public/assets/book-images/ikigai.jpg diff --git a/public/assets/book-images/ikigai.jpg b/public/assets/book-images/ikigai.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80b948d1aecbea176b0ac7bf7447f1d64b0e07de GIT binary patch literal 22972 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 Sj)fF+gSGPS7+Cr5%KrdtqIQh{ literal 0 HcmV?d00001 diff --git a/src/backend/db/products.js b/src/backend/db/products.js index 0c79d13..976e493 100644 --- a/src/backend/db/products.js +++ b/src/backend/db/products.js @@ -11,7 +11,7 @@ export const products = [ { _id: uuid(), productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', - title: "Think and Grow Rich", + title: "Do Epic Shit", author: "Shiv Khera", price: { original: 869, @@ -22,7 +22,7 @@ export const products = [ }, { _id: uuid(), - productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + productImage: process.env.PUBLIC_URL + 'assets/book-images/ikigai.jpg', title: "Danielle Steel Spy", author: "Robert Brown", price: { @@ -34,7 +34,7 @@ export const products = [ }, { _id: uuid(), - productImage: process.env.PUBLIC_URL + 'assets/book-images/doepicshit.jpg', + productImage: process.env.PUBLIC_URL + 'assets/book-images/ikigai.jpg', title: "Wishpering in Dark", author: "Ruskin Bond", price: { diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx index 28b5a1c..8c2fdeb 100644 --- a/src/components/Card/Card.jsx +++ b/src/components/Card/Card.jsx @@ -1,17 +1,25 @@ // import { doepicshit } from "../../../public/assets/book-images" -export default function Card() { +export default function Card({ product }) { + console.log(product) + const { productImage, title, author, price: { original, discounted, discount } } = product + return (
- sample image + sample image + - New
-

Do Epic Shit

- ₹299 +

{title}

+
{author}
+
+ {original} + {discounted} +
+
diff --git a/src/pages/ProductListing/ProductListing.jsx b/src/pages/ProductListing/ProductListing.jsx index 4dea06f..db95043 100644 --- a/src/pages/ProductListing/ProductListing.jsx +++ b/src/pages/ProductListing/ProductListing.jsx @@ -14,7 +14,6 @@ export default function ProductListing() { try { const responseData = await axios.get("/api/products") setProductsList(responseData.data.products) - console.log(responseData.data.products) } catch (error) { console.log(error) } @@ -28,7 +27,8 @@ export default function ProductListing() {
{productsList.map(product => ( - + + ))}
From 74413222354366b08dba959b0720d33a743fbfb8 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Wed, 18 May 2022 10:01:32 +0530 Subject: [PATCH 07/85] database update --- src/backend/db/products.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/backend/db/products.js b/src/backend/db/products.js index 976e493..df27191 100644 --- a/src/backend/db/products.js +++ b/src/backend/db/products.js @@ -18,6 +18,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:5, categoryName: "fiction", }, { @@ -30,6 +31,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:4, categoryName: "fiction", }, { @@ -42,6 +44,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:3, categoryName: "fiction", }, { @@ -54,6 +57,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:2, categoryName: "fiction", }, { @@ -66,6 +70,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:2, categoryName: "fiction", }, { @@ -78,6 +83,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:3.5, categoryName: "fiction", }, { @@ -90,6 +96,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:4, categoryName: "fiction", }, @@ -104,6 +111,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:5, categoryName: "horror", }, { @@ -116,6 +124,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:3, categoryName: "horror", }, { @@ -128,6 +137,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:3, categoryName: "horror", }, { @@ -140,6 +150,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:3, categoryName: "horror", }, { @@ -152,6 +163,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:3, categoryName: "horror", }, { @@ -164,6 +176,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:3, categoryName: "horror", }, { @@ -176,6 +189,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:3, categoryName: "horror", }, { @@ -188,6 +202,7 @@ export const products = [ discounted: 699, discount: 20 }, + rating:3, categoryName: "horror", }, From 1147b5fb648a6dd9da6086e833dfef8b118e169f Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Wed, 18 May 2022 10:01:46 +0530 Subject: [PATCH 08/85] card component --- src/components/Card/Card.css | 15 +++++++++++++++ src/components/Card/Card.jsx | 13 ++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/components/Card/Card.css b/src/components/Card/Card.css index e69de29..c812d68 100644 --- a/src/components/Card/Card.css +++ b/src/components/Card/Card.css @@ -0,0 +1,15 @@ +:root{ + --primary-color:orange; + --background-color:rgb(187, 240, 207); + --text-color:blue; + --section-background:rgba(230, 240, 233, 0.767); + --dark-background:grey; + --green-color:green; + --yellow-color:yellow; + +} + +a{ + text-decoration: none; + cursor: pointer; +} \ No newline at end of file diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx index 8c2fdeb..b42e641 100644 --- a/src/components/Card/Card.jsx +++ b/src/components/Card/Card.jsx @@ -1,5 +1,5 @@ // import { doepicshit } from "../../../public/assets/book-images" - +import "./Card.css" export default function Card({ product }) { console.log(product) const { productImage, title, author, price: { original, discounted, discount } } = product @@ -13,15 +13,18 @@ export default function Card({ product }) {

{title}

-
{author}
+
- {original} - {discounted} + {author} + {discounted} + {original}
+
+
-
+
) } \ No newline at end of file From 55fe12e526d14287909950726093981057c4768a Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Wed, 18 May 2022 15:07:00 +0530 Subject: [PATCH 09/85] faet: product context --- src/components/Card/Card.jsx | 10 ++++----- src/contexts/product-context.js | 25 +++++++++++++++++++++ src/pages/ProductListing/ProductListing.jsx | 2 -- src/reducer/productReducer.js | 5 +++++ 4 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 src/contexts/product-context.js create mode 100644 src/reducer/productReducer.js diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx index b42e641..1c814d0 100644 --- a/src/components/Card/Card.jsx +++ b/src/components/Card/Card.jsx @@ -1,23 +1,21 @@ // import { doepicshit } from "../../../public/assets/book-images" import "./Card.css" export default function Card({ product }) { - console.log(product) - const { productImage, title, author, price: { original, discounted, discount } } = product + + const { productImage, title, author, price: { original, discounted, discount }, rating } = product return (
sample image - - -

{title}

- {author} + {author} {discounted} {original} + {rating}

diff --git a/src/contexts/product-context.js b/src/contexts/product-context.js new file mode 100644 index 0000000..fd4ccc7 --- /dev/null +++ b/src/contexts/product-context.js @@ -0,0 +1,25 @@ +import { createContext, useContext, useReducer } from "react"; +import { productReducer } from "../reducer/productReducer"; +const ProductContext = createContext(null) + +const ProductProvider = ({children})=>{ + const initialState = { + category:{fiction:true, horror:true}, + rating:"", + sortBy:"" + } + const [state, dispatch] = useReducer(productReducer,initialState) + return( + {children} + ) +} + +const useProduct = ()=>{ + const context = useContext(ProductContext) + if(!context){ + throw new Error("useProduct only inside the product provider"); + } + return context +} + +export {ProductProvider, useProduct} \ No newline at end of file diff --git a/src/pages/ProductListing/ProductListing.jsx b/src/pages/ProductListing/ProductListing.jsx index db95043..6c87699 100644 --- a/src/pages/ProductListing/ProductListing.jsx +++ b/src/pages/ProductListing/ProductListing.jsx @@ -1,6 +1,5 @@ import axios from "axios" import { useState, useEffect } from "react" -import { useRef } from "react/cjs/react.production.min" import { Card, ProductsFilter } from "../../components" @@ -28,7 +27,6 @@ export default function ProductListing() {
{productsList.map(product => ( - ))}
diff --git a/src/reducer/productReducer.js b/src/reducer/productReducer.js new file mode 100644 index 0000000..cbcffb3 --- /dev/null +++ b/src/reducer/productReducer.js @@ -0,0 +1,5 @@ +function productReducer(state, action){ + console.log("from reducer") +} + +export {productReducer} \ No newline at end of file From c72fab5741c3ab17fe8e40e9944d15533fb2e354 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Wed, 18 May 2022 15:49:47 +0530 Subject: [PATCH 10/85] feat: filtering products --- .../ProductsFilterPane.jsx} | 0 src/components/ProductsFilter/ProductsFilterUtils.js | 5 +++++ src/components/index.js | 2 +- src/contexts/product-context.js | 2 +- src/index.js | 6 +++++- src/pages/ProductListing/ProductListing.jsx | 9 +++++---- 6 files changed, 17 insertions(+), 7 deletions(-) rename src/components/{ProductsFilterPane/ProductsFilter.jsx => ProductsFilter/ProductsFilterPane.jsx} (100%) create mode 100644 src/components/ProductsFilter/ProductsFilterUtils.js diff --git a/src/components/ProductsFilterPane/ProductsFilter.jsx b/src/components/ProductsFilter/ProductsFilterPane.jsx similarity index 100% rename from src/components/ProductsFilterPane/ProductsFilter.jsx rename to src/components/ProductsFilter/ProductsFilterPane.jsx diff --git a/src/components/ProductsFilter/ProductsFilterUtils.js b/src/components/ProductsFilter/ProductsFilterUtils.js new file mode 100644 index 0000000..bfca942 --- /dev/null +++ b/src/components/ProductsFilter/ProductsFilterUtils.js @@ -0,0 +1,5 @@ +const getFilteredProducts = ()=>{ + console.log("from product filter") +} + +export {getFilteredProducts} \ No newline at end of file diff --git a/src/components/index.js b/src/components/index.js index 451cb2f..e94c360 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -1,5 +1,5 @@ import Header from "./Header/Header" import Card from "./Card/Card" -import ProductsFilter from "./ProductsFilterPane/ProductsFilter" +import ProductsFilter from "./ProductsFilter/ProductsFilterPane" export {Header, Card, ProductsFilter} \ No newline at end of file diff --git a/src/contexts/product-context.js b/src/contexts/product-context.js index fd4ccc7..fb2a556 100644 --- a/src/contexts/product-context.js +++ b/src/contexts/product-context.js @@ -10,7 +10,7 @@ const ProductProvider = ({children})=>{ } const [state, dispatch] = useReducer(productReducer,initialState) return( - {children} + {children} ) } diff --git a/src/index.js b/src/index.js index c7df362..7c0e437 100644 --- a/src/index.js +++ b/src/index.js @@ -3,13 +3,17 @@ import ReactDOM from "react-dom"; import "./index.css"; import App from "./App"; import { makeServer } from "./server"; +import {ProductProvider} from "./contexts/product-context" // Call make Server makeServer(); ReactDOM.render( - + + + + , document.getElementById("root") ); diff --git a/src/pages/ProductListing/ProductListing.jsx b/src/pages/ProductListing/ProductListing.jsx index 6c87699..d5f95c4 100644 --- a/src/pages/ProductListing/ProductListing.jsx +++ b/src/pages/ProductListing/ProductListing.jsx @@ -1,12 +1,13 @@ import axios from "axios" import { useState, useEffect } from "react" import { Card, ProductsFilter } from "../../components" - - +import { useProduct } from "../../contexts/product-context" +import { getFilteredProducts } from "../../components/ProductsFilter/ProductsFilterUtils" export default function ProductListing() { - + const { state } = useProduct() + console.log(state) const [productsList, setProductsList] = useState([]) - + const FilteredProductList = getFilteredProducts(state, productsList) useEffect(() => (async function fetchProducts() { From 70cc9c5fa65a97e6ba8197ce5ab4bf95c325ca64 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 24 May 2022 16:29:05 +0530 Subject: [PATCH 11/85] feat: filter by price, rating --- src/components/Card/doepicshit.jpg | Bin 21933 -> 0 bytes .../ProductsFilter/ProductsFilterUtils.js | 16 +++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) delete mode 100644 src/components/Card/doepicshit.jpg diff --git a/src/components/Card/doepicshit.jpg b/src/components/Card/doepicshit.jpg deleted file mode 100644 index 1a0f4156e94f78f0c891f57fe15917f3d5ef1703..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21933 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�t;o5E3bU1+<@gLc}K&{jbqDf~lB+&Wm33 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 diff --git a/src/components/ProductsFilter/ProductsFilterUtils.js b/src/components/ProductsFilter/ProductsFilterUtils.js index bfca942..b77813e 100644 --- a/src/components/ProductsFilter/ProductsFilterUtils.js +++ b/src/components/ProductsFilter/ProductsFilterUtils.js @@ -1,5 +1,15 @@ -const getFilteredProducts = ()=>{ - console.log("from product filter") +const sortBy = ({sortBy}, products)=>{ + const sortedProducts = [...products] + switch(sortBy){ + case "HIGH-TO-LOW": + return sortedProducts.sort((product1, product2)=>product2.price.discounted - product1.price.discounted) + case "LOW-TO-HiGH": + return sortedProducts.sort((product1,product2) => product1.price.discounted - product2.price.discounted) + default: + return sortedProducts + } } -export {getFilteredProducts} \ No newline at end of file +const ratedProducts =({rating}, products)=>{ + return products.filter(product => product.rating >=rating) +} \ No newline at end of file From 78459aa72731cacc158cbf9dc4e60ce8c68f57c1 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 24 May 2022 19:57:33 +0530 Subject: [PATCH 12/85] fix: sortby by price function --- .../ProductsFilter/ProductsFilterPane.jsx | 37 +++++++++++++++---- .../ProductsFilter/ProductsFilterUtils.js | 25 ++++++++++--- src/pages/ProductListing/ProductListing.jsx | 1 + src/reducer/productReducer.js | 14 ++++++- 4 files changed, 64 insertions(+), 13 deletions(-) diff --git a/src/components/ProductsFilter/ProductsFilterPane.jsx b/src/components/ProductsFilter/ProductsFilterPane.jsx index 016b18c..7249abe 100644 --- a/src/components/ProductsFilter/ProductsFilterPane.jsx +++ b/src/components/ProductsFilter/ProductsFilterPane.jsx @@ -1,6 +1,10 @@ +import { useProduct } from "../../contexts/product-context" export default function ProductFilter() { + const { state, dispatch } = useProduct(); + const { rating, sortBy } = state; + return ( - +
filter @@ -33,8 +37,9 @@ export default function ProductFilter() {

Rating

+
) } \ No newline at end of file diff --git a/src/components/ProductsFilter/ProductsFilterUtils.js b/src/components/ProductsFilter/ProductsFilterUtils.js index b77813e..d9437c5 100644 --- a/src/components/ProductsFilter/ProductsFilterUtils.js +++ b/src/components/ProductsFilter/ProductsFilterUtils.js @@ -1,15 +1,30 @@ -const sortBy = ({sortBy}, products)=>{ +import { useProduct } from "../../contexts/product-context" + +const getSortedProducts = ({sortBy}, products)=>{ const sortedProducts = [...products] switch(sortBy){ - case "HIGH-TO-LOW": + case "HIGH_TO_LOW": return sortedProducts.sort((product1, product2)=>product2.price.discounted - product1.price.discounted) - case "LOW-TO-HiGH": + case "LOW_TO_HiGH": return sortedProducts.sort((product1,product2) => product1.price.discounted - product2.price.discounted) default: return sortedProducts } } -const ratedProducts =({rating}, products)=>{ +const getRatedProducts =({rating}, products)=>{ return products.filter(product => product.rating >=rating) -} \ No newline at end of file +} + + +const applyFilters = (state, ...args)=>(products)=>{ + return args.reduce((acc,curr)=>{ + return curr(state, acc) + },products) +} +console.log("in productfilterutils.js") +export const getFilteredProducts =(state, products)=> applyFilters( + state, + getSortedProducts, + getRatedProducts +)(products) \ No newline at end of file diff --git a/src/pages/ProductListing/ProductListing.jsx b/src/pages/ProductListing/ProductListing.jsx index d5f95c4..7b1dc69 100644 --- a/src/pages/ProductListing/ProductListing.jsx +++ b/src/pages/ProductListing/ProductListing.jsx @@ -8,6 +8,7 @@ export default function ProductListing() { console.log(state) const [productsList, setProductsList] = useState([]) const FilteredProductList = getFilteredProducts(state, productsList) + console.log(FilteredProductList) useEffect(() => (async function fetchProducts() { diff --git a/src/reducer/productReducer.js b/src/reducer/productReducer.js index cbcffb3..6c4f2fa 100644 --- a/src/reducer/productReducer.js +++ b/src/reducer/productReducer.js @@ -1,5 +1,17 @@ function productReducer(state, action){ - console.log("from reducer") + const initialState = { + category:{fiction:true, horror:true}, + rating:"", + sortBy:"" + } + switch (action.type) { + case "SORT_BY": + return{...state, sortBy:action.payload} + + + default: + return state + } } export {productReducer} \ No newline at end of file From 9705dd93ed2d7835aeb1e9336d6de686f1748165 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 24 May 2022 19:59:59 +0530 Subject: [PATCH 13/85] products price updated --- src/backend/db/products.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/backend/db/products.js b/src/backend/db/products.js index df27191..c552150 100644 --- a/src/backend/db/products.js +++ b/src/backend/db/products.js @@ -15,7 +15,7 @@ export const products = [ author: "Shiv Khera", price: { original: 869, - discounted: 699, + discounted: 299, discount: 20 }, rating:5, @@ -28,7 +28,7 @@ export const products = [ author: "Robert Brown", price: { original: 869, - discounted: 699, + discounted: 689, discount: 20 }, rating:4, @@ -41,7 +41,7 @@ export const products = [ author: "Ruskin Bond", price: { original: 869, - discounted: 699, + discounted: 259, discount: 20 }, rating:3, @@ -54,7 +54,7 @@ export const products = [ author: "Garcia Hector", price: { original: 869, - discounted: 699, + discounted: 500, discount: 20 }, rating:2, @@ -67,7 +67,7 @@ export const products = [ author: "Saeed Naqvi", price: { original: 869, - discounted: 699, + discounted: 237, discount: 20 }, rating:2, @@ -80,7 +80,7 @@ export const products = [ author: "Garcia Hector", price: { original: 869, - discounted: 699, + discounted: 125, discount: 20 }, rating:3.5, @@ -93,7 +93,7 @@ export const products = [ author: "J K Rowling", price: { original: 869, - discounted: 699, + discounted: 126, discount: 20 }, rating:4, @@ -108,7 +108,7 @@ export const products = [ author: "Junaid Qureshi", price: { original: 869, - discounted: 699, + discounted: 788, discount: 20 }, rating:5, @@ -121,7 +121,7 @@ export const products = [ author: "Ruskin Bond", price: { original: 869, - discounted: 699, + discounted: 566, discount: 20 }, rating:3, @@ -134,7 +134,7 @@ export const products = [ author: "Chetan Bhagat", price: { original: 869, - discounted: 699, + discounted: 128, discount: 20 }, rating:3, @@ -147,7 +147,7 @@ export const products = [ author: "Anita Krishnan", price: { original: 869, - discounted: 699, + discounted: 446, discount: 20 }, rating:3, @@ -160,7 +160,7 @@ export const products = [ author: "Chandradip Paitandi", price: { original: 869, - discounted: 699, + discounted: 556, discount: 20 }, rating:3, @@ -186,7 +186,7 @@ export const products = [ author: "Stephen King", price: { original: 869, - discounted: 699, + discounted: 470, discount: 20 }, rating:3, @@ -199,7 +199,7 @@ export const products = [ author: "Nag Mani", price: { original: 869, - discounted: 699, + discounted: 666, discount: 20 }, rating:3, From 66634b7379b01ea9c2f307c8d7e196efcb2d95fe Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 24 May 2022 20:42:07 +0530 Subject: [PATCH 14/85] refactor --- src/components/Card/Card.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx index 1c814d0..156ccce 100644 --- a/src/components/Card/Card.jsx +++ b/src/components/Card/Card.jsx @@ -13,8 +13,8 @@ export default function Card({ product }) {
{author} - {discounted} - {original} + {discounted} + {original} {rating}
From 567ed1eef6a0e936523fa9f9d336e0e27fbf1297 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 24 May 2022 20:42:20 +0530 Subject: [PATCH 15/85] feat: rating added --- .../ProductsFilter/ProductsFilterPane.jsx | 45 ++++++++++++++++--- .../ProductsFilter/ProductsFilterUtils.js | 8 ++-- src/pages/ProductListing/ProductListing.jsx | 2 +- src/reducer/productReducer.js | 6 ++- 4 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/components/ProductsFilter/ProductsFilterPane.jsx b/src/components/ProductsFilter/ProductsFilterPane.jsx index 7249abe..55f2609 100644 --- a/src/components/ProductsFilter/ProductsFilterPane.jsx +++ b/src/components/ProductsFilter/ProductsFilterPane.jsx @@ -38,15 +38,48 @@ export default function ProductFilter() {

Rating

-
diff --git a/src/components/ProductsFilter/ProductsFilterUtils.js b/src/components/ProductsFilter/ProductsFilterUtils.js index d9437c5..8e2220c 100644 --- a/src/components/ProductsFilter/ProductsFilterUtils.js +++ b/src/components/ProductsFilter/ProductsFilterUtils.js @@ -2,11 +2,13 @@ import { useProduct } from "../../contexts/product-context" const getSortedProducts = ({sortBy}, products)=>{ const sortedProducts = [...products] + let test = [] switch(sortBy){ + case "HIGH_TO_LOW": return sortedProducts.sort((product1, product2)=>product2.price.discounted - product1.price.discounted) - case "LOW_TO_HiGH": - return sortedProducts.sort((product1,product2) => product1.price.discounted - product2.price.discounted) + case "LOW_TO_HIGH": + return sortedProducts.sort((product1, product2) => product1.price.discounted - product2.price.discounted) default: return sortedProducts } @@ -22,7 +24,7 @@ const applyFilters = (state, ...args)=>(products)=>{ return curr(state, acc) },products) } -console.log("in productfilterutils.js") + export const getFilteredProducts =(state, products)=> applyFilters( state, getSortedProducts, diff --git a/src/pages/ProductListing/ProductListing.jsx b/src/pages/ProductListing/ProductListing.jsx index 7b1dc69..9b5c54f 100644 --- a/src/pages/ProductListing/ProductListing.jsx +++ b/src/pages/ProductListing/ProductListing.jsx @@ -27,7 +27,7 @@ export default function ProductListing() {
- {productsList.map(product => ( + {FilteredProductList.map(product => ( ))}
diff --git a/src/reducer/productReducer.js b/src/reducer/productReducer.js index 6c4f2fa..bbaa6e3 100644 --- a/src/reducer/productReducer.js +++ b/src/reducer/productReducer.js @@ -6,8 +6,10 @@ function productReducer(state, action){ } switch (action.type) { case "SORT_BY": - return{...state, sortBy:action.payload} - + return {...state, sortBy:action.payload} + + case "RATING": + return {...state, rating:action.payload} default: return state From 9602589338fcd26fc0148f232163f12884a15617 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Wed, 25 May 2022 00:25:23 +0530 Subject: [PATCH 16/85] feat: category filter --- .../ProductsFilter/ProductsFilterPane.jsx | 16 +++++++--------- .../ProductsFilter/ProductsFilterUtils.js | 17 +++++++++++++++-- src/reducer/productReducer.js | 8 +++++++- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/components/ProductsFilter/ProductsFilterPane.jsx b/src/components/ProductsFilter/ProductsFilterPane.jsx index 55f2609..770fed5 100644 --- a/src/components/ProductsFilter/ProductsFilterPane.jsx +++ b/src/components/ProductsFilter/ProductsFilterPane.jsx @@ -24,13 +24,11 @@ export default function ProductFilter() {

Category

- {/* */} +
@@ -39,7 +37,7 @@ export default function ProductFilter() {

Rating

{/* ggg */} -
diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index 7730e7b..d36c9d7 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -1,8 +1,11 @@ +import { Link } from "react-router-dom" + export default function Header() { return (
diff --git a/src/pages/WishList/WishList.jsx b/src/pages/WishList/WishList.jsx new file mode 100644 index 0000000..2233080 --- /dev/null +++ b/src/pages/WishList/WishList.jsx @@ -0,0 +1,5 @@ +export default function WishList() { + return ( +
This is wishlist
+ ) +} \ No newline at end of file diff --git a/src/pages/index.js b/src/pages/index.js index 8a82b54..b0f2a63 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -1,5 +1,6 @@ import Cart from "./Cart/Cart" import ProductListing from "./ProductListing/ProductListing" import LandingPage from "./LandingPage/LandingPage" +import WishList from "./WishList/WishList" -export {Cart, ProductListing, LandingPage} \ No newline at end of file +export {Cart, ProductListing, LandingPage, WishList} \ No newline at end of file diff --git a/src/router/router.jsx b/src/router/router.jsx index e57e4c1..5f46110 100644 --- a/src/router/router.jsx +++ b/src/router/router.jsx @@ -1,12 +1,13 @@ import { Route, Routes } from "react-router-dom"; -import { LandingPage, ProductListing, Cart } from "../pages/index"; +import { LandingPage, ProductListing, Cart, WishList } from "../pages/index"; export default function Router() { return ( } /> } /> } /> + } /> ) } From 52df0d6bbbb678b96bd88f2b5d2df6aadcbe322f Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Thu, 26 May 2022 21:23:09 +0530 Subject: [PATCH 28/85] code refactor --- src/components/Header/Header.jsx | 7 +++++-- src/pages/Authentication/Login.jsx | 5 +++++ src/pages/Authentication/SignUp.jsx | 5 +++++ src/pages/LandingPage/LandingPage.jsx | 10 +++++----- src/pages/index.js | 4 +++- 5 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 src/pages/Authentication/Login.jsx create mode 100644 src/pages/Authentication/SignUp.jsx diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index d36c9d7..c796463 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -20,9 +20,12 @@ export default function Header() {
- + {/*
2
- + */} + wish + {" "} + cart
diff --git a/src/pages/Authentication/Login.jsx b/src/pages/Authentication/Login.jsx new file mode 100644 index 0000000..f2f4ed4 --- /dev/null +++ b/src/pages/Authentication/Login.jsx @@ -0,0 +1,5 @@ +export default function Login() { + return ( +
This is login page
+ ) +} \ No newline at end of file diff --git a/src/pages/Authentication/SignUp.jsx b/src/pages/Authentication/SignUp.jsx new file mode 100644 index 0000000..fa570f4 --- /dev/null +++ b/src/pages/Authentication/SignUp.jsx @@ -0,0 +1,5 @@ +export default function SignUp() { + return ( +
This is sign up page
+ ) +} \ No newline at end of file diff --git a/src/pages/LandingPage/LandingPage.jsx b/src/pages/LandingPage/LandingPage.jsx index 0db56ba..fdaa6c2 100644 --- a/src/pages/LandingPage/LandingPage.jsx +++ b/src/pages/LandingPage/LandingPage.jsx @@ -25,7 +25,7 @@ export default function LandingPage() {
- sample image + sample image New
@@ -38,7 +38,7 @@ export default function LandingPage() {
- sample image + sample image

Do Epic Shit(paperback) by Ankur warikko

@@ -49,7 +49,7 @@ export default function LandingPage() {
- sample image + sample image

Do Epic Shit(paperback) by Ankur warikko

@@ -62,7 +62,7 @@ export default function LandingPage() {
- sample image + sample image

Do Epic Shit(paperback) by Ankur warikko

@@ -76,7 +76,7 @@ export default function LandingPage() {
- sample image + sample image

Do Epic Shit(paperback) by Ankur warikko

diff --git a/src/pages/index.js b/src/pages/index.js index b0f2a63..c06241f 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -2,5 +2,7 @@ import Cart from "./Cart/Cart" import ProductListing from "./ProductListing/ProductListing" import LandingPage from "./LandingPage/LandingPage" import WishList from "./WishList/WishList" +import Login from "./Authentication/Login" +import SignUp from "./Authentication/SignUp" -export {Cart, ProductListing, LandingPage, WishList} \ No newline at end of file +export {Cart, ProductListing, LandingPage, WishList, Login, SignUp} \ No newline at end of file From 745e2b742920600db3d0236955ba6d7a5e9630a7 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Thu, 26 May 2022 21:52:49 +0530 Subject: [PATCH 29/85] feat: cart imports and basic initial functions --- src/contexts/cart-context.js | 28 ++++++++++++++++++++++++++++ src/reducer/cartReducer.js | 5 +++++ 2 files changed, 33 insertions(+) create mode 100644 src/contexts/cart-context.js create mode 100644 src/reducer/cartReducer.js diff --git a/src/contexts/cart-context.js b/src/contexts/cart-context.js new file mode 100644 index 0000000..6f8041a --- /dev/null +++ b/src/contexts/cart-context.js @@ -0,0 +1,28 @@ +import { createContext, useContext, useEffect, useReducer } from "react"; +import { cartReducer } from "../reducer/cartReducer"; + +const CartContext = createContext() + +const CartProvider = ({children})=>{ + + const initialCartState = { + cart:[], + cartCount:0, + cartTotalPrice:0, + cartFinalPrice:0 + } + + const [state, Dispatch] = useReducer(cartReducer, initialCartState) + + return {children} +} + +const useCart = ()=>{ + const context = useContext(CartContext) + if(!context){ + throw new Error("useCart must be used inside CartProvider") + }else{ + return context + } +} + diff --git a/src/reducer/cartReducer.js b/src/reducer/cartReducer.js new file mode 100644 index 0000000..f17a61e --- /dev/null +++ b/src/reducer/cartReducer.js @@ -0,0 +1,5 @@ +function cartReducer(){ + return +} + +export {cartReducer} \ No newline at end of file From e8d54ab5f458dfd73867cb9c8caaf690da6502ba Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Fri, 27 May 2022 00:04:03 +0530 Subject: [PATCH 30/85] refactor --- src/components/Header/Header.jsx | 5 +++-- src/contexts/cart-context.js | 26 ++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index c796463..0d83403 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -23,9 +23,10 @@ export default function Header() { {/*
2
*/} - wish + + wish {" "} - cart + cart
diff --git a/src/contexts/cart-context.js b/src/contexts/cart-context.js index 6f8041a..27c8927 100644 --- a/src/contexts/cart-context.js +++ b/src/contexts/cart-context.js @@ -12,9 +12,29 @@ const CartProvider = ({children})=>{ cartFinalPrice:0 } - const [state, Dispatch] = useReducer(cartReducer, initialCartState) + const [state, dispatch] = useReducer(cartReducer, initialCartState) - return {children} + async function getCart(){ + + } + + async function addToCart(){ + + } + + async function deleteFromCart(){ + + } + + async function incrementCart(){ + + } + + async function decrementCart(){ + + } + + return {children} } const useCart = ()=>{ @@ -26,3 +46,5 @@ const useCart = ()=>{ } } + +export {CartProvider, useCart} \ No newline at end of file From d7db1c2441edc4eb977a1ff907d05bd06fff6b41 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Fri, 27 May 2022 00:21:08 +0530 Subject: [PATCH 31/85] feat: footer component --- src/components/Footer/Footer.jsx | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/components/Footer/Footer.jsx diff --git a/src/components/Footer/Footer.jsx b/src/components/Footer/Footer.jsx new file mode 100644 index 0000000..eb3d11f --- /dev/null +++ b/src/components/Footer/Footer.jsx @@ -0,0 +1,43 @@ +export default function Footer(){ + return ( +
+
+ Get In touch + +
    + + + +
+
+
+ Quick Links + +
    + + + +
+
+
+ Information + +
    + + + +
+
+
+ Follow Us + +
    + + + + 2022 Copyright Reserved +
+
+
+ ) +} \ No newline at end of file From 869bd72f9c92bbfcc894d3acfb9ff655159bed85 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Fri, 27 May 2022 00:51:01 +0530 Subject: [PATCH 32/85] feat: notfound component --- src/App.js | 3 ++- src/components/Header/Header.jsx | 5 ++++- src/components/NotFound/NotFound.jsx | 8 ++++++++ src/components/index.js | 4 +++- src/pages/Authentication/Login.jsx | 17 ++++++++++++++++- src/pages/Authentication/SignUp.jsx | 16 +++++++++++++++- src/router/router.jsx | 4 +++- 7 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 src/components/NotFound/NotFound.jsx diff --git a/src/App.js b/src/App.js index 93ed4c5..5e04705 100644 --- a/src/App.js +++ b/src/App.js @@ -1,5 +1,5 @@ import "./App.css"; -import {Header} from "./components/index" +import {Footer, Header} from "./components/index" import {ProductListing} from "./pages/index" import Router from "./router/router"; // import logo from "./logo.png"; @@ -10,6 +10,7 @@ function App() {
{/* starting from "/" home page routing happens , header remains always as it is a single entity in parent app component */} +
); } diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index 0d83403..ae2a419 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -27,8 +27,11 @@ export default function Header() { wish {" "} cart +
- + + + diff --git a/src/components/NotFound/NotFound.jsx b/src/components/NotFound/NotFound.jsx new file mode 100644 index 0000000..48b3fd9 --- /dev/null +++ b/src/components/NotFound/NotFound.jsx @@ -0,0 +1,8 @@ +export default function NotFound({message}){ + return ( + <> +
This is page not found
+

{message}

+ + ) +} \ No newline at end of file diff --git a/src/components/index.js b/src/components/index.js index e94c360..2aadf51 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -1,5 +1,7 @@ import Header from "./Header/Header" import Card from "./Card/Card" import ProductsFilter from "./ProductsFilter/ProductsFilterPane" +import Footer from "./Footer/Footer" +import NotFound from "./NotFound/NotFound" -export {Header, Card, ProductsFilter} \ No newline at end of file +export {Header, Card, ProductsFilter, Footer, NotFound} \ No newline at end of file diff --git a/src/pages/Authentication/Login.jsx b/src/pages/Authentication/Login.jsx index f2f4ed4..0d95a83 100644 --- a/src/pages/Authentication/Login.jsx +++ b/src/pages/Authentication/Login.jsx @@ -1,5 +1,20 @@ +import { Link } from "react-router-dom" + export default function Login() { return ( -
This is login page
+ +
+
+

Login In

+ + + + {/* Don't have an acoount ? */} + + Don't have an acoount ? + +
+ +
) } \ No newline at end of file diff --git a/src/pages/Authentication/SignUp.jsx b/src/pages/Authentication/SignUp.jsx index fa570f4..a6fbdad 100644 --- a/src/pages/Authentication/SignUp.jsx +++ b/src/pages/Authentication/SignUp.jsx @@ -1,5 +1,19 @@ +import { Link } from "react-router-dom" + export default function SignUp() { return ( -
This is sign up page
+
+
+ +

Create Account

+ + + + + + + Already have an account? +
+
) } \ No newline at end of file diff --git a/src/router/router.jsx b/src/router/router.jsx index 5f46110..774ce63 100644 --- a/src/router/router.jsx +++ b/src/router/router.jsx @@ -1,6 +1,6 @@ import { Route, Routes } from "react-router-dom"; -import { LandingPage, ProductListing, Cart, WishList } from "../pages/index"; +import { LandingPage, ProductListing, Cart, WishList, Login, SignUp } from "../pages/index"; export default function Router() { return ( @@ -8,6 +8,8 @@ export default function Router() { } /> } /> } /> + } /> + }/> ) } From 821c68398888b7449aa3cceb23f63efe23f1c7f3 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Fri, 27 May 2022 21:36:10 +0530 Subject: [PATCH 33/85] feat: inputhandler --- src/contexts/auth-context.js | 39 +++++++++++++++++++++++++ src/pages/Authentication/Login.jsx | 1 - src/pages/Authentication/SignUp.jsx | 44 +++++++++++++++++++++++------ 3 files changed, 74 insertions(+), 10 deletions(-) create mode 100644 src/contexts/auth-context.js diff --git a/src/contexts/auth-context.js b/src/contexts/auth-context.js new file mode 100644 index 0000000..b29c84b --- /dev/null +++ b/src/contexts/auth-context.js @@ -0,0 +1,39 @@ +import { createContext, useContext } from "react"; +import { useEffect, useState } from "react/cjs/react.production.min"; +import { useNavigate } from "react-router-dom"; + +const AuthContext = createContext() + +const AuthProvider = ({children})=>{ + const navigate = useNavigate() + const [isLogged, setIsLogged] = useState(false) + const userToken = localStorage.getItem("token") + + useEffect(()=>{ + if(userToken){ + setIsLogged(true) + } + }, [userToken]) + + function logoutHandler(){ + setIsLogged(false) + localStorage.removeItem("token") + navigate("/") + + } + + return {children} +} + +const useAuth = ()=>{ + const context = useContext(AuthContext) + if(!context){ + throw new Error("useAuth must be used inside AuthProvider") + }else{ + return context + } +} + + + +export {AuthProvider, useAuth} \ No newline at end of file diff --git a/src/pages/Authentication/Login.jsx b/src/pages/Authentication/Login.jsx index 0d95a83..8083434 100644 --- a/src/pages/Authentication/Login.jsx +++ b/src/pages/Authentication/Login.jsx @@ -9,7 +9,6 @@ export default function Login() { - {/* Don't have an acoount ? */} Don't have an acoount ? diff --git a/src/pages/Authentication/SignUp.jsx b/src/pages/Authentication/SignUp.jsx index a6fbdad..2bae927 100644 --- a/src/pages/Authentication/SignUp.jsx +++ b/src/pages/Authentication/SignUp.jsx @@ -1,18 +1,44 @@ import { Link } from "react-router-dom" +import { useState } from "react" export default function SignUp() { + + const [newUserData, setNewUserData] = useState({ + firstName:"", + lastName:"", + emailId:"", + password:"", + confirmPassword:"" + }) + + function userInputHandler(event){ + const {name, value} = event.target; + + setNewUserData(prev => ({...prev, [name]:value})) + } + + function sendNewUserData(data){ + + } + + function signUpHandler(e){ + e.preventDefault() + sendNewUserData(newUserData) + } + return ( -
-
+
+ -

Create Account

- - - - - +

Create Account

+ + + + + + - Already have an account? + Already have an account?
) From c4392b3cd14322ffa5f67958f5ed5428d037d0f5 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Fri, 27 May 2022 21:44:21 +0530 Subject: [PATCH 34/85] fix class to className --- src/components/Footer/Footer.jsx | 34 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/components/Footer/Footer.jsx b/src/components/Footer/Footer.jsx index eb3d11f..ad81e38 100644 --- a/src/components/Footer/Footer.jsx +++ b/src/components/Footer/Footer.jsx @@ -1,40 +1,40 @@ export default function Footer(){ return ( -
+
- Get In touch + Get In touch
    - - - +
  • abcdefghijklmn
  • +
  • abcdefghijklmn
  • +
  • abcdefghijklmn
- Quick Links + Quick Links
    - - - +
  • abcdefghijklmn
  • +
  • abcdefghijklmn
  • +
  • abcdefghijklmn
- Information + Information
    - - - +
  • abcdefghijklmn
  • +
  • abcdefghijklmn
  • +
  • abcdefghijklmn
- Follow Us + Follow Us
    - - - +
  • abcdefghijklmn
  • +
  • abcdefghijklmn
  • +
  • abcdefghijklmn
  • 2022 Copyright Reserved
From 61307568638eff65c1dfb54c69cbb1ba2efa0182 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Sat, 28 May 2022 00:24:31 +0530 Subject: [PATCH 35/85] Error in auth need to fix --- src/pages/Authentication/SignUp.jsx | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/pages/Authentication/SignUp.jsx b/src/pages/Authentication/SignUp.jsx index 2bae927..057676e 100644 --- a/src/pages/Authentication/SignUp.jsx +++ b/src/pages/Authentication/SignUp.jsx @@ -1,5 +1,6 @@ import { Link } from "react-router-dom" import { useState } from "react" +import axios from "axios"; export default function SignUp() { @@ -17,8 +18,23 @@ export default function SignUp() { setNewUserData(prev => ({...prev, [name]:value})) } - function sendNewUserData(data){ - + async function sendNewUserData(data){ + console.log("in senduserdata") + if(data.password === data.confirmPassword){ + console.log(data) + try{ + const response = await axios.post("/api/auth/signup", data) + if (response.status === 201) { + const { data } = response; + const userToken = data.encodedToken + console.log(userToken) + localStorage.setItem("userToken", userToken) + navigate("/products") + } + }catch(error){ + console.log(error.response) + } + } } function signUpHandler(e){ From 3b35f277e922d47ae7c3c903f57b3e312cf22eee Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Mon, 30 May 2022 18:33:48 +0530 Subject: [PATCH 36/85] Error in login and signup need to fix --- src/pages/Authentication/Login.jsx | 31 +++++++++++++++++++++++++---- src/pages/Authentication/SignUp.jsx | 18 ++++++++++------- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/pages/Authentication/Login.jsx b/src/pages/Authentication/Login.jsx index 8083434..8d38783 100644 --- a/src/pages/Authentication/Login.jsx +++ b/src/pages/Authentication/Login.jsx @@ -1,17 +1,40 @@ import { Link } from "react-router-dom" +import { useState } from "react" +import axios from "axios"; export default function Login() { + + const [userData, setUserData] = useState({email:"", password:""}) + + function userInputHandler(event) { + const { name, value } = event.target; + + setUserData(prev => ({ ...prev, [name]: value })) + } + + function loginHandler(event) + { event.preventDefault() + sendUserData(userData) + } + + async function sendUserData(data){ + console.log("I am in senduserdata") + console.log(data) + const response = await axios.get("/api/auth/login", data) + console.log(response) + } + return (
-

Login In

- - +

Login In

+ + Don't have an acoount ? - +
diff --git a/src/pages/Authentication/SignUp.jsx b/src/pages/Authentication/SignUp.jsx index 057676e..e21300a 100644 --- a/src/pages/Authentication/SignUp.jsx +++ b/src/pages/Authentication/SignUp.jsx @@ -7,7 +7,7 @@ export default function SignUp() { const [newUserData, setNewUserData] = useState({ firstName:"", lastName:"", - emailId:"", + email:"", password:"", confirmPassword:"" }) @@ -20,16 +20,20 @@ export default function SignUp() { async function sendNewUserData(data){ console.log("in senduserdata") + console.log(data) if(data.password === data.confirmPassword){ - console.log(data) + try{ const response = await axios.post("/api/auth/signup", data) + console.log(response) if (response.status === 201) { + console.log("hello 201 code") + // ERROR NEED TO FIX HERE, GETTING 500 STATUS CODE const { data } = response; - const userToken = data.encodedToken - console.log(userToken) - localStorage.setItem("userToken", userToken) - navigate("/products") + // const userToken = data.encodedToken + // console.log(userToken) + // localStorage.setItem("userToken", userToken) + // navigate("/products") } }catch(error){ console.log(error.response) @@ -49,7 +53,7 @@ export default function SignUp() {

Create Account

- + From 4a03494fb4f9342daba7182dc7d970e4d845ccb8 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Mon, 30 May 2022 20:55:36 +0530 Subject: [PATCH 37/85] core: react-router-dom --- package-lock.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package-lock.json b/package-lock.json index bc2467f..6a008b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "mockman-js": "^1.0.5", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-router-dom":"^6.2.2", "react-scripts": "4.0.3", "uuid": "^8.3.2", "web-vitals": "^0.2.4" From a73e9d91c6b1cd100876d1433c4741f3aeccf1b8 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Mon, 30 May 2022 20:56:02 +0530 Subject: [PATCH 38/85] fix : react-router --- src/contexts/auth-context.js | 2 +- src/index.js | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/contexts/auth-context.js b/src/contexts/auth-context.js index b29c84b..576c2ee 100644 --- a/src/contexts/auth-context.js +++ b/src/contexts/auth-context.js @@ -1,5 +1,5 @@ import { createContext, useContext } from "react"; -import { useEffect, useState } from "react/cjs/react.production.min"; +import { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; const AuthContext = createContext() diff --git a/src/index.js b/src/index.js index 6d13ec6..d5e094b 100644 --- a/src/index.js +++ b/src/index.js @@ -5,6 +5,7 @@ import App from "./App"; import { makeServer } from "./server"; import {ProductProvider} from "./contexts/product-context" import { BrowserRouter } from "react-router-dom"; +import { AuthProvider } from "./contexts/auth-context"; // Call make Server makeServer(); @@ -14,7 +15,9 @@ ReactDOM.render( - + + + From 3937599058569f73e775b3389619f01c561e95d7 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Mon, 30 May 2022 21:10:52 +0530 Subject: [PATCH 39/85] core: dotenv: ^16.0.0 --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index 6a455df..98a2b43 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "dependencies": { "axios": "^0.21.4", "dayjs": "^1.10.7", + "dotenv": "^16.0.0", + "json-web-token": "^3.2.0", "jwt-decode": "^3.1.2", "jwt-encode": "^1.0.1", "miragejs": "^0.1.41", From 0a63147b286a3305d77435f9bf1dabeae607ca48 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Mon, 30 May 2022 21:13:04 +0530 Subject: [PATCH 40/85] fix core --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 98a2b43..87af078 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,6 @@ "dependencies": { "axios": "^0.21.4", "dayjs": "^1.10.7", - "dotenv": "^16.0.0", "json-web-token": "^3.2.0", "jwt-decode": "^3.1.2", "jwt-encode": "^1.0.1", From e4690f7043b5d63a0a5f13ec74589d74af081aea Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Tue, 31 May 2022 22:25:58 +0530 Subject: [PATCH 41/85] fix: Auth working --- package.json | 2 ++ src/pages/Authentication/Login.jsx | 21 +++++++++++++++------ src/pages/Authentication/SignUp.jsx | 24 +++++++++--------------- src/router/router.jsx | 6 ++++++ src/server.js | 2 ++ 5 files changed, 34 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 87af078..28223b4 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "dependencies": { "axios": "^0.21.4", "dayjs": "^1.10.7", + "dotenv": "^16.0.0", + "json-web-token": "^3.2.0", "jwt-decode": "^3.1.2", "jwt-encode": "^1.0.1", diff --git a/src/pages/Authentication/Login.jsx b/src/pages/Authentication/Login.jsx index 8d38783..7a9cc95 100644 --- a/src/pages/Authentication/Login.jsx +++ b/src/pages/Authentication/Login.jsx @@ -1,14 +1,13 @@ -import { Link } from "react-router-dom" +import { Link, useNavigate } from "react-router-dom" import { useState } from "react" import axios from "axios"; export default function Login() { - + const navigate = useNavigate() const [userData, setUserData] = useState({email:"", password:""}) function userInputHandler(event) { const { name, value } = event.target; - setUserData(prev => ({ ...prev, [name]: value })) } @@ -17,13 +16,23 @@ export default function Login() { sendUserData(userData) } - async function sendUserData(data){ + async function sendUserData(data) { console.log("I am in senduserdata") console.log(data) - const response = await axios.get("/api/auth/login", data) - console.log(response) + try{ + const response = await axios.post("/api/auth/login", data) + if (response.status === 200) { + const encodedToken = response.data.encodedToken + localStorage.setItem("encodedToken", encodedToken) + navigate("/products") + } + }catch(error){ + console.log(error) + } + } + return (
diff --git a/src/pages/Authentication/SignUp.jsx b/src/pages/Authentication/SignUp.jsx index e21300a..d6a5d39 100644 --- a/src/pages/Authentication/SignUp.jsx +++ b/src/pages/Authentication/SignUp.jsx @@ -1,9 +1,9 @@ -import { Link } from "react-router-dom" +import { Link, useNavigate } from "react-router-dom" import { useState } from "react" import axios from "axios"; export default function SignUp() { - + const navigate = useNavigate() const [newUserData, setNewUserData] = useState({ firstName:"", lastName:"", @@ -19,25 +19,19 @@ export default function SignUp() { } async function sendNewUserData(data){ - console.log("in senduserdata") - console.log(data) if(data.password === data.confirmPassword){ - try{ - const response = await axios.post("/api/auth/signup", data) - console.log(response) + const response = await axios.post("api/auth/signup", data) if (response.status === 201) { - console.log("hello 201 code") - // ERROR NEED TO FIX HERE, GETTING 500 STATUS CODE - const { data } = response; - // const userToken = data.encodedToken - // console.log(userToken) - // localStorage.setItem("userToken", userToken) - // navigate("/products") + const encodedToken = response.data.encodedToken + localStorage.setItem("encodedToken", encodedToken) + navigate("/products") } }catch(error){ - console.log(error.response) + console.log(error) } + }else{ + console.log("Password should match") } } diff --git a/src/router/router.jsx b/src/router/router.jsx index 774ce63..0c02c9b 100644 --- a/src/router/router.jsx +++ b/src/router/router.jsx @@ -1,6 +1,8 @@ import { Route, Routes } from "react-router-dom"; import { LandingPage, ProductListing, Cart, WishList, Login, SignUp } from "../pages/index"; +import Mockman from "mockman-js"; + export default function Router() { return ( @@ -10,6 +12,10 @@ export default function Router() { } /> } /> }/> + {/* NEED TO EXTRACT THIS OUT */} + + +
} /> ) } diff --git a/src/server.js b/src/server.js index 3c676f9..2d69688 100644 --- a/src/server.js +++ b/src/server.js @@ -64,6 +64,8 @@ export function makeServer({ environment = "development" } = {}) { routes() { this.namespace = "api"; + // this.passthrough("/auth") // ADDED THIS NEED TO STUDY + // this.passthrough("api") // auth routes (public) this.post("/auth/signup", signupHandler.bind(this)); this.post("/auth/login", loginHandler.bind(this)); From 26a87c0e8ae9edee94c8200e741e1356dcb71ebc Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Wed, 1 Jun 2022 12:06:38 +0530 Subject: [PATCH 42/85] feat: logout handling --- src/components/Header/Header.jsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index ae2a419..a92053e 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -1,6 +1,9 @@ import { Link } from "react-router-dom" +import { useAuth } from "../../contexts/auth-context" export default function Header() { + const {isLogged, logoutHandler} = useAuth() + return (
- - - + {console.log("from header",isLogged)} + {isLogged?: + +} ) From 5fa659b4d917eea517b4a7ef851b48bfda723b4a Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Wed, 1 Jun 2022 12:06:57 +0530 Subject: [PATCH 43/85] fix: auth --- src/contexts/auth-context.js | 2 +- src/contexts/cart-context.js | 26 ++++++++++++++++++++++---- src/pages/Authentication/Login.jsx | 4 ++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/contexts/auth-context.js b/src/contexts/auth-context.js index 576c2ee..bac2574 100644 --- a/src/contexts/auth-context.js +++ b/src/contexts/auth-context.js @@ -19,7 +19,7 @@ const AuthProvider = ({children})=>{ setIsLogged(false) localStorage.removeItem("token") navigate("/") - + } return {children} diff --git a/src/contexts/cart-context.js b/src/contexts/cart-context.js index 27c8927..7ce043d 100644 --- a/src/contexts/cart-context.js +++ b/src/contexts/cart-context.js @@ -1,10 +1,14 @@ +import axios from "axios"; import { createContext, useContext, useEffect, useReducer } from "react"; +import { useNavigate } from "react-router-dom"; import { cartReducer } from "../reducer/cartReducer"; - +import { useAuth } from "./auth-context"; const CartContext = createContext() const CartProvider = ({children})=>{ - + const navigate = useNavigate() + const {isLogged} = useAuth() + const encodeToken = localStorage.getItem("encodeToken") const initialCartState = { cart:[], cartCount:0, @@ -15,7 +19,16 @@ const CartProvider = ({children})=>{ const [state, dispatch] = useReducer(cartReducer, initialCartState) async function getCart(){ - + try{ + const response = axios.get("/api/user/cart", { + headers:{ + authorization :encodeToken + } + }) + console.log(response) + }catch(error){ + console.log(error) + } } async function addToCart(){ @@ -34,7 +47,12 @@ const CartProvider = ({children})=>{ } - return {children} + return ( + + + {children} + + ) } const useCart = ()=>{ diff --git a/src/pages/Authentication/Login.jsx b/src/pages/Authentication/Login.jsx index 7a9cc95..e8644cf 100644 --- a/src/pages/Authentication/Login.jsx +++ b/src/pages/Authentication/Login.jsx @@ -1,10 +1,12 @@ import { Link, useNavigate } from "react-router-dom" import { useState } from "react" import axios from "axios"; +import { useAuth } from "../../contexts/auth-context"; export default function Login() { const navigate = useNavigate() const [userData, setUserData] = useState({email:"", password:""}) + const {setIsLogged} = useAuth() function userInputHandler(event) { const { name, value } = event.target; @@ -24,10 +26,12 @@ export default function Login() { if (response.status === 200) { const encodedToken = response.data.encodedToken localStorage.setItem("encodedToken", encodedToken) + setIsLogged(true) navigate("/products") } }catch(error){ console.log(error) + alert(error) } } From 6775802f5c790de2f81dc230a3371666a83bdf4a Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Wed, 1 Jun 2022 12:13:52 +0530 Subject: [PATCH 44/85] refactor --- src/components/Header/Header.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx index a92053e..803ae60 100644 --- a/src/components/Header/Header.jsx +++ b/src/components/Header/Header.jsx @@ -34,8 +34,8 @@ export default function Header() {
{console.log("from header",isLogged)} - {isLogged?: - + {isLogged?:
+
} From e4ad2c548824e89a0e1ae1dd9173dc1384628466 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Wed, 1 Jun 2022 12:31:08 +0530 Subject: [PATCH 45/85] feat: added cart and wishlist body --- src/pages/Cart/Cart.jsx | 67 ++++++++++++++++++++++++++++++++- src/pages/WishList/WishList.jsx | 58 +++++++++++++++++++++++++++- 2 files changed, 123 insertions(+), 2 deletions(-) diff --git a/src/pages/Cart/Cart.jsx b/src/pages/Cart/Cart.jsx index ec09d64..1ed0c99 100644 --- a/src/pages/Cart/Cart.jsx +++ b/src/pages/Cart/Cart.jsx @@ -1,3 +1,68 @@ export default function Cart() { - return (
This is cart page from pages folder
) + return ( +
+
+ sample image +
+ +

Do Epic Shit(paperback) by Ankur warikko

+ Sapna Publication +

₹299 ₹500

+ 40% Offer + +
+ + + + - +
+
+
+ +
+ sample image +
+ +

Do Epic Shit(paperback) by Ankur warikko

+ Sapna Publication +

₹299 ₹500

+ 40% Offer + +
+ + + + - +
+
+
+ + +
+ +
+

Price Details

+
+
+ Price + 299 +
+
+ Discount + 299 +
+
+ Delivery Charges + 299 +
+
+ Total Amount + ₹300 +
+
+ You have saved ₹120, by shopping with us + +
+ +
+
+ ) } \ No newline at end of file diff --git a/src/pages/WishList/WishList.jsx b/src/pages/WishList/WishList.jsx index 2233080..a7ffad3 100644 --- a/src/pages/WishList/WishList.jsx +++ b/src/pages/WishList/WishList.jsx @@ -1,5 +1,61 @@ export default function WishList() { return ( -
This is wishlist
+
+ +
+ sample image +
+

Do Epic Shit

+ 299 + +
+
+ +
+ sample image +
+

Do Epic Shit

+ 299 + +
+
+ +
+ sample image +
+

Do Epic Shit

+ 299 + +
+
+ +
+ sample image +
+

Do Epic Shit

+ 299 + +
+
+ +
+ sample image +
+

Do Epic Shit

+ 299 + +
+
+ +
+ sample image +
+

Do Epic Shit

+ 299 + +
+
+ +
) } \ No newline at end of file From 7546ddabc0ae72199349fa8e427510572bb3adb3 Mon Sep 17 00:00:00 2001 From: Veeresh B V Date: Wed, 1 Jun 2022 13:10:49 +0530 Subject: [PATCH 46/85] feat: onclick addtocart working --- src/components/Card/Card.jsx | 7 +- .../ProductsFilter/ProductsFilterPane.jsx | 4 +- src/contexts/cart-context.js | 3 +- src/index.js | 3 + src/pages/WishList/WishList.jsx | 74 +++++++++---------- 5 files changed, 48 insertions(+), 43 deletions(-) diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx index 221bdc8..177f99c 100644 --- a/src/components/Card/Card.jsx +++ b/src/components/Card/Card.jsx @@ -1,8 +1,9 @@ // import { doepicshit } from "../../../public/assets/book-images" import { Link } from "react-router-dom" +import { useCart } from "../../contexts/cart-context" import "./Card.css" export default function Card({ product }) { - + const {addToCart} = useCart() const { productImage, title, author, price: { original, discounted, discount }, rating } = product return ( @@ -19,9 +20,9 @@ export default function Card({ product }) { {rating}
- +
- +
diff --git a/src/components/ProductsFilter/ProductsFilterPane.jsx b/src/components/ProductsFilter/ProductsFilterPane.jsx index 50363af..6e0821c 100644 --- a/src/components/ProductsFilter/ProductsFilterPane.jsx +++ b/src/components/ProductsFilter/ProductsFilterPane.jsx @@ -89,7 +89,7 @@ export default function ProductFilter() {

Sort by

-