import React, { useState, useEffect } from 'react'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { GraduationCap, BookOpen, ExternalLink, Play } from 'lucide-react'; import { usePolkadot } from '@/contexts/PolkadotContext'; import { toast } from 'sonner'; import { LoadingState } from '@shared/components/AsyncComponent'; import { getCourses, enrollInCourse, type Course } from '@shared/lib/perwerde'; import { getIPFSUrl } from '@shared/lib/ipfs'; interface CourseListProps { enrolledCourseIds: number[]; onEnroll: () => void; } export function CourseList({ enrolledCourseIds, onEnroll }: CourseListProps) { const { api, selectedAccount } = usePolkadot(); const [courses, setCourses] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const fetchCourses = async () => { try { setLoading(true); const activeCourses = await getCourses('Active'); setCourses(activeCourses); } catch (error) { console.error('Failed to fetch courses:', error); toast({ title: 'Error', description: 'Failed to fetch courses', variant: 'destructive', }); } finally { setLoading(false); } }; fetchCourses(); }, []); const handleEnroll = async (courseId: number) => { if (!api || !selectedAccount) { toast({ title: 'Error', description: 'Please connect your wallet first', variant: 'destructive', }); return; } try { await enrollInCourse(api, selectedAccount, courseId); onEnroll(); } catch (error) { console.error('Enroll failed:', error); } }; if (loading) { return ; } return (

{courses.length > 0 ? `Available Courses (${courses.length})` : 'No Courses Available'}

{courses.length === 0 ? (

No Active Courses

Check back later for new educational content.

) : (
{courses.map((course) => { const isUserEnrolled = enrolledCourseIds.includes(course.id); return (

{course.name}

#{course.id} {isUserEnrolled && ( Enrolled )}

{course.description}

{course.owner.slice(0, 8)}...{course.owner.slice(-6)}
{course.content_link && ( Course Materials )}
{isUserEnrolled ? ( ) : ( )}
); })}
)}
); }