import { useState, useMemo } from "react"; import { Card, CardContent } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { useLessons, useCreateLesson, useUpdateLesson, useDeleteLesson, useCourses, useBatches, useSubjects } from "@/hooks/queries"; import { Search, Plus, Trash2, Edit } from "lucide-react"; import { useToast } from "@/hooks/use-toast"; import type { Lesson } from "@/types/lesson"; export default function AdminLessons() { const [search, setSearch] = useState(""); const [createOpen, setCreateOpen] = useState(false); const [editOpen, setEditOpen] = useState(false); const [editing, setEditing] = useState(null); const [form, setForm] = useState({ lesson_topic: "", course_id: "", batch_id: "", subject_id: "" }); const { toast } = useToast(); const { data, isLoading } = useLessons(); const items = data?.data ?? data?.items ?? []; const createMutation = useCreateLesson(); const updateMutation = useUpdateLesson(); const deleteMutation = useDeleteLesson(); const { data: coursesData } = useCourses({ size: 200 }); const { data: batchesData } = useBatches({ size: 200 }); const { data: subjectsData } = useSubjects(); const courses = coursesData?.items ?? []; const allBatches = batchesData?.items ?? []; const subjects = Array.isArray(subjectsData) ? subjectsData : []; const batchesForCourse = useMemo( () => (form.course_id ? allBatches.filter((b) => b.course_id === Number(form.course_id)) : allBatches), [allBatches, form.course_id], ); if (isLoading) { return (
); } const q = search.toLowerCase(); const filtered = items.filter( (l) => l.name?.toLowerCase().includes(q) || l.subject_name?.toLowerCase().includes(q) || l.session_name?.toLowerCase().includes(q), ); const openEdit = (l: Lesson) => { setEditing(l); setForm({ lesson_topic: l.lesson_topic || l.name, course_id: l.course_id ? String(l.course_id) : "", batch_id: l.batch_id ? String(l.batch_id) : "", subject_id: String(l.subject_id ?? ""), }); setEditOpen(true); }; return (

Lessons

Manage lessons, subjects, and sessions.

setSearch(e.target.value)} className="pl-9" />
# Name Subject Session Actions {filtered.map((l, i) => ( {i + 1} {l.name} {l.subject_name} {l.session_name}
))}
Create lesson
setForm((f) => ({ ...f, lesson_topic: e.target.value }))} placeholder="e.g. Introduction to Algebra" />
Edit lesson
setForm((f) => ({ ...f, lesson_topic: e.target.value }))} />
); }