import React, { useState, useMemo, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { Button, Card, Typography, Tag, Progress,Spin } from 'antd'; import { PlayCircleOutlined, UserOutlined, ClockCircleOutlined, TeamOutlined, StarOutlined, ArrowRightOutlined, } from '@ant-design/icons'; import { TaxonomySlug, TermDto } from '@nice/common'; import { api } from '@nice/client'; import { GetTaxonomyProps, useGetTaxonomy } from '@web/src/hooks/useGetTaxonomy'; const { Title, Text } = Typography; interface Course { id: number; title: string; instructor: string; students: number; rating: number; level: string; duration: string; category: string; progress: number; thumbnail: string; } interface CoursesSectionProps { title: string; description: string; courses: Course[]; initialVisibleCoursesCount?: number; } const CoursesSection: React.FC = ({ title, description, courses, initialVisibleCoursesCount = 8, }) => { const navigate = useNavigate(); const [selectedCategory, setSelectedCategory] = useState('全部'); const [visibleCourses, setVisibleCourses] = useState(initialVisibleCoursesCount); const gateGory : GetTaxonomyProps = useGetTaxonomy({ type: TaxonomySlug.CATEGORY, }) useEffect(() => { }) const filteredCourses = useMemo(() => { return selectedCategory === '全部' ? courses : courses.filter((course) => course.category === selectedCategory); }, [selectedCategory, courses]); const displayedCourses = filteredCourses.slice(0, visibleCourses); return (
{title} {description}
{gateGory.isLoading ? : ( <> setSelectedCategory("全部")} className={`px-4 py-2 text-base cursor-pointer hover:scale-105 transform transition-all duration-300 ${selectedCategory === "全部" ? 'shadow-[0_2px_8px_-4px_rgba(59,130,246,0.5)]' : 'hover:shadow-md' }`} >全部 { gateGory.categories.map((category) => ( setSelectedCategory(category)} className={`px-4 py-2 text-base cursor-pointer hover:scale-105 transform transition-all duration-300 ${selectedCategory === category ? 'shadow-[0_2px_8px_-4px_rgba(59,130,246,0.5)]' : 'hover:shadow-md' }`} > {category} )) } ) }
{displayedCourses.map((course) => (
{course.progress > 0 && (
)}
} >
{course.category} {course.level}
{course.title}
{course.instructor}
{course.duration} {course.students.toLocaleString()} {course.rating}
))}
{filteredCourses.length >= visibleCourses && (
navigate('/courses')} className="cursor-pointer tracking-widest text-gray-500 hover:text-primary font-medium flex items-center gap-2 transition-all duration-300 ease-in-out" > 查看更多
)}
); }; export default CoursesSection;