import React from 'react';
import { useQuery } from 'react-query';
import { useAuth } from '../contexts/AuthContext';
import { coursesAPI, enrollmentsAPI, attendanceAPI, usersAPI } from '../services/api';
import {
AcademicCapIcon,
UsersIcon,
ClockIcon,
ChartBarIcon,
UserGroupIcon,
BookOpenIcon,
CheckCircleIcon,
} from '@heroicons/react/24/outline';
import LoadingSpinner from '../components/LoadingSpinner';
import { useState } from 'react';
import toast from 'react-hot-toast';
const SliderImageUpload = () => {
const [file, setFile] = useState(null);
const [preview, setPreview] = useState(null);
const [uploading, setUploading] = useState(false);
const handleFileChange = (e) => {
const f = e.target.files[0];
setFile(f);
setPreview(f ? URL.createObjectURL(f) : null);
};
const handleUpload = async () => {
if (!file) return;
setUploading(true);
try {
await usersAPI.uploadSliderImage(file);
toast.success('Slider image uploaded!');
setFile(null);
setPreview(null);
} catch (err) {
toast.error('Upload failed');
} finally {
setUploading(false);
}
};
return (
);
};
const Dashboard = () => {
const { user, isSuperAdmin, isTrainer, isTrainee } = useAuth();
// Fetch data based on user role
const { data: coursesData, isLoading: coursesLoading } = useQuery(
['courses', 'dashboard'],
() => coursesAPI.getAll({ limit: 5, isPublished: true }),
{ enabled: !isSuperAdmin }
);
const { data: enrollmentsData, isLoading: enrollmentsLoading } = useQuery(
['enrollments', 'my'],
() => enrollmentsAPI.getMy({ limit: 5 }),
{ enabled: isTrainee }
);
const { data: attendanceStats, isLoading: attendanceLoading } = useQuery(
['attendance', 'stats'],
() => attendanceAPI.getStats(),
{ enabled: isTrainee }
);
const { data: userStats, isLoading: userStatsLoading } = useQuery(
['users', 'stats'],
() => usersAPI.getStats(),
{ enabled: isSuperAdmin }
);
const { data: courseStats, isLoading: courseStatsLoading } = useQuery(
['courses', 'stats'],
() => coursesAPI.getStats(),
{ enabled: isSuperAdmin || isTrainer }
);
// New queries for real counts
const { data: enrollmentStats, isLoading: enrollmentStatsLoading } = useQuery(
['enrollments', 'stats'],
() => enrollmentsAPI.getStats(),
{ enabled: isSuperAdmin || isTrainer }
);
const { data: trainerCourseStats, isLoading: trainerCourseStatsLoading } = useQuery(
['courses', 'trainer-stats'],
() => coursesAPI.getStats(),
{ enabled: isTrainer }
);
const { data: traineeEnrollmentStats, isLoading: traineeEnrollmentStatsLoading } = useQuery(
['enrollments', 'trainee-stats'],
() => enrollmentsAPI.getStats(),
{ enabled: isTrainee }
);
const isLoading = coursesLoading || enrollmentsLoading || attendanceLoading ||
userStatsLoading || courseStatsLoading || enrollmentStatsLoading ||
trainerCourseStatsLoading || traineeEnrollmentStatsLoading;
if (isLoading) {
return ;
}
const renderSuperAdminDashboard = () => (
Total Users
{userStats?.data?.stats?.totalUsers || 0}
Trainers
{userStats?.data?.stats?.trainers || 0}
Trainees
{userStats?.data?.stats?.trainees || 0}
Total Courses
{courseStats?.data?.stats?.totalCourses || 0}
Recent Users
{/* Add recent users list here */}
No recent users to display
System Overview
Active Users
{userStats?.data?.stats?.activeUsers || 0}
Published Courses
{courseStats?.data?.stats?.publishedCourses || 0}
Total Enrollments
{enrollmentStats?.data?.stats?.totalEnrollments || 0}
Featured Courses
{courseStats?.data?.stats?.featuredCourses || 0}
);
const renderTrainerDashboard = () => (
My Courses
{trainerCourseStats?.data?.stats?.myCourses || 0}
Published
{trainerCourseStats?.data?.stats?.myPublishedCourses || 0}
My Students
{enrollmentStats?.data?.stats?.myStudents || 0}
Recent Courses
{coursesData?.courses?.length > 0 ? (
coursesData.courses.map((course) => (
{course.title}
{course.trainer?.firstName} {course.trainer?.lastName}
{course.isPublished ? 'Published' : 'Draft'}
))
) : (
No courses found
)}
Quick Actions
);
const renderTraineeDashboard = () => (
Enrolled Courses
{traineeEnrollmentStats?.data?.stats?.myEnrollments || 0}
Attendance Rate
{attendanceStats?.data?.stats?.attendanceRate || 0}%
Completed Courses
{traineeEnrollmentStats?.data?.stats?.completedCourses || 0}
My Enrollments
{enrollmentsData?.enrollments?.length > 0 ? (
enrollmentsData.enrollments.map((enrollment) => (
{enrollment.course.title}
Progress: {enrollment.progress}%
{enrollment.status}
))
) : (
No enrollments found
)}
Quick Actions
);
return (
Dashboard
Welcome back, {user?.firstName}! Here's what's happening.
{isSuperAdmin && renderSuperAdminDashboard()}
{isTrainer && renderTrainerDashboard()}
{isTrainee && renderTraineeDashboard()}
);
};
export default Dashboard;