0% found this document useful (0 votes)
11 views11 pages

Document Flower Garden

The document outlines a React application with routing for various components including Home, Login, Register, and AdminPanel. It includes functionality for fetching and displaying flowers, user authentication, and admin capabilities to manage flowers and users. The application uses React Router for navigation and Axios for API calls to a backend server.

Uploaded by

Alvin Kono
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views11 pages

Document Flower Garden

The document outlines a React application with routing for various components including Home, Login, Register, and AdminPanel. It includes functionality for fetching and displaying flowers, user authentication, and admin capabilities to manage flowers and users. The application uses React Router for navigation and Axios for API calls to a backend server.

Uploaded by

Alvin Kono
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 11

Routing

Import React from ‘react’;

Import { BrowserRouter as Router, Routes, Route } from ‘react-router-


dom’;

Import Home from ‘./pages/Home’;

Import Login from ‘./components/Auth/Login’;

Import Register from ‘./components/Auth/Register’;

Import AdminPanel from ‘./components/Admin/AdminPanel’;

Import NotFound from ‘./pages/NotFound’;

Function App() {

Return (

<Router>

<Routes>

<Route path=”/” element={<Home />} />

<Route path=”/login” element={<Login />} />

<Route path=”/register” element={<Register />} />

<Route path=”/admin” element={<AdminPanel />} />

<Route path=”*” element={<NotFound />} />

</Routes>

</Router>

);

Export default App;

Home page

Import React, { useState, useEffect } from ‘react’;

Import axios from ‘axios’;

Import FlowerCard from ‘../components/Flowers/FlowerCard’;


Function Home() {

Const [flowers, setFlowers] = useState([]);

useEffect(() => {

axios.get(‘http://localhost:5000/api/flowers’)

.then(response => setFlowers(response.data))

.catch(error => console.error(error));

}, []);

Return (

<div className=”container mt-5”>

<h1 className=”text-center mb-4”>Flower Garden</h1>

<div className=”row”>

{flowers.map(flower => (

<FlowerCard key={flower._id} flower={flower} />

))}

</div>

</div>

);

Export default Home;

Flower card

Import React from ‘react’;

Function FlowerCard({ flower }) {

Return (

<div className=”col-md-4 mb-4”>


<div className=”card”>

<img src={flower.image} className=”card-img-top”


alt={flower.name} />

<div className=”card-body”>

<h5 className=”card-title”>{flower.name}</h5>

<p className=”card-text”>{flower.description}</p>

<p className=”card-text”><strong>Price: </strong>$


{flower.price}</p>

<button className=”btn btn-primary”>Buy Now</button>

</div>

</div>

</div>

);

Export default FlowerCard;

Login page

Import React, { useState } from ‘react’;

Import axios from ‘axios’;

Function Login() {

Const [email, setEmail] = useState(‘’);

Const [password, setPassword] = useState(‘’);

Const handleLogin = async (e) => {

e.preventDefault();

try {

const response = await


axios.post(‘http://localhost:5000/api/auth/login’, { email, password });

localStorage.setItem(‘token’, response.data.token);
alert(‘Login successful’);

window.location = ‘/’;

} catch (error) {

Alert(‘Login failed’);

};

Return (

<div className=”container mt-5”>

<h2>Login</h2>

<form onSubmit={handleLogin}>

<div className=”mb-3”>

<label>Email</label>

<input type=”email” className=”form-control” value={email}


onChange={(e) => setEmail(e.target.value)} required />

</div>

<div className=”mb-3”>

<label>Password</label>

<input type=”password” className=”form-control”


value={password} onChange={(e) => setPassword(e.target.value)}
required />

</div>

<button type=”submit” className=”btn


btn-primary”>Login</button>

</form>

</div>

);

Export default Login;


Register page

Import React, { useState } from ‘react’;

Import axios from ‘axios’;

Function Register() {

Const [name, setName] = useState(‘’);

Const [email, setEmail] = useState(‘’);

Const [password, setPassword] = useState(‘’);

Const handleRegister = async (e) => {

e.preventDefault();

try {

await axios.post(‘http://localhost:5000/api/auth/register’, { name,


email, password });

alert(‘Registration successful’);

window.location = ‘/login’;

} catch (error) {

Alert(‘Registration failed’);

};

Return (

<div className=”container mt-5”>

<h2>Register</h2>

<form onSubmit={handleRegister}>

<div className=”mb-3”>

<label>Name</label>

<input type=”text” className=”form-control” value={name}


onChange={(e) => setName(e.target.value)} required />

</div>
<div className=”mb-3”>

<label>Email</label>

<input type=”email” className=”form-control” value={email}


onChange={(e) => setEmail(e.target.value)} required />

</div>

<div className=”mb-3”>

<label>Password</label>

<input type=”password” className=”form-control”


value={password} onChange={(e) => setPassword(e.target.value)}
required />

</div>

<button type=”submit” className=”btn


btn-primary”>Register</button>

</form>

</div>

);

Export default Register;

Admin panel

Import React from ‘react’;

Function AdminPanel() {

Return (

<div className=”container mt-5”>

<h1>Admin Panel</h1>

<p>Manage flowers, users, and the website here.</p>

{/* Add admin functionalities here */}

</div>

);
}

Export default AdminPanel;

Admin

Import React, { useState, useEffect } from ‘react’;

Import axiosInstance from ‘../../axiosInstance’;

Function AdminPanel() {

Const [flowers, setFlowers] = useState([]);

Const [users, setUsers] = useState([]);

// Fetch flowers and users

useEffect(() => {

axiosInstance.get(‘/flowers’)

.then(response => setFlowers(response.data))

.catch(error => console.error(error));

axiosInstance.get(‘/admin/users’)

.then(response => setUsers(response.data))

.catch(error => console.error(error));

}, []);

// Delete a flower

Const deleteFlower = (id) => {

axiosInstance.delete(`/admin/flowers/${id}`)

.then(() => {

Alert(‘Flower deleted successfully’);

setFlowers(flowers.filter(flower => flower._id !== id));

})
.catch(error => alert(‘Failed to delete flower’));

};

// Delete a user

Const deleteUser = (id) => {

axiosInstance.delete(`/admin/users/${id}`)

.then(() => {

Alert(‘User deleted successfully’);

setUsers(users.filter(user => user._id !== id));

})

.catch(error => alert(‘Failed to delete user’));

};

Return (

<div className=”container mt-5”>

<h1>Admin Panel</h1>

{/* Flowers Management */}

<h2>Flowers</h2>

<table className=”table”>

<thead>

<tr>

<th>Name</th>

<th>Price</th>

<th>Actions</th>

</tr>

</thead>

<tbody>

{flowers.map(flower => (
<tr key={flower._id}>

<td>{flower.name}</td>

<td>${flower.price}</td>

<td>

<button className=”btn btn-danger” onClick={() =>


deleteFlower(flower._id)}>Delete</button>

</td>

</tr>

))}

</tbody>

</table>

{/* Users Management */}

<h2>Users</h2>

<table className=”table”>

<thead>

<tr>

<th>Name</th>

<th>Email</th>

<th>Actions</th>

</tr>

</thead>

<tbody>

{users.map(user => (

<tr key={user._id}>

<td>{user.name}</td>

<td>{user.email}</td>

<td>

<button className=”btn btn-danger” onClick={() =>


deleteUser(user._id)}>Delete</button>
</td>

</tr>

))}

</tbody>

</table>

</div>

);

Export default AdminPanel;

Front-end route

Import React from ‘react’;

Import { BrowserRouter as Router, Routes, Route, Navigate } from ‘react-


router-dom’;

Import Home from ‘./pages/Home’;

Import Login from ‘./components/Auth/Login’;

Import Register from ‘./components/Auth/Register’;

Import AdminPanel from ‘./components/Admin/AdminPanel’;

Const isAdmin = () => {

Const token = localStorage.getItem(‘token’);

Const userRole = JSON.parse(atob(token.split(‘.’)[1])).role; // Decode


token

Return userRole === ‘admin’;

};

Function App() {

Return (

<Router>

<Routes>
<Route path=”/” element={<Home />} />

<Route path=”/login” element={<Login />} />

<Route path=”/register” element={<Register />} />

<Route

Path=”/admin”

Element={isAdmin() ? <AdminPanel /> : <Navigate to=”/” />}

/>

</Routes>

</Router>

);

Export default App;

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy