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"
},
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 (
-
+
+
+
+ } />
+ } />
+ } />
+ } />
+
+
);
}
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.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.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