From 44297136018c078422305a7e64db672b5feb1fa0 Mon Sep 17 00:00:00 2001 From: Tatyana Date: Mon, 8 Sep 2025 20:49:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=BF=D0=BE=D1=81=D0=B5=D0=B4=D0=BD=D0=B5?= =?UTF-8?q?=D0=B5=20=D1=83=D0=BF=D1=80=D0=B0=D0=B6=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B8=20=D0=BD=D0=B0=20=D1=83=D0=BF=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=82=D0=B5=D0=BA=D1=83=D1=89?= =?UTF-8?q?=D0=B5=D0=B3=D0=BE=20=D0=BA=D1=83=D1=80=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/CourseExercises.tsx | 2 +- src/pages/Home.tsx | 84 ++++++++++++++++++++++++++++------- 2 files changed, 68 insertions(+), 18 deletions(-) diff --git a/src/pages/CourseExercises.tsx b/src/pages/CourseExercises.tsx index fc67d28..e23117e 100644 --- a/src/pages/CourseExercises.tsx +++ b/src/pages/CourseExercises.tsx @@ -121,7 +121,7 @@ export const CourseExercises = () => { return (
- +
diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 9c8a78a..c2068e8 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -21,6 +21,7 @@ import { getRouteCourseExercises } from "../shared/consts/router" import type { Course, User, CoursesApiResponse } from "../types/course" + interface CourseExercises { id_exercise: number day: number @@ -50,12 +51,6 @@ interface ProgressStats { overallProgress: number } -// interface RouteParams { -// courseId: string -// exerciseId?: string // Made optional since we might have exerciseIndex instead -// exerciseIndex?: string // Added exerciseIndex parameter -// } - export default function Home() { const history = useHistory() const [currentDate, setCurrentDate] = useState("") @@ -65,7 +60,6 @@ export default function Home() { const [currentExercise, setCurrentExercise] = useState(null) const [loadingCurrentExercise, setLoadingCurrentExercise] = useState(false) - // const { courseId, exerciseId, exerciseIndex } = useParams() const [progressStats, setProgressStats] = useState({ completedExercises: 0, @@ -91,11 +85,12 @@ export default function Home() { "Content-Type": "application/json", }, }) + console.log("!получили по запросу", response.data) + //упражнения курса const exercises = response.data.course_exercises || [] - totalExercises += exercises.length - console.log("упражнения для каждого курса", response.data) + totalExercises += exercises.length let courseCompletedExercises = 0 @@ -143,11 +138,61 @@ export default function Home() { setLoadingCurrentExercise(true) try { - // Берем первый доступный курс - const firstCourse = courses[0] + let targetCourse: Course | null = null - // Загружаем упражнения курса - const response = await connect.get(`/pacient/${firstCourse.id}`, { + // Проходим по всем курсам и ищем незавершенный + for (const course of courses) { + // Загружаем упражнения для каждого курса + const response = await connect.get(`/pacient/${course.id}`, { + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + }, + }) + + const exercises = response.data.course_exercises || [] + + if (exercises.length === 0) continue // Пропускаем курсы без упражнений + + // Проверяем, есть ли незавершенные упражнения в этом курсе + let hasIncompleteExercises = false + + for (const exercise of exercises) { + const storageKey = `exerciseProgress_${course.id}_${exercise.id_exercise}_day_${exercise.day}` + const savedProgress = localStorage.getItem(storageKey) + + let isCompleted = false + if (savedProgress) { + const progress = JSON.parse(savedProgress) + isCompleted = + progress.status === 1 && progress.completedSets && progress.completedSets.length >= exercise.count + } + + if (!isCompleted) { + hasIncompleteExercises = true + break // Нашли незавершенное упражнение, можно остановиться + } + } + + // Если в курсе есть незавершенные упражнения, выбираем его + if (hasIncompleteExercises) { + targetCourse = course + break // Берем первый найденный незавершенный курс + } + } + + // Если все курсы завершены, берем последний курс + if (!targetCourse && courses.length > 0) { + targetCourse = courses[courses.length - 1] + } + + if (!targetCourse) { + setCurrentExercise(null) + return + } + + // Загружаем упражнения выбранного курса + const response = await connect.get(`/pacient/${targetCourse.id}`, { headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json", @@ -182,7 +227,7 @@ export default function Home() { const exercise = dayExercises[i] // Проверяем прогресс упражнения в localStorage - const storageKey = `exerciseProgress_${firstCourse.id}_${exercise.id_exercise}_day_${day}` + const storageKey = `exerciseProgress_${targetCourse.id}_${exercise.id_exercise}_day_${day}` const savedProgress = localStorage.getItem(storageKey) let isCompleted = false @@ -194,7 +239,7 @@ export default function Home() { if (!isCompleted) { foundExercise = { - courseId: firstCourse.id.toString(), + courseId: targetCourse.id.toString(), exerciseId: exercise.id_exercise.toString(), exerciseIndex: i, day: Number(day), @@ -213,7 +258,7 @@ export default function Home() { if (!foundExercise && exercises.length > 0) { const lastExercise = exercises[exercises.length - 1] foundExercise = { - courseId: firstCourse.id.toString(), + courseId: targetCourse.id.toString(), exerciseId: lastExercise.id_exercise.toString(), exerciseIndex: exercises.length - 1, day: lastExercise.day, @@ -321,9 +366,14 @@ export default function Home() { } const handleExercisesClick = () => { - if (courses.length > 0) { + if (currentExercise) { + // Используем courseId из текущего упражнения (незавершенный курс) + history.push(getRouteCourseExercises(Number.parseInt(currentExercise.courseId))) + } else if (courses.length > 0) { + // Fallback к первому курсу если нет текущего упражнения history.push(getRouteCourseExercises(courses[0].id)) } else { + // Fallback к странице курсов если нет курсов history.push(getRouteCourses()) } }