From b08faa1f953e46e4249c88f00193f56c9600abfc Mon Sep 17 00:00:00 2001 From: Aagam Vadecha Date: Thu, 25 Jul 2024 17:09:26 +0530 Subject: [PATCH 1/2] add joel's refactored code to examples --- with-react-router/.gitignore | 23 ++ with-react-router/README.md | 74 ++++++ with-react-router/package.json | 42 +++ with-react-router/src/App.js | 27 ++ with-react-router/src/Components/NavBar.jsx | 31 +++ with-react-router/src/Components/NoMatch.jsx | 16 ++ .../src/Components/ProductCard.jsx | 20 ++ .../src/Components/ProductDetailsCard.jsx | 33 +++ with-react-router/src/Pages/About.jsx | 31 +++ with-react-router/src/Pages/Home.jsx | 18 ++ .../src/Pages/ProductDetails.jsx | 35 +++ with-react-router/src/Pages/Products.jsx | 38 +++ with-react-router/src/api.js | 12 + with-react-router/src/assets/cocktail-1.jpg | Bin 0 -> 62005 bytes with-react-router/src/graphql/queries.js | 33 +++ with-react-router/src/index.css | 240 ++++++++++++++++++ with-react-router/src/index.js | 14 + 17 files changed, 687 insertions(+) create mode 100644 with-react-router/.gitignore create mode 100644 with-react-router/README.md create mode 100644 with-react-router/package.json create mode 100644 with-react-router/src/App.js create mode 100644 with-react-router/src/Components/NavBar.jsx create mode 100644 with-react-router/src/Components/NoMatch.jsx create mode 100644 with-react-router/src/Components/ProductCard.jsx create mode 100644 with-react-router/src/Components/ProductDetailsCard.jsx create mode 100644 with-react-router/src/Pages/About.jsx create mode 100644 with-react-router/src/Pages/Home.jsx create mode 100644 with-react-router/src/Pages/ProductDetails.jsx create mode 100644 with-react-router/src/Pages/Products.jsx create mode 100644 with-react-router/src/api.js create mode 100644 with-react-router/src/assets/cocktail-1.jpg create mode 100644 with-react-router/src/graphql/queries.js create mode 100644 with-react-router/src/index.css create mode 100644 with-react-router/src/index.js diff --git a/with-react-router/.gitignore b/with-react-router/.gitignore new file mode 100644 index 00000000..4d29575d --- /dev/null +++ b/with-react-router/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/with-react-router/README.md b/with-react-router/README.md new file mode 100644 index 00000000..59814548 --- /dev/null +++ b/with-react-router/README.md @@ -0,0 +1,74 @@ +# Getting Started with Create React App + +This is a [React](https://reactjs.org/) project bootstrapped with [Create React App](https://github.com/facebook/create-react-app) and structured/developed by Joel Olawanle. + +For this app, we made use of react.js to create a blog showcase application that retrieves all blogposts from GraphCMS by querying data using GraphQL and implemented pagination from scratch and using a package. Test it our [here]([https://graphcms-react-pagination.netlify.app/](https://cocktails-graphcms.netlify.app/)). + +![image](https://user-images.githubusercontent.com/57611810/174583683-15fc13ad-0b23-4d5a-a8b4-75fd031dfa4d.png) + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in your browser. + +The page will reload when you make changes.\ +You may also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can't go back!** + +If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. + +You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) + +### Analyzing the Bundle Size + +This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) + +### Making a Progressive Web App + +This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) + +### Advanced Configuration + +This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) + +### Deployment + +This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) + +### `npm run build` fails to minify + +This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/with-react-router/package.json b/with-react-router/package.json new file mode 100644 index 00000000..cb003153 --- /dev/null +++ b/with-react-router/package.json @@ -0,0 +1,42 @@ +{ + "name": "cocktail-app-graphcms", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/react": "^13.3.0", + "@testing-library/user-event": "^13.5.0", + "gql": "^1.1.2", + "graphql-request": "^4.3.0", + "graphql-tag": "^2.12.6", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.3.0", + "react-scripts": "5.0.1", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/with-react-router/src/App.js b/with-react-router/src/App.js new file mode 100644 index 00000000..1a07e3c9 --- /dev/null +++ b/with-react-router/src/App.js @@ -0,0 +1,27 @@ +import { lazy, Suspense } from 'react'; +import { Routes, Route } from 'react-router-dom'; +import NavBar from './Components/NavBar'; +const Home = lazy(() => import('./Pages/Home')); +const About = lazy(() => import('./Pages/About')); +const Products = lazy(() => import('./Pages/Products')); +const ProductDetails = lazy(() => import('./Pages/ProductDetails')); +const NoMatch = lazy(() => import('./Components/NoMatch')); + +const App = () => { + return ( + <> + + Loading...}> + + } /> + } /> + } /> + } /> + } /> + + + + ); +}; + +export default App; diff --git a/with-react-router/src/Components/NavBar.jsx b/with-react-router/src/Components/NavBar.jsx new file mode 100644 index 00000000..231a8e15 --- /dev/null +++ b/with-react-router/src/Components/NavBar.jsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { NavLink } from 'react-router-dom'; + +const NavBar = () => { + return ( +
+ +
+ ); +}; + +export default NavBar; diff --git a/with-react-router/src/Components/NoMatch.jsx b/with-react-router/src/Components/NoMatch.jsx new file mode 100644 index 00000000..b9f8185a --- /dev/null +++ b/with-react-router/src/Components/NoMatch.jsx @@ -0,0 +1,16 @@ +import React from 'react'; + +const NoMatch = () => { + return ( +
+
+
+

404

+

Page not found

+
+
+
+ ); +}; + +export default NoMatch; diff --git a/with-react-router/src/Components/ProductCard.jsx b/with-react-router/src/Components/ProductCard.jsx new file mode 100644 index 00000000..4768e059 --- /dev/null +++ b/with-react-router/src/Components/ProductCard.jsx @@ -0,0 +1,20 @@ +import { Link } from 'react-router-dom'; + +const ProductCard = ({ product }) => { + return ( + <> + +
+
+

{product.name}

+ {product.info} +
+ +
View Details
+ +
+ + ); +}; + +export default ProductCard; diff --git a/with-react-router/src/Components/ProductDetailsCard.jsx b/with-react-router/src/Components/ProductDetailsCard.jsx new file mode 100644 index 00000000..de7626dc --- /dev/null +++ b/with-react-router/src/Components/ProductDetailsCard.jsx @@ -0,0 +1,33 @@ +const ProductDetailsCard = ({ product }) => { + return ( +
+ {product.image && ( + + )} +
+
+

Name:

+

{product.name}

+
+
+

Category:

+

{product.category}

+
+
+

Info:

+

{product.info}

+
+
+

Instructions:

+

{product.instructions}

+
+
+

Ingredients:

+

{product.ingredients}

+
+
+
+ ); +} + +export default ProductDetailsCard; \ No newline at end of file diff --git a/with-react-router/src/Pages/About.jsx b/with-react-router/src/Pages/About.jsx new file mode 100644 index 00000000..03226d03 --- /dev/null +++ b/with-react-router/src/Pages/About.jsx @@ -0,0 +1,31 @@ +import { useNavigate } from 'react-router-dom'; + +const About = () => { + const navigate = useNavigate(); + return ( +
+ +
+

About

+
+
+

+ Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatum + eos tenetur beatae nihil dolorum possimus voluptate esse voluptatibus, + aliquid ratione facere enim eveniet modi necessitatibus quas + asperiores pariatur, amet velit? +

+

+ Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatum + eos tenetur beatae nihil dolorum possimus voluptate esse voluptatibus, + aliquid ratione facere enim eveniet modi necessitatibus quas + asperiores pariatur, amet velit? +

+
+
+ ); +}; + +export default About; diff --git a/with-react-router/src/Pages/Home.jsx b/with-react-router/src/Pages/Home.jsx new file mode 100644 index 00000000..16cf4621 --- /dev/null +++ b/with-react-router/src/Pages/Home.jsx @@ -0,0 +1,18 @@ +import { Link } from 'react-router-dom'; + +const Home = () => { + return ( +
+
+
+

It's time for some Cocktails

+ +
View Cocktails
+ +
+
+
+ ); +}; + +export default Home; diff --git a/with-react-router/src/Pages/ProductDetails.jsx b/with-react-router/src/Pages/ProductDetails.jsx new file mode 100644 index 00000000..5edace48 --- /dev/null +++ b/with-react-router/src/Pages/ProductDetails.jsx @@ -0,0 +1,35 @@ +import { useEffect, useState } from 'react'; +import { useNavigate, useParams } from 'react-router-dom'; +import ProductDetailsCard from '../Components/ProductDetailsCard'; +import { getProductBySlug } from '../api'; + +const ProductDetails = () => { + const [product, setProduct] = useState([]); + const navigate = useNavigate(); + const { slug } = useParams(); + + useEffect(() => { + const fetchProduct = async () => { + const { cocktail } = await getProductBySlug(slug) + setProduct(cocktail); + }; + + fetchProduct(); + }, [slug]); + + return ( +
+ +
+
+

{product.name}

+
+ +
+
+ ); +}; + +export default ProductDetails; diff --git a/with-react-router/src/Pages/Products.jsx b/with-react-router/src/Pages/Products.jsx new file mode 100644 index 00000000..e4687dc7 --- /dev/null +++ b/with-react-router/src/Pages/Products.jsx @@ -0,0 +1,38 @@ +import { useEffect, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import ProductCard from "../Components/ProductCard"; +import { getAllCocktails } from "../api"; + +const Products = () => { + const [products, setProducts] = useState([]); + const navigate = useNavigate(); + + useEffect(() => { + const fetchProducts = async () => { + const { cocktails } = await getAllCocktails(); + setProducts(cocktails); + }; + + fetchProducts(); + }, []); + + return ( +
+ +
+

CockTails

+
+
+ {products.map((product) => ( +
+ +
+ ))} +
+
+ ); +}; + +export default Products; diff --git a/with-react-router/src/api.js b/with-react-router/src/api.js new file mode 100644 index 00000000..d4964ff4 --- /dev/null +++ b/with-react-router/src/api.js @@ -0,0 +1,12 @@ +import { request } from "graphql-request"; +import { GET_ALL_PRODUCTS, GET_PRODUCT_BY_SLUG } from "./graphql/queries"; +const GRAPHQL_URL = + "https://api-us-east-1.graphcms.com/v2/cl4ji8xe34tjp01yrexjifxnw/master"; + +export async function getAllCocktails() { + return await request(GRAPHQL_URL, GET_ALL_PRODUCTS); +} + +export async function getProductBySlug(slug) { + return await request(GRAPHQL_URL, GET_PRODUCT_BY_SLUG, { slug }); +} diff --git a/with-react-router/src/assets/cocktail-1.jpg b/with-react-router/src/assets/cocktail-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a37f141f8e293522612ced158d50ddea30d00dd8 GIT binary patch literal 62005 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≫G;1AKa71#uVSAt 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 literal 0 HcmV?d00001 diff --git a/with-react-router/src/graphql/queries.js b/with-react-router/src/graphql/queries.js new file mode 100644 index 00000000..084e6eca --- /dev/null +++ b/with-react-router/src/graphql/queries.js @@ -0,0 +1,33 @@ +import { gql } from "graphql-tag"; + +export const GET_ALL_PRODUCTS = gql` + { + cocktails { + id + name + slug + info + ingredients + instructions + image { + url + } + category + } + } +`; + +export const GET_PRODUCT_BY_SLUG = gql` + query GetProductBySlug($slug: String!) { + cocktail(where: { slug: $slug }) { + name + category + info + ingredients + instructions + image { + url + } + } + } +`; \ No newline at end of file diff --git a/with-react-router/src/index.css b/with-react-router/src/index.css new file mode 100644 index 00000000..7c120472 --- /dev/null +++ b/with-react-router/src/index.css @@ -0,0 +1,240 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;1,400&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Lovers+Quarrel&display=swap'); + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: 'Poppins', sans-serif; + font-size: 16px; + background: #f6f6f6; + overflow: auto; +} + +a { + text-decoration: none; +} + +ul { + list-style: none; +} + +img { + max-width: 100%; +} + +.container { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} + +.container .btn { + margin-top: 20px; + display: inline-block; + padding: 10px 20px; + border: none; + border-radius: 5px; + background: #00a8ff; + color: #fff; + cursor: pointer; +} + +.container .btn:hover { + background: #0097e6; +} + +nav { + background: #fff; + padding: 0 20px; + width: 100%; + height: 80px; +} + +.logo h1 { + color: #0097e6; +} + +nav .nav-items { + display: flex; + justify-content: space-between; + height: 100%; + align-items: center; +} + +.nav-items ul { + display: flex; + align-items: center; + justify-content: space-between; +} + +.nav-items ul li { + list-style: none; + margin-left: 20px; + font-size: 18px; + font-weight: 600; + color: #000; +} + +.nav-items ul li a { + color: #000; +} + +.nav-items ul li a:hover { + color: #00a8ff; +} + +.nav-items ul li a.active { + color: #00a8ff; +} + +.banner-container { + padding: 100px 0; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + gap: 20px; +} + +.banner { + font-family: 'Lovers Quarrel', cursive; + font-size: 100px; + background: #fff; + padding: 0 20px; + width: 100%; + height: 50vh; + margin-top: 20px; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} + +.banner-container .btn { + font-family: 'Poppins', sans-serif; + background: #00a8ff; + color: #fff; + padding: 10px 20px; + border-radius: 5px; + font-size: 18px; + font-weight: 600; + cursor: pointer; +} + +.banner-container .btn:hover { + background: #0097e6; +} + +.container .title { + color: #00a8ff; + font-size: 30px; + font-weight: 600; + margin: 40px 0; +} + +.cocktails-container { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + grid-gap: 30px; + margin: 20px 0; +} + +.cocktails-container .cocktail-card { + background: #fff; + border-radius: 10px; + padding: 20px; + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); + transition: all 0.3s ease-in-out; +} + +.cocktails-container .cocktail-card:hover { + box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.1); +} + +.cocktail-card .cocktail-img { + width: 100%; + height: 300px; + object-fit: cover; + object-position: center; +} + +.cocktail-card .cocktail-info { + display: flex; + justify-content: space-between; + align-items: center; +} + +.cocktail-info .cocktail-name { + font-size: 24px; + font-weight: 600; + color: #000; +} + +.cocktail-info .btn { + background: #00a8ff; + color: #fff; + border: none; + padding: 5px 10px; + border-radius: 5px; + font-size: 16px; + transition: all 0.3s ease-in-out; + cursor: pointer; +} + +.cocktail-info .btn:hover { + background: #0097e6; +} + +/* error component styling */ + +.error-page { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + margin-top: 20px; + height: 60vh; +} + +.error-page .error-code { + font-size: 150px; + font-weight: 600; + color: #00a8ff; +} + +.error-page .error-text { + font-size: 34px; + font-weight: 600; + color: #000; +} + +/* Single Product */ +.flex-container { + display: flex; + justify-content: space-between; + align-items: center; + gap: 20px; +} + +.flex-container .cocktail-img { + width: 100%; + height: 500px; + object-fit: cover; + object-position: center; + border: 5px solid #00a8ff; + border-radius: 5px; +} + +.cocktail-infos .row { + margin: 10px 0; +} + +.cocktail-infos .row .label { + font-size: 18px; + font-weight: 600; + color: #000; +} diff --git a/with-react-router/src/index.js b/with-react-router/src/index.js new file mode 100644 index 00000000..21a6d043 --- /dev/null +++ b/with-react-router/src/index.js @@ -0,0 +1,14 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import { BrowserRouter } from 'react-router-dom'; +import './index.css'; +import App from './App'; + +const root = ReactDOM.createRoot(document.getElementById('root')); +root.render( + + + + + +); From 9214a43eecf2fe9d0db58474bfc952183849e43e Mon Sep 17 00:00:00 2001 From: Aagam Vadecha Date: Thu, 25 Jul 2024 17:12:24 +0530 Subject: [PATCH 2/2] fix spacing --- with-react-router/src/App.js | 28 ++++----- with-react-router/src/Components/NavBar.jsx | 48 +++++++-------- with-react-router/src/Components/NoMatch.jsx | 20 +++---- .../src/Components/ProductDetailsCard.jsx | 60 +++++++++---------- with-react-router/src/Pages/About.jsx | 50 ++++++++-------- with-react-router/src/Pages/Home.jsx | 24 ++++---- .../src/Pages/ProductDetails.jsx | 46 +++++++------- with-react-router/src/Pages/Products.jsx | 8 +-- with-react-router/src/api.js | 6 +- with-react-router/src/graphql/queries.js | 4 +- with-react-router/src/index.js | 10 ++-- 11 files changed, 152 insertions(+), 152 deletions(-) diff --git a/with-react-router/src/App.js b/with-react-router/src/App.js index 1a07e3c9..b5264bc6 100644 --- a/with-react-router/src/App.js +++ b/with-react-router/src/App.js @@ -8,20 +8,20 @@ const ProductDetails = lazy(() => import('./Pages/ProductDetails')); const NoMatch = lazy(() => import('./Components/NoMatch')); const App = () => { - return ( - <> - - Loading...}> - - } /> - } /> - } /> - } /> - } /> - - - - ); + return ( + <> + + Loading...}> + + } /> + } /> + } /> + } /> + } /> + + + + ); }; export default App; diff --git a/with-react-router/src/Components/NavBar.jsx b/with-react-router/src/Components/NavBar.jsx index 231a8e15..6bce2772 100644 --- a/with-react-router/src/Components/NavBar.jsx +++ b/with-react-router/src/Components/NavBar.jsx @@ -2,30 +2,30 @@ import React from 'react'; import { NavLink } from 'react-router-dom'; const NavBar = () => { - return ( -

- -
- ); + return ( +
+ +
+ ); }; export default NavBar; diff --git a/with-react-router/src/Components/NoMatch.jsx b/with-react-router/src/Components/NoMatch.jsx index b9f8185a..e0d9751d 100644 --- a/with-react-router/src/Components/NoMatch.jsx +++ b/with-react-router/src/Components/NoMatch.jsx @@ -1,16 +1,16 @@ import React from 'react'; const NoMatch = () => { - return ( -
-
-
-

404

-

Page not found

-
-
-
- ); + return ( +
+
+
+

404

+

Page not found

+
+
+
+ ); }; export default NoMatch; diff --git a/with-react-router/src/Components/ProductDetailsCard.jsx b/with-react-router/src/Components/ProductDetailsCard.jsx index de7626dc..e3ca9909 100644 --- a/with-react-router/src/Components/ProductDetailsCard.jsx +++ b/with-react-router/src/Components/ProductDetailsCard.jsx @@ -1,33 +1,33 @@ const ProductDetailsCard = ({ product }) => { return (
- {product.image && ( - - )} -
-
-

Name:

-

{product.name}

-
-
-

Category:

-

{product.category}

-
-
-

Info:

-

{product.info}

-
-
-

Instructions:

-

{product.instructions}

-
-
-

Ingredients:

-

{product.ingredients}

-
-
-
- ); -} - -export default ProductDetailsCard; \ No newline at end of file + {product.image && ( + + )} +
+
+

Name:

+

{product.name}

+
+
+

Category:

+

{product.category}

+
+
+

Info:

+

{product.info}

+
+
+

Instructions:

+

{product.instructions}

+
+
+

Ingredients:

+

{product.ingredients}

+
+
+ + ); +}; + +export default ProductDetailsCard; diff --git a/with-react-router/src/Pages/About.jsx b/with-react-router/src/Pages/About.jsx index 03226d03..053bc230 100644 --- a/with-react-router/src/Pages/About.jsx +++ b/with-react-router/src/Pages/About.jsx @@ -1,31 +1,31 @@ import { useNavigate } from 'react-router-dom'; const About = () => { - const navigate = useNavigate(); - return ( -
- -
-

About

-
-
-

- Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatum - eos tenetur beatae nihil dolorum possimus voluptate esse voluptatibus, - aliquid ratione facere enim eveniet modi necessitatibus quas - asperiores pariatur, amet velit? -

-

- Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatum - eos tenetur beatae nihil dolorum possimus voluptate esse voluptatibus, - aliquid ratione facere enim eveniet modi necessitatibus quas - asperiores pariatur, amet velit? -

-
-
- ); + const navigate = useNavigate(); + return ( +
+ +
+

About

+
+
+

+ Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatum + eos tenetur beatae nihil dolorum possimus voluptate esse voluptatibus, + aliquid ratione facere enim eveniet modi necessitatibus quas + asperiores pariatur, amet velit? +

+

+ Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatum + eos tenetur beatae nihil dolorum possimus voluptate esse voluptatibus, + aliquid ratione facere enim eveniet modi necessitatibus quas + asperiores pariatur, amet velit? +

+
+
+ ); }; export default About; diff --git a/with-react-router/src/Pages/Home.jsx b/with-react-router/src/Pages/Home.jsx index 16cf4621..346e2175 100644 --- a/with-react-router/src/Pages/Home.jsx +++ b/with-react-router/src/Pages/Home.jsx @@ -1,18 +1,18 @@ import { Link } from 'react-router-dom'; const Home = () => { - return ( -
-
-
-

It's time for some Cocktails

- -
View Cocktails
- -
-
-
- ); + return ( +
+
+
+

It's time for some Cocktails

+ +
View Cocktails
+ +
+
+
+ ); }; export default Home; diff --git a/with-react-router/src/Pages/ProductDetails.jsx b/with-react-router/src/Pages/ProductDetails.jsx index 5edace48..a5ad46d5 100644 --- a/with-react-router/src/Pages/ProductDetails.jsx +++ b/with-react-router/src/Pages/ProductDetails.jsx @@ -4,32 +4,32 @@ import ProductDetailsCard from '../Components/ProductDetailsCard'; import { getProductBySlug } from '../api'; const ProductDetails = () => { - const [product, setProduct] = useState([]); - const navigate = useNavigate(); - const { slug } = useParams(); + const [product, setProduct] = useState([]); + const navigate = useNavigate(); + const { slug } = useParams(); - useEffect(() => { - const fetchProduct = async () => { - const { cocktail } = await getProductBySlug(slug) - setProduct(cocktail); - }; + useEffect(() => { + const fetchProduct = async () => { + const { cocktail } = await getProductBySlug(slug); + setProduct(cocktail); + }; - fetchProduct(); - }, [slug]); + fetchProduct(); + }, [slug]); - return ( -
- -
-
-

{product.name}

-
- -
-
- ); + return ( +
+ +
+
+

{product.name}

+
+ +
+
+ ); }; export default ProductDetails; diff --git a/with-react-router/src/Pages/Products.jsx b/with-react-router/src/Pages/Products.jsx index e4687dc7..81ec9898 100644 --- a/with-react-router/src/Pages/Products.jsx +++ b/with-react-router/src/Pages/Products.jsx @@ -1,7 +1,7 @@ -import { useEffect, useState } from "react"; -import { useNavigate } from "react-router-dom"; -import ProductCard from "../Components/ProductCard"; -import { getAllCocktails } from "../api"; +import { useEffect, useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import ProductCard from '../Components/ProductCard'; +import { getAllCocktails } from '../api'; const Products = () => { const [products, setProducts] = useState([]); diff --git a/with-react-router/src/api.js b/with-react-router/src/api.js index d4964ff4..639322d2 100644 --- a/with-react-router/src/api.js +++ b/with-react-router/src/api.js @@ -1,7 +1,7 @@ -import { request } from "graphql-request"; -import { GET_ALL_PRODUCTS, GET_PRODUCT_BY_SLUG } from "./graphql/queries"; +import { request } from 'graphql-request'; +import { GET_ALL_PRODUCTS, GET_PRODUCT_BY_SLUG } from './graphql/queries'; const GRAPHQL_URL = - "https://api-us-east-1.graphcms.com/v2/cl4ji8xe34tjp01yrexjifxnw/master"; + 'https://api-us-east-1.graphcms.com/v2/cl4ji8xe34tjp01yrexjifxnw/master'; export async function getAllCocktails() { return await request(GRAPHQL_URL, GET_ALL_PRODUCTS); diff --git a/with-react-router/src/graphql/queries.js b/with-react-router/src/graphql/queries.js index 084e6eca..eae2d696 100644 --- a/with-react-router/src/graphql/queries.js +++ b/with-react-router/src/graphql/queries.js @@ -1,4 +1,4 @@ -import { gql } from "graphql-tag"; +import { gql } from 'graphql-tag'; export const GET_ALL_PRODUCTS = gql` { @@ -30,4 +30,4 @@ export const GET_PRODUCT_BY_SLUG = gql` } } } -`; \ No newline at end of file +`; diff --git a/with-react-router/src/index.js b/with-react-router/src/index.js index 21a6d043..456d7e28 100644 --- a/with-react-router/src/index.js +++ b/with-react-router/src/index.js @@ -6,9 +6,9 @@ import App from './App'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( - - - - - + + + + + );