import { useEffect } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { useForm, useFieldArray } from "react-hook-form"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import { ArrowLeft, Plus, Trash2 } from "lucide-react"; import { useCourses } from "@/contexts/AdminCoursesContext"; import { useAuth } from "@/contexts/AuthContext"; import { PageMeta } from "@/contexts/MetadataContext"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Spinner } from "@/components/ui/spinner"; const schema = z.object({ title: z.string().min(1, "Title is required."), description: z.string().optional(), order: z.coerce.number().min(0).default(0), objectives: z.array( z.object({ value: z.string().min(1, "Objective cannot be empty.") }) ).optional(), }); function FieldError({ message }) { if (!message) return null; return
{message}
; } export default function AddLesson() { const navigate = useNavigate(); const { courseId, unitId } = useParams(); const { createLesson, fetchUnit, course, unit, loading } = useCourses(); const { user } = useAuth(); const { register, handleSubmit, control, formState: { errors } } = useForm({ resolver: zodResolver(schema), defaultValues: { title: "", description: "", order: 0, objectives: [] }, }); const { fields, append, remove } = useFieldArray({ control, name: "objectives" }); useEffect(() => { fetchUnit(courseId, unitId); }, [courseId, unitId]); const onSubmit = async (data) => { const payload = { ...data, objectives: data.objectives?.map((o) => o.value) ?? [], createdBy: user?.user_id, }; const result = await createLesson(courseId, unitId, payload); if (!result) return; navigate(`/admin/courses/${courseId}/units/${unitId}/lessons`); }; return (Add a new lesson to this unit.