Here's the improved version of your component with separate createLecture() and updateLecture() functions. ✅ Step 1: Updated Component import React, { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; function LecturesPage() { const { courseId } = useParams(); const [course, setCourse] = useState(null); const [lectures, setLectures] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [title, setTitle] = useState(''); const [content, setContent] = useState(''); const [videoUrl, setVideoUrl] = useState(''); const [editingId, setEditingId] = useState(null); const token = localStorage.getItem('token'); // Fetch course + lectures useEffect(() => { const fetchData = async () => { try { const courseRes = await fetch(`http://localhost:5000/api/courses/${courseId}`); const lectureRes = await fetch(`http://localhost:5000/api/lectures/${courseId}`, { headers: { Authorization: `Bearer ${token}` }, }); if (!courseRes.ok || !lectureRes.ok) throw new Error('Failed to load data'); const courseData = await courseRes.json(); const lecturesData = await lectureRes.json(); setCourse(courseData); setLectures(lecturesData); } catch (err) { setError(err.message); } finally { setLoading(false); } }; fetchData(); }, [courseId, token]); // ✅ Create new lecture const createLecture = async (lectureData) => { const res = await fetch(`http://localhost:5000/api/lectures`, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}`, }, body: JSON.stringify(lectureData), }); if (!res.ok) throw new Error('Failed to create lecture'); return await res.json(); }; // ✅ Update existing lecture const updateLecture = async (id, lectureData) => { const res = await fetch(`http://localhost:5000/api/lectures/${id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}`, }, body: JSON.stringify(lectureData), }); if (!res.ok) throw new Error('Failed to update lecture'); return await res.json(); }; // ✅ Submit handler decides whether to create or update const handleSubmit = async (e) => { e.preventDefault(); const lectureData = { title, content, videoUrl, courseId }; try { let updatedLecture; if (editingId) { updatedLecture = await updateLecture(editingId, lectureData); setLectures((prev) => prev.map((lec) => (lec._id === editingId ? updatedLecture : lec)) ); } else { const newLecture = await createLecture(lectureData); setLectures((prev) => [...prev, newLecture]); } // Reset form setTitle(''); setContent(''); setVideoUrl(''); setEditingId(null); } catch (err) { alert(err.message); } }; const handleEdit = (lecture) => { setTitle(lecture.title); setContent(lecture.content); setVideoUrl(lecture.videoUrl || ''); setEditingId(lecture._id); }; const handleDelete = async (id) => { if (!window.confirm('Are you sure you want to delete this lecture?')) return; try { const res = await fetch(`http://localhost:5000/api/lectures/${id}`, { method: 'DELETE', headers: { Authorization: `Bearer ${token}` }, }); if (!res.ok) throw new Error('Failed to delete lecture'); setLectures((prev) => prev.filter((l) => l._id !== id)); } catch (err) { alert(err.message); } }; // === RENDER === return (

{course ? `Lectures for: ${course.title}` : 'Lectures'}

{loading ? (

Loading...

) : error ? (

{error}

) : lectures.length === 0 ? (

No lectures found.

) : ( )}

{editingId ? 'Edit Lecture' : 'Add New Lecture'}

setTitle(e.target.value)} required />