import React, { useState } from 'react';
import { useQuery } from 'react-query';
import { Link } from 'react-router-dom';
import { useAuth } from '../contexts/AuthContext';
import { coursesAPI } from '../services/api';
import {
MagnifyingGlassIcon,
PlusIcon,
StarIcon,
ClockIcon,
UserIcon,
AcademicCapIcon,
} from '@heroicons/react/24/outline';
import LoadingSpinner from '../components/LoadingSpinner';
const Courses = () => {
const { isTrainer, isSuperAdmin } = useAuth();
const [search, setSearch] = useState('');
const [category, setCategory] = useState('');
const [level, setLevel] = useState('');
const [sortBy, setSortBy] = useState('createdAt');
const [sortOrder, setSortOrder] = useState('DESC');
const { data: coursesData, isLoading } = useQuery(
['courses', { search, category, level, sortBy, sortOrder }],
() => coursesAPI.getAll({ search, category, level, sortBy, sortOrder }),
{ keepPreviousData: true }
);
const { data: categoriesData } = useQuery(
['categories'],
() => coursesAPI.getCategories(),
{ enabled: !isTrainer && !isSuperAdmin }
);
const formatPrice = (price) => {
return new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
}).format(price);
};
const formatDuration = (minutes) => {
if (!minutes) return 'N/A';
const hours = Math.floor(minutes / 60);
const mins = minutes % 60;
return hours > 0 ? `${hours}h ${mins}m` : `${mins}m`;
};
const getLevelColor = (level) => {
const colors = {
beginner: 'badge-success',
intermediate: 'badge-warning',
advanced: 'badge-danger',
};
return colors[level] || 'badge-secondary';
};
if (isLoading) {
return
{isTrainer || isSuperAdmin ? 'Manage your courses and create new ones' : 'Discover and enroll in courses' }
{course.shortDescription || course.description}
{search || category || level ? 'Try adjusting your filters' : 'Get started by creating your first course' }