import React, { useEffect, useState } from 'react'; import { ArrowLeft, BookOpen, Loader2 } from 'lucide-react'; import { useNavigate, useParams } from 'react-router-dom'; import { Course } from '../types'; import { getCourses, getLearningPaths, PublicLearningPath } from '../services/db'; import { CourseCoverImage } from '../components/CourseCoverImage'; import { CourseCard } from '../components/CourseCard'; export const TrailPage: React.FC<{ onPlay: (course: Course) => void }> = ({ onPlay }) => { const { trailId } = useParams<{ trailId: string }>(); const navigate = useNavigate(); const [trail, setTrail] = useState(null); const [courses, setCourses] = useState([]); const [isLoading, setIsLoading] = useState(true); useEffect(() => { if (!trailId) return; Promise.all([getLearningPaths(), getCourses()]) .then(([paths, availableCourses]) => { const found = paths.find((item) => item.id === trailId) || null; setTrail(found); if (found) { const byId = new Map(availableCourses.map((course) => [course.id, course])); setCourses(found.courses.map((course) => byId.get(course.id)).filter((course): course is Course => Boolean(course))); } }) .finally(() => setIsLoading(false)); }, [trailId]); if (isLoading) return
; if (!trail) return

Trilha indisponível

Esta trilha não está publicada.

; return
{trail.coverImageUrl && }

Trilha de cursos

{trail.title}

{trail.description &&

{trail.description}

}
{courses.length} {courses.length === 1 ? 'curso na trilha' : 'cursos na trilha'}

Sua sequência

Cursos da trilha

{courses.length ?
{courses.map((course, index) =>

{String(index + 1).padStart(2, '0')} · Curso

)}
:
Nenhum curso publicado nesta trilha.
}
; };