From 8646bc9cb2e78ba126bc1177c902af734893d505 Mon Sep 17 00:00:00 2001 From: Gowtham Jangiti Date: Mon, 14 Oct 2024 20:20:19 +0530 Subject: [PATCH 1/2] Initial Setup --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 022d9bf..c7d6f77 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "@testing-library/user-event": "^13.5.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-router-dom": "^6.22.3", "react-scripts": "5.0.1", "web-vitals": "^2.1.4" }, From dfb0fabf7781e0a7dd36cef7b3717007fa4bb649 Mon Sep 17 00:00:00 2001 From: Gowtham Jangiti Date: Mon, 14 Oct 2024 20:29:38 +0530 Subject: [PATCH 2/2] Completed --- src/App.js | 36 +++++++++++---------- src/beerDetails.js | 33 ++++++++++++++++++++ src/newBeerForm.js | 78 ++++++++++++++++++++++++++++++++++++++++++++++ src/randomBeer.js | 30 ++++++++++++++++++ 4 files changed, 160 insertions(+), 17 deletions(-) create mode 100644 src/beerDetails.js create mode 100644 src/newBeerForm.js create mode 100644 src/randomBeer.js diff --git a/src/App.js b/src/App.js index 3784575..1435547 100644 --- a/src/App.js +++ b/src/App.js @@ -1,24 +1,26 @@ import logo from './logo.svg'; import './App.css'; +import React from 'react'; +import { BrowserRouter as Router, Route, Routes, Link } from 'react-router-dom'; +import BeerDetails from './beerDetails'; +import RandomBeer from './randomBeer'; +import NewBeerForm from './newBeerForm'; -function App() { +const App = () => { return ( -
-
- logo -

- Edit src/App.js and save to reload. -

- - Learn React - -
-
+ + + + } /> + } /> + } /> + } /> + + ); } diff --git a/src/beerDetails.js b/src/beerDetails.js new file mode 100644 index 0000000..522d262 --- /dev/null +++ b/src/beerDetails.js @@ -0,0 +1,33 @@ +import React, { useState, useEffect } from 'react'; +import { useParams } from 'react-router-dom'; + +const BeerDetails = () => { + const { beerId } = useParams(); + const [beer, setBeer] = useState(null); + + useEffect(() => { + // Fetch data for the selected beer + fetch(`https://ih-beers-api2.herokuapp.com/beers/${beerId}`) + .then((response) => response.json()) + .then((data) => setBeer(data)) + .catch((error) => console.error('Error fetching beer details:', error)); + }, [beerId]); + + if (!beer) { + return
Loading...
; + } + + return ( +
+

{beer.name}

+ {beer.name} +

{beer.tagline}

+

First Brewed: {beer.first_brewed}

+

Attenuation Level: {beer.attenuation_level}

+

Description: {beer.description}

+

Contributed by: {beer.contributed_by}

+
+ ); +}; + +export default BeerDetails; \ No newline at end of file diff --git a/src/newBeerForm.js b/src/newBeerForm.js new file mode 100644 index 0000000..74d4fb0 --- /dev/null +++ b/src/newBeerForm.js @@ -0,0 +1,78 @@ +import React, { useState } from 'react'; + +const NewBeerForm = () => { + const [formData, setFormData] = useState({ + name: '', + tagline: '', + description: '', + first_brewed: '', + brewers_tips: '', + attenuation_level: '', + contributed_by: '', + }); + + const handleInputChange = (e) => { + const { name, value } = e.target; + setFormData({ ...formData, [name]: value }); + }; + + const handleSubmit = (e) => { + e.preventDefault(); + + // Perform POST request to create a new beer + fetch('https://ih-beers-api2.herokuapp.com/beers/new', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(formData), + }) + .then((response) => { + if (!response.ok) { + throw new Error(`HTTP error! Status: ${response.status}`); + } + return response.json(); + }) + .then((data) => { + console.log('New beer created successfully:', data); + // Optionally, you can redirect to another page or update the UI + }) + .catch((error) => console.error('Error creating new beer:', error)); + }; + + return ( +
+ + + + + + + + +
+ ); +}; + +export default NewBeerForm; \ No newline at end of file diff --git a/src/randomBeer.js b/src/randomBeer.js new file mode 100644 index 0000000..64e8e19 --- /dev/null +++ b/src/randomBeer.js @@ -0,0 +1,30 @@ +import React, { useState, useEffect } from 'react'; + +const RandomBeer = () => { + const [randomBeer, setRandomBeer] = useState(null); + + useEffect(() => { + fetch('https://ih-beers-api2.herokuapp.com/beers/random') + .then((response) => response.json()) + .then((data) => setRandomBeer(data)) + .catch((error) => console.error('Error fetching random beer details:', error)); + }, []); + + if (!randomBeer) { + return
Loading...
; + } + + return ( +
+

{randomBeer.name}

+ {randomBeer.name} +

{randomBeer.tagline}

+

First Brewed: {randomBeer.first_brewed}

+

Attenuation Level: {randomBeer.attenuation_level}

+

Description: {randomBeer.description}

+

Contributed by: {randomBeer.contributed_by}

+
+ ); +}; + +export default RandomBeer; \ No newline at end of file