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 }
);
const isLoading = coursesLoading || enrollmentsLoading || attendanceLoading ||
userStatsLoading || courseStatsLoading;
if (isLoading) {
return ;
}
const renderSuperAdminDashboard = () => (
Total Users
{userStats?.stats?.totalUsers || 0}
Trainers
{userStats?.stats?.trainers || 0}
Trainees
{userStats?.stats?.trainees || 0}
Total Courses
{courseStats?.stats?.totalCourses || 0}
Recent Users
{/* Add recent users list here */}
No recent users to display
System Overview
Active Users
{userStats?.stats?.activeUsers || 0}
Published Courses
{courseStats?.stats?.publishedCourses || 0}
Featured Courses
{courseStats?.stats?.featuredCourses || 0}
);
const renderTrainerDashboard = () => (
My Courses
{courseStats?.stats?.totalCourses || 0}
Published
{courseStats?.stats?.publishedCourses || 0}
Students
{/* Add total students count */}
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
{enrollmentsData?.enrollments?.length || 0}
Attendance Rate
{attendanceStats?.stats?.attendanceRate || 0}%
Total Sessions
{attendanceStats?.stats?.totalSessions || 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;