// frontend/src/components/admin/ClassEnrollments.jsx import React, { useState } from "react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import api from "../../api/client"; export default function ClassEnrollments({ classData, onClose }) { const queryClient = useQueryClient(); const [email, setEmail] = useState(""); const classId = classData?.id; const { data: enrollments = [], isLoading, } = useQuery({ queryKey: ["class-enrollments", classId], enabled: !!classId, queryFn: async () => { const res = await api.get(`/admin/classes/${classId}/enrollments`); return Array.isArray(res.data) ? res.data : []; }, initialData: [], }); const inviteMutation = useMutation({ mutationFn: async (payload) => { const res = await api.post( `/admin/classes/${classId}/invite`, payload ); return res.data; }, onSuccess: () => { setEmail(""); queryClient.invalidateQueries({ queryKey: ["class-enrollments", classId] }); }, }); const removeMutation = useMutation({ mutationFn: async (enrollmentId) => { await api.delete( `/admin/classes/${classId}/enrollments/${enrollmentId}` ); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["class-enrollments", classId] }); }, }); function handleInvite(e) { e.preventDefault(); if (!email.trim()) return; inviteMutation.mutate({ student_email: email.trim() }); } return (

Enrollments – {classData?.name}

Invite students by email and manage their enrollment.

{/* Invite form */}
setEmail(e.target.value)} />
{/* Enrollments list */}
{isLoading ? (
Loading enrollments...
) : enrollments.length === 0 ? (
No enrollments yet.
) : (
    {enrollments.map((en) => (
  • {en.student_email}
    Status: {en.status || "invited"}
  • ))}
)}
); }