доработка адаптивности тегов с днями на странице курса
This commit is contained in:
parent
9b709f3bb7
commit
9af2258517
@ -1,6 +1,5 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
|
|
||||||
import { useState, useEffect } from "react";
|
import { useState, useEffect } from "react";
|
||||||
import { useParams, useHistory, useLocation } from "react-router-dom";
|
import { useParams, useHistory, useLocation } from "react-router-dom";
|
||||||
@ -37,20 +36,14 @@ export const CourseExercises = () => {
|
|||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
const { id } = useParams<{ id: string }>();
|
const { id } = useParams<{ id: string }>();
|
||||||
|
|
||||||
|
|
||||||
const location = useLocation<{ course?: Course }>();
|
const location = useLocation<{ course?: Course }>();
|
||||||
const course = location.state?.course;
|
const course = location.state?.course;
|
||||||
|
|
||||||
|
|
||||||
// const [pacientData, setPacientData] = useState(null);
|
|
||||||
|
|
||||||
const [course_exercises, setExercises] = useState<CourseExercises[]>([]);
|
const [course_exercises, setExercises] = useState<CourseExercises[]>([]);
|
||||||
const [selectedDay, setSelectedDay] = useState<number | null>(null);
|
const [selectedDay, setSelectedDay] = useState<number | null>(null);
|
||||||
|
|
||||||
const token = localStorage.getItem('authToken');
|
const token = localStorage.getItem('authToken');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log(token)
|
console.log(token)
|
||||||
if (!token) {
|
if (!token) {
|
||||||
@ -95,6 +88,25 @@ export const CourseExercises = () => {
|
|||||||
}
|
}
|
||||||
}, [course_exercises]);
|
}, [course_exercises]);
|
||||||
|
|
||||||
|
//Этот код — это React-хук useEffect, который выполняет определённый блок кода при изменении зависимостей. Давайте разберём его подробно:
|
||||||
|
//Он следит за изменением массива course_exercises. Когда course_exercises обновляется (например, загружается с сервера или изменяется), он проверяет:
|
||||||
|
|
||||||
|
// Есть ли в массиве упражнения (course_exercises.length > 0)
|
||||||
|
// И выбран ли уже день (selectedDay === null)
|
||||||
|
// Если оба условия выполняются, то:
|
||||||
|
|
||||||
|
// Устанавливает selectedDay в значение day первого элемента массива course_exercises[0].
|
||||||
|
// Почему это нужно?
|
||||||
|
// Это логика инициализации:
|
||||||
|
|
||||||
|
// Когда данные о упражнениях загружены впервые, и пользователь ещё не выбрал день (selectedDay равен null),
|
||||||
|
// автоматически выбирается первый день из загруженных упражнений.
|
||||||
|
// Почему [course_exercises] в конце?
|
||||||
|
// Это массив зависимостей. Он говорит React:
|
||||||
|
|
||||||
|
// Запускать этот эффект только тогда, когда course_exercises изменится.
|
||||||
|
|
||||||
|
// Без этого эффекта он бы запускался при каждом рендере, что нежелательно.
|
||||||
|
|
||||||
|
|
||||||
const uniqueDays = Array.from(new Set(course_exercises.map(ex => ex.day))).sort((a, b) => a - b);
|
const uniqueDays = Array.from(new Set(course_exercises.map(ex => ex.day))).sort((a, b) => a - b);
|
||||||
@ -115,9 +127,6 @@ 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={'курс'} />
|
||||||
@ -125,11 +134,10 @@ export const CourseExercises = () => {
|
|||||||
Если course не null и не undefined, то взять его свойство title, иначе — вернуть undefined*/}
|
Если course не null и не undefined, то взять его свойство title, иначе — вернуть undefined*/}
|
||||||
<div className="px-6 mb-8">
|
<div className="px-6 mb-8">
|
||||||
{/* Заголовок секции */}
|
{/* Заголовок секции */}
|
||||||
<div className="flex flex-col sm:flex-row items-center justify-between mb-6">
|
<div className="flex flex-col sm:flex-row justify-between content-center mb-6">
|
||||||
<h2 className="text-xl font-black text-[#5F5C5C]">Упражнения</h2>
|
<h2 className="text-xl font-black text-[#5F5C5C]">Упражнения</h2>
|
||||||
<span className="text-sm text-gray-500">Количество упражнений: {course_exercises.length}</span>
|
<span className="text-sm text-gray-500">Количество упражнений: {course_exercises.length}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
{/* <p>{JSON.stringify(course_exercises)}</p> */}
|
{/* <p>{JSON.stringify(course_exercises)}</p> */}
|
||||||
|
|
||||||
@ -137,14 +145,14 @@ export const CourseExercises = () => {
|
|||||||
{/* Кнопки выбора дня */}
|
{/* Кнопки выбора дня */}
|
||||||
{days.length > 1 && (
|
{days.length > 1 && (
|
||||||
<div className="mb-6">
|
<div className="mb-6">
|
||||||
<div className="flex space-x-2 overflow-x-auto pb-2">
|
<div className="flex flex-wrap gap-2 overflow-x-auto pb-2">
|
||||||
{days.map((day, index) => (
|
{days.map((day, index) => (
|
||||||
<button
|
<button
|
||||||
key={day}
|
key={day}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setSelectedDay(day);
|
setSelectedDay(day);
|
||||||
}}
|
}}
|
||||||
className={`flex-shrink-0 p-4 py-2 rounded-full text-sm font-semibold transition-all duration-300 ${selectedDay === day
|
className={`flex-shrink-0 p-4 py-2 rounded-full text-sm font-semibold transition-all duration-300 inline-block ${selectedDay === day
|
||||||
? "bg-[#2BACBE] text-white shadow-lg"
|
? "bg-[#2BACBE] text-white shadow-lg"
|
||||||
: "bg-white text-gray-600 hover:bg-gray-100"
|
: "bg-white text-gray-600 hover:bg-gray-100"
|
||||||
}`}
|
}`}
|
||||||
@ -191,18 +199,6 @@ export const CourseExercises = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
{/* <div className="mb-20">
|
|
||||||
|
|
||||||
{pacientData ? (
|
|
||||||
<pre>{JSON.stringify(pacientData, null, 2)}</pre>
|
|
||||||
) : (
|
|
||||||
<p>Нет данных</p>
|
|
||||||
)}
|
|
||||||
</div> */}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<BottomNavigation />
|
<BottomNavigation />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user