// ManageCourses.js
import React, { useState, useEffect } from 'react';
import 'bootstrap/dist/css/bootstrap.min.css';
import Navbar from '@/app/components/Navbar';
const ManageCourses = () => {
const [courses, setCourses] = useState([]);
const [editingCourse, setEditingCourse] = useState(null);
const [title, setTitle] = useState('');
const [description, setDescription] = useState('');
const [price, setPrice] = useState('');
const [duration, setDuration] = useState('');
const [instructor, setInstructor] = useState('');
const [imageUrl, setImageUrl] = useState('');
useEffect(() => {
const storedCourses = localStorage.getItem('courses');
if (storedCourses) {
setCourses(JSON.parse(storedCourses));
}
}, []);
const handleEdit = (course) => {
setEditingCourse(course);
setTitle(course.title);
setDescription(course.description);
setPrice(course.price);
setDuration(course.duration);
setInstructor(course.instructor);
setImageUrl(course.imageUrl); // Use imageUrl key
};
const handleUpdate = (e) => {
e.preventDefault();
const updatedCourses = courses.map((course) =>
course.id === editingCourse.id
? { ...course, title, description, price, duration, instructor, imageUrl }
// Use imageUrl key
: course
);
setCourses(updatedCourses);
localStorage.setItem('courses', JSON.stringify(updatedCourses));
setEditingCourse(null);
setTitle('');
setDescription('');
setPrice('');
setDuration('');
setInstructor('');
setImageUrl('');
};
const handleDelete = (courseId) => {
const updatedCourses = courses.filter((course) => course.id !== courseId);
setCourses(updatedCourses);
localStorage.setItem('courses', JSON.stringify(updatedCourses));
};
return (
<>
<Navbar />
<div className="container mt-5">
<h2 className="mb-4">Manage Courses</h2>
{editingCourse ? (
<form onSubmit={handleUpdate}>
<div className="mb-3">
<label htmlFor="title" className="form-label">Title</label>
<input
type="text"
className="form-control"
id="title"
value={title}
onChange={(e) => setTitle(e.target.value)}
required
/>
</div>
<div className="mb-3">
<label htmlFor="description" className="form-label">Description</label>
<textarea
className="form-control"
id="description"
value={description}
onChange={(e) => setDescription(e.target.value)}
required
></textarea>
</div>
<div className="mb-3">
<label htmlFor="price" className="form-label">Price</label>
<input
type="text"
className="form-control"
id="price"
value={price}
onChange={(e) => setPrice(e.target.value)}
required
/>
</div>
<div className="mb-3">
<label htmlFor="duration" className="form-label">Duration (in hours)
</label>
<input
type="text"
className="form-control"
id="duration"
value={duration}
onChange={(e) => setDuration(e.target.value)}
required
/>
</div>
<div className="mb-3">
<label htmlFor="instructor" className="form-label">Instructor</label>
<input
type="text"
className="form-control"
id="instructor"
value={instructor}
onChange={(e) => setInstructor(e.target.value)}
required
/>
</div>
<div className="mb-3">
<label htmlFor="imageUrl" className="form-label">Image URL</label>
<input
type="text"
className="form-control"
id="imageUrl"
value={imageUrl}
onChange={(e) => setImageUrl(e.target.value)}
required
/>
</div>
<button type="submit" className="btn btn-primary">Update Course</button>
<button type="button" className="btn btn-secondary ms-2"
onClick={() => setEditingCourse(null)}>Cancel</button>
</form>
) : (
<div className="row">
{courses.map((course) => (
<div key={course.id} className="col-lg-4 col-md-6 mb-4">
<div className="card">
{course.imageUrl ? ( // Use imageUrl key
<img src={course.imageUrl} className="card-img-top"
alt={course.title}
style={{ height: '200px', objectFit: 'cover' }} />
) : (
<div className="card-img-top"
style={{ height: '200px', backgroundColor: '#f0f0f0',
display: 'flex',
alignItems: 'center', justifyContent: 'center' }}>
<span>No Image</span>
</div>
)}
<div className="card-body">
<h5 className="card-title">{course.title}</h5>
<p className="card-text">{course.description}</p>
<p className="card-text">₹{course.price}</p>
<p className="card-text">Duration: {course.duration} hours</p>
<p className="card-text">Instructor: {course.instructor}</p>
<button className="btn btn-primary"
onClick={() => handleEdit(course)}>Edit</button>
<button className="btn btn-danger ms-2"
onClick={() => handleDelete(course.id)}>Delete</button>
</div>
</div>
</div>
))}
</div>
)}
</div>
<style jsx>{`
.card:hover {
border-radius: 8px;
transition: box-shadow 0.3s;
width: 101%;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
}
`}</style>
</>
);
};
export default ManageCourses;