корректный переход на поседнее упражнение и на упражнения текущего курса
This commit is contained in:
parent
15618e2265
commit
4429713601
@ -121,7 +121,7 @@ export const CourseExercises = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="my-36 min-h-screen max-w-4xl mx-auto">
|
<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="px-6 mb-8">
|
||||||
<div className="flex flex-col sm:flex-row justify-between content-center mb-6">
|
<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"
|
import type { Course, User, CoursesApiResponse } from "../types/course"
|
||||||
|
|
||||||
|
|
||||||
interface CourseExercises {
|
interface CourseExercises {
|
||||||
id_exercise: number
|
id_exercise: number
|
||||||
day: number
|
day: number
|
||||||
@ -50,12 +51,6 @@ interface ProgressStats {
|
|||||||
overallProgress: number
|
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() {
|
export default function Home() {
|
||||||
const history = useHistory()
|
const history = useHistory()
|
||||||
const [currentDate, setCurrentDate] = useState("")
|
const [currentDate, setCurrentDate] = useState("")
|
||||||
@ -65,7 +60,6 @@ export default function Home() {
|
|||||||
|
|
||||||
const [currentExercise, setCurrentExercise] = useState<CurrentExercise | null>(null)
|
const [currentExercise, setCurrentExercise] = useState<CurrentExercise | null>(null)
|
||||||
const [loadingCurrentExercise, setLoadingCurrentExercise] = useState(false)
|
const [loadingCurrentExercise, setLoadingCurrentExercise] = useState(false)
|
||||||
// const { courseId, exerciseId, exerciseIndex } = useParams<RouteParams>()
|
|
||||||
|
|
||||||
const [progressStats, setProgressStats] = useState<ProgressStats>({
|
const [progressStats, setProgressStats] = useState<ProgressStats>({
|
||||||
completedExercises: 0,
|
completedExercises: 0,
|
||||||
@ -91,11 +85,12 @@ export default function Home() {
|
|||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
console.log("!получили по запросу", response.data)
|
||||||
|
|
||||||
|
//упражнения курса
|
||||||
const exercises = response.data.course_exercises || []
|
const exercises = response.data.course_exercises || []
|
||||||
totalExercises += exercises.length
|
|
||||||
|
|
||||||
console.log("упражнения для каждого курса", response.data)
|
totalExercises += exercises.length
|
||||||
|
|
||||||
let courseCompletedExercises = 0
|
let courseCompletedExercises = 0
|
||||||
|
|
||||||
@ -143,11 +138,61 @@ export default function Home() {
|
|||||||
setLoadingCurrentExercise(true)
|
setLoadingCurrentExercise(true)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Берем первый доступный курс
|
let targetCourse: Course | null = null
|
||||||
const firstCourse = courses[0]
|
|
||||||
|
|
||||||
// Загружаем упражнения курса
|
// Проходим по всем курсам и ищем незавершенный
|
||||||
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: {
|
headers: {
|
||||||
Authorization: `Bearer ${token}`,
|
Authorization: `Bearer ${token}`,
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
@ -182,7 +227,7 @@ export default function Home() {
|
|||||||
const exercise = dayExercises[i]
|
const exercise = dayExercises[i]
|
||||||
|
|
||||||
// Проверяем прогресс упражнения в localStorage
|
// Проверяем прогресс упражнения в 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)
|
const savedProgress = localStorage.getItem(storageKey)
|
||||||
|
|
||||||
let isCompleted = false
|
let isCompleted = false
|
||||||
@ -194,7 +239,7 @@ export default function Home() {
|
|||||||
|
|
||||||
if (!isCompleted) {
|
if (!isCompleted) {
|
||||||
foundExercise = {
|
foundExercise = {
|
||||||
courseId: firstCourse.id.toString(),
|
courseId: targetCourse.id.toString(),
|
||||||
exerciseId: exercise.id_exercise.toString(),
|
exerciseId: exercise.id_exercise.toString(),
|
||||||
exerciseIndex: i,
|
exerciseIndex: i,
|
||||||
day: Number(day),
|
day: Number(day),
|
||||||
@ -213,7 +258,7 @@ export default function Home() {
|
|||||||
if (!foundExercise && exercises.length > 0) {
|
if (!foundExercise && exercises.length > 0) {
|
||||||
const lastExercise = exercises[exercises.length - 1]
|
const lastExercise = exercises[exercises.length - 1]
|
||||||
foundExercise = {
|
foundExercise = {
|
||||||
courseId: firstCourse.id.toString(),
|
courseId: targetCourse.id.toString(),
|
||||||
exerciseId: lastExercise.id_exercise.toString(),
|
exerciseId: lastExercise.id_exercise.toString(),
|
||||||
exerciseIndex: exercises.length - 1,
|
exerciseIndex: exercises.length - 1,
|
||||||
day: lastExercise.day,
|
day: lastExercise.day,
|
||||||
@ -321,9 +366,14 @@ export default function Home() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleExercisesClick = () => {
|
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))
|
history.push(getRouteCourseExercises(courses[0].id))
|
||||||
} else {
|
} else {
|
||||||
|
// Fallback к странице курсов если нет курсов
|
||||||
history.push(getRouteCourses())
|
history.push(getRouteCourses())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user