From e298bb889259ea08962e62f44482f9074e9aa9cb Mon Sep 17 00:00:00 2001
From: Abdul Ahad <115078116+alwaysahad@users.noreply.github.com>
Date: Sun, 21 Jan 2024 16:39:33 +0530
Subject: [PATCH] not working well
---
src/App.js | 44 +++++++++++++-------------
src/BeerDetail.js | 33 ++++++++++++++++++++
src/BeerList.js | 41 ++++++++++++++++++++++++
src/NewBeerForm.js | 78 ++++++++++++++++++++++++++++++++++++++++++++++
src/RandomBeer.js | 31 ++++++++++++++++++
5 files changed, 206 insertions(+), 21 deletions(-)
create mode 100644 src/BeerDetail.js
create mode 100644 src/BeerList.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..ac7302c 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,25 +1,27 @@
-import logo from './logo.svg';
-import './App.css';
+// App.js
+import React from 'react';
+import { BrowserRouter as Router, Route, Routes, Link } from 'react-router-dom';
+import BeerList from './BeerList';
+import BeerDetails from './BeerDetails';
+import RandomBeer from './RandomBeer';
+import NewBeerForm from './NewBeerForm';
-function App() {
+const App = () => {
return (
-
+
+
+
+ } />
+ } />
+ } />
+ } />
+
+
);
-}
+};
-export default App;
+export default App;
\ No newline at end of file
diff --git a/src/BeerDetail.js b/src/BeerDetail.js
new file mode 100644
index 0000000..522d262
--- /dev/null
+++ b/src/BeerDetail.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/BeerList.js b/src/BeerList.js
new file mode 100644
index 0000000..31db2dc
--- /dev/null
+++ b/src/BeerList.js
@@ -0,0 +1,41 @@
+// BeerList.js
+import React, { useState, useEffect } from 'react';
+import { Link } from 'react-router-dom';
+
+const BeerList = () => {
+ const [beers, setBeers] = useState([]);
+ const [searchQuery, setSearchQuery] = useState('');
+
+ useEffect(() => {
+ // Fetch data from the API
+ fetch(`https://ih-beers-api2.herokuapp.com/beers/search?q=${searchQuery}`)
+ .then((response) => response.json())
+ .then((data) => setBeers(data))
+ .catch((error) => console.error('Error fetching data:', error));
+ }, [searchQuery]);
+
+ const handleSearchChange = (e) => {
+ setSearchQuery(e.target.value);
+ };
+
+ return (
+
+ );
+};
+
+export default BeerList;
\ 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..496771c
--- /dev/null
+++ b/src/RandomBeer.js
@@ -0,0 +1,31 @@
+import React, { useState, useEffect } from 'react';
+
+const RandomBeer = () => {
+ const [randomBeer, setRandomBeer] = useState(null);
+
+ useEffect(() => {
+ // Fetch data for a random beer
+ 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