diff --git a/src/App.js b/src/App.js index 29530fe9d2..0a058dc3b3 100644 --- a/src/App.js +++ b/src/App.js @@ -1,11 +1,24 @@ import React from "react"; +import { Route, Routes } from 'react-router-dom'; +import Header from './components/Header'; +import Help from './components/Help'; +import PizzaForm from './components/PizzaForm'; +import Home from './components/Home'; +import OrderSuccess from './components/OrderSuccess'; -const App = () => { +import "./App.css"; + +function App() { return ( - <> -

Lambda Eats

-

You can remove this code and create your own header

- +
+
+ + } /> + } /> + } /> + } /> + +
); -}; +} export default App; diff --git a/src/components/Header/index.css b/src/components/Header/index.css new file mode 100644 index 0000000000..ea4b78a847 --- /dev/null +++ b/src/components/Header/index.css @@ -0,0 +1,20 @@ + +.Nav-wrapper{ + display: flex; + flex-direction: row; + gap: 16px; +} +.Nav-btn{ + color: white; + border: solid 1px blue; + border-radius: 4px;; + padding: 6px 12px; + font-style: normal; + text-decoration: none; +} +.Nav-btn:hover{ + background: rgb(51, 51, 132); +} +.Nav-btn-active{ + background: blue; +} diff --git a/src/components/Header/index.js b/src/components/Header/index.js new file mode 100644 index 0000000000..d9c0d79bda --- /dev/null +++ b/src/components/Header/index.js @@ -0,0 +1,18 @@ + +import React from 'react' +import { Link, useLocation } from 'react-router-dom'; +import { useEffect, useState } from 'react' +import "./index.css"; + +export default function Index() { + let location = useLocation(); + return ( +
+

LAMBDA EATS

+
+ Home + Help +
+
+ ) +} diff --git a/src/components/Help/index.js b/src/components/Help/index.js new file mode 100644 index 0000000000..f30555a3b9 --- /dev/null +++ b/src/components/Help/index.js @@ -0,0 +1,7 @@ +import React from 'react' + +export default function Index() { + return ( +
Help page
+ ) +} diff --git a/src/components/Home/index.js b/src/components/Home/index.js new file mode 100644 index 0000000000..9d26ac568e --- /dev/null +++ b/src/components/Home/index.js @@ -0,0 +1,18 @@ + +import React from 'react' +import { useNavigate } from 'react-router-dom'; + +export default function Index() { + const navigate = useNavigate(); + const handleClick = () => { + navigate('/pizza'); + } + return ( +
+
+

Your favorite food, delivered while coding

+ +
+
+ ) +} diff --git a/src/components/OrderSuccess/index.js b/src/components/OrderSuccess/index.js new file mode 100644 index 0000000000..abe19a2798 --- /dev/null +++ b/src/components/OrderSuccess/index.js @@ -0,0 +1,11 @@ +import React from 'react' + +export default function Index() { + return ( +
+
+

Congrats! Pizza is on its way!

+
+
+ ) +} diff --git a/src/components/PizzaForm/index.css b/src/components/PizzaForm/index.css new file mode 100644 index 0000000000..c621bff5e3 --- /dev/null +++ b/src/components/PizzaForm/index.css @@ -0,0 +1,62 @@ + +.form-wrapper{ + max-width: 700px; + text-align: center; + margin: auto; + margin-top: 40px; + border: 1px solid grey; + border-radius: 8px; +} +.form-title{ + font-size: 24px; + font-weight: 600; +} +.form-pizza{ + width: 100%; + height: 200px; + background: url(../../../Assets/Pizza.jpg); +} +#pizza-form{ + padding: 8px; +} +.form-group{ + text-align: left; + width: 100%; + margin-bottom: 8px; +} +label{ + padding: 10px; + background: grey; + display: block; + margin-bottom: 8px; +} +input{ + width: calc(100% - 8px); + font-size: 20px; +} +#size-dropdown{ + width: 150px; + font-size: 16px; +} +#order-button{ + padding: 12px 24px; + font-size: 20px; + border-radius: 6px; + border: 1px blue solid; +} +#order-button:hover{ + background: rgb(88, 88, 193); +} +.error{ + margin: 8px; + color: red; + font-weight: bold; +} +.checkbox{ + width: 30px; +} +.checkbox-wrapper{ + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 10px; +} diff --git a/src/components/PizzaForm/index.js b/src/components/PizzaForm/index.js new file mode 100644 index 0000000000..6db576131b --- /dev/null +++ b/src/components/PizzaForm/index.js @@ -0,0 +1,97 @@ +import React from 'react' +import { useState } from 'react' +import { useNavigate } from 'react-router-dom'; +import axios from 'axios' +import "./index.css"; + +export default function Index() { + const navigate = useNavigate(); + const [name, setName] = useState(''); + const [err, setErr] = useState(false); + const [size, setSize] = useState('Small'); + const [special, setSpecial] = useState(''); + + const toppingList = ['Pepperoni', 'Sousage', 'Cabaduab Bacon', 'Spicy Halian Sausage', 'Grilled Chicker', 'Onions', 'Green Pepper', 'Diced Tomatos', 'Black Olives', 'Roasted Garlic', 'Artichoke Hearts', 'Three Cheese', 'Pineapple', 'Extra Cheese']; + + const handleSubmit = event => { + event.preventDefault(); + if (name.length < 2) + { + setErr(true); + } + else + { + const order = {}; + console.log(`Name: ${name}, Size: ${size}, Special: ${special}`); + const toppingsChecklist = document.querySelectorAll('[type="checkbox"]'); + + order['name'] = name; + order['size'] = size; + order['special'] = special; + toppingsChecklist.forEach(top => { + order[top.name] = top.checked ? true : false + }) + axios.post("https://reqres.in/api/orders", order); + navigate('/success'); + } + } + + const handleInputName = event => { + if (event.target.value.length >= 2) + setErr(false); + else + setErr(true); + setName(event.target.value); + } + + const handleSelectSize = event => { + setSize(event.target.value); + } + + const handleInputSpecial = event => { + setSpecial(event.target.value); + } + return ( +
+

Build your own Pizza

+
+
+
+ + + { + err ?

name must be at least 2 characters

:<> + } +
+
+ + +
+
+ +
+ { + toppingList.map((data, index) => { + return ( +
+ + {data} +
) + }) + } +
+
+
+ + +
+ +
+
+ ) +} diff --git a/src/index.js b/src/index.js index afed62d599..9488cc06e5 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,14 @@ import React from "react"; import ReactDOM from "react-dom"; +import { BrowserRouter as Router } from "react-router-dom"; import "./index.css"; import App from "./App"; -ReactDOM.render(, document.getElementById("root")); +ReactDOM.render( + + + + + , + document.getElementById('root') +);