корректный переход на поседнее упражнение и на упражнения текущего курса
This commit is contained in:
parent
15618e2265
commit
4429713601
@ -121,7 +121,7 @@ export const CourseExercises = () => {
|
||||
|
||||
return (
|
||||
<div className="my-36 min-h-screen max-w-4xl mx-auto">
|
||||
<HeaderNav item={course?.title ?? "Название курса"} text={"курс"} />
|
||||
<HeaderNav item={course?.title ?? "Текущий"} text={"курс"} />
|
||||
|
||||
<div className="px-6 mb-8">
|
||||
<div className="flex flex-col sm:flex-row justify-between content-center mb-6">
|
||||
|
@ -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<CurrentExercise | null>(null)
|
||||
const [loadingCurrentExercise, setLoadingCurrentExercise] = useState(false)
|
||||
// const { courseId, exerciseId, exerciseIndex } = useParams<RouteParams>()
|
||||
|
||||
const [progressStats, setProgressStats] = useState<ProgressStats>({
|
||||
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())
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user