"use client" import { useState, useEffect } from 'react'; import { useHistory } from "react-router-dom"; import BottomNavigation from "../components/BottomNavigation"; import HeaderNav from "../components/HeaderNav"; import { connect } from '../confconnect'; import { getRouteCourseExercises } from '../shared/consts/router'; import type { CourseExercises } from './CourseExercises'; export interface Course { ID: number; title: string; desc: string; url_file_img: string; course_exercises: CourseExercises; } const ProgressLine = () => { return (
); } const AnalitcsCards = () => { return (
{/* Прогрессная часть */} {/* Текст поверх линии */}
Вы прошли реабилитацию на {85}%
) } // НАЧАЛО КОМПОНЕНТА export const Courses = () => { const history = useHistory(); const [courses, setCourses] = useState([]); const [error, setError] = useState(''); const token = localStorage.getItem('authToken'); const [course_exercises, setExercises] = useState([]); useEffect(() => { console.log(token) if (!token) { setError('Токен не найден'); return; } connect.get('/pacient/courses', { headers: { Authorization: `Bearer ${token}`, }, }) .then(response => { console.log('Response status:', response.data); setExercises(response.data.courses.course_exercises); // Предполагаемая структура: // response.data.courses — массив пользователей const users = response.data.courses || []; // Собираем все курсы из всех пользователей const allCourses: Course[] = []; users.forEach(user => { if (user.Courses && Array.isArray(user.Courses)) { user.Courses.forEach(course => { // Можно добавить проверку или преобразование allCourses.push({ ID: course.id, // или course.ID, зависит от структуры title: course.title, desc: course.desc, url_file_img: course.url_file_img, }); }); } }); setCourses(allCourses); }) .catch(error => { if (error.response) { console.error('Ошибка ответа сервера:', error.response.status, error.response.data); setError(`Ошибка сервера: ${error.response.status}`); } else if (error.request) { console.error('Нет ответа от сервера:', error.request); setError('Нет ответа от сервера'); } else { console.error('Ошибка при настройке запроса:', error.message); setError(`Ошибка: ${error.message}`); } }); }, [token]); // Генерируем случайный прогресс для каждого курса const getRandomProgress = () => Math.floor(Math.random() * 100); // Цвета для прогресс-баров в оттенках cyan const progressColors = [ "from-gray-400 to-cyan-800", ]; //item.exercise.title return (
{error && (

{error}

)} {/* Заголовок секции */}

Мои курсы

Назначенных: {courses.length}
{/* Выводим список курсов */}
{courses.length > 0 ? ( courses.map((course, index) => { const progress = getRandomProgress(); const colorClass = progressColors[index % progressColors.length]; return (
history.push(getRouteCourseExercises(course.ID.toString()), { course })} className="bg-white/30 backdrop-blur-2xl rounded-3xl p-6 border border-white/20 shadow-xl cursor-pointer hover:shadow-2xl transition-all duration-300 transform hover:scale-[1.02]" >
{/* Изображение курса */} {course.url_file_img && (
{course.title} { e.currentTarget.src = "/placeholder.svg?height=64&width=64&text=Course" }} />
)}

{course.title}

{/* Описание курса */} {course.desc && (

{course.desc}

)} {/* Индикатор прогресса */}
{/* Информация о прогрессе */}

{progress}% завершено

{course_exercises} упражнений

{/* Иконка стрелки */}
) }) ) : ( !error && (

У вас пока нет назначенных курсов

) )}
); };