"use client" import { useState } from "react" import { useFormStatus } from "react-dom" import { toast } from "sonner" import { useRouter } from "next/navigation" import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/shared/components/ui/card" import { Button } from "@/shared/components/ui/button" import { Input } from "@/shared/components/ui/input" import { Label } from "@/shared/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/shared/components/ui/select" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/shared/components/ui/table" import { batchCreateGradeRecordsAction } from "../actions" type Option = { id: string; name: string } type Student = { id: string; name: string; email: string } function SubmitButton() { const { pending } = useFormStatus() return ( ) } export function BatchGradeEntry({ classes, subjects, students, defaultClassId, defaultSubjectId, }: { classes: Option[] subjects: Option[] students: Student[] defaultClassId?: string defaultSubjectId?: string }) { const router = useRouter() const [classId, setClassId] = useState(defaultClassId ?? classes[0]?.id ?? "") const [subjectId, setSubjectId] = useState(defaultSubjectId ?? subjects[0]?.id ?? "") const [type, setType] = useState<"exam" | "quiz" | "homework" | "other">("exam") const [semester, setSemester] = useState<"1" | "2">("1") const [scores, setScores] = useState>({}) const handleScoreChange = (studentId: string, value: string) => { setScores((prev) => ({ ...prev, [studentId]: value })) } const handleSubmit = async (formData: FormData) => { if (!classId || !subjectId) { toast.error("Please select class and subject") return } const records = students .map((s) => ({ studentId: s.id, score: Number(scores[s.id] ?? 0), remark: undefined as string | undefined, })) .filter((r) => r.score > 0 || scores[r.studentId] !== undefined) if (records.length === 0) { toast.error("Please enter at least one score") return } formData.set("classId", classId) formData.set("subjectId", subjectId) formData.set("type", type) formData.set("semester", semester) formData.set("recordsJson", JSON.stringify(records)) const result = await batchCreateGradeRecordsAction(null, formData) if (result.success) { toast.success(result.message) router.push("/teacher/grades") router.refresh() } else { toast.error(result.message || "Failed to save") } } return ( Batch Grade Entry
{students.length === 0 ? (

No students in this class.

) : (
Student Email Score {students.map((s) => ( {s.name} {s.email} handleScoreChange(s.id, e.target.value)} className="h-8" /> ))}
)}
) }