import React, { useState, useRef, useEffect } from 'react';
import { useQuery } from 'react-query';
import { Link } from 'react-router-dom';
import { useAuth } from '../contexts/AuthContext';
import { enrollmentsAPI, coursesAPI } from '../services/api';
import {
UsersIcon,
BookOpenIcon,
CalendarIcon,
ChartBarIcon,
EllipsisVerticalIcon,
UserIcon,
EyeIcon,
XMarkIcon,
} from '@heroicons/react/24/outline';
import LoadingSpinner from '../components/LoadingSpinner';
import toast from 'react-hot-toast';
const TrainerStudents = () => {
const { user } = useAuth();
const [selectedCourse, setSelectedCourse] = useState('all');
const [showActionsDropdown, setShowActionsDropdown] = useState(null);
const dropdownRef = useRef(null);
// Close dropdown when clicking outside
useEffect(() => {
const handleClickOutside = (event) => {
if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
setShowActionsDropdown(null);
}
};
document.addEventListener('mousedown', handleClickOutside);
return () => {
document.removeEventListener('mousedown', handleClickOutside);
};
}, []);
// Fetch trainer's courses
const { data: coursesData, isLoading: coursesLoading } = useQuery(
['trainer-courses'],
() => coursesAPI.getTrainerCourses(user?.id),
{ enabled: !!user?.id }
);
// Fetch enrollments for selected course
const { data: enrollmentsData, isLoading: enrollmentsLoading } = useQuery(
['trainer-enrollments', selectedCourse],
() => selectedCourse === 'all'
? enrollmentsAPI.getTrainerEnrollments(user?.id)
: enrollmentsAPI.getCourseTrainees(selectedCourse),
{ enabled: !!user?.id && !!selectedCourse }
);
const handleRemoveStudent = async (enrollmentId, studentName, courseTitle) => {
if (window.confirm(`Are you sure you want to remove ${studentName} from ${courseTitle}?`)) {
try {
await enrollmentsAPI.delete(enrollmentId);
toast.success(`${studentName} removed from ${courseTitle} successfully!`);
// Refetch the data
window.location.reload();
} catch (error) {
toast.error('Failed to remove student from course');
}
}
};
if (coursesLoading || enrollmentsLoading) return
Manage students enrolled in your courses
Total Students
{uniqueStudents.length}
Total Courses
{courses.length}
Total Enrollments
{enrollments.length}
{selectedCourse === 'all' ? "You don't have any students enrolled in your courses yet." : "No students are enrolled in this course." }
{student.email}