From 56a04dbe14def4ca591be4a5e94cddfda42a54fe Mon Sep 17 00:00:00 2001 From: Primakov Alexandr Alexandrovich <primakov.pro@yandex.ru> Date: Thu, 27 Mar 2025 14:01:12 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=80=D0=B5=D0=B0=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=B9=20=D1=81=D1=82=D1=83=D0=B4=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B8=20=D0=B0=D0=BD=D0=B8=D0=BC=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=B5=D0=BA=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8F.=20=D0=A3=D0=BF=D1=80=D0=BE=D1=89=D0=B5=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D1=85=20=D1=80=D0=B5=D0=B0=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B8=20=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B0=D0=BD=D0=B8=D0=BC=D0=B0=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D1=81=D1=82=D1=83=D0=B4=D0=B5=D0=BD=D1=82=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/lesson-details.tsx | 23 ++++++--------------- src/pages/user-page.tsx | 40 ++++++++++++++++++------------------ 2 files changed, 26 insertions(+), 37 deletions(-) diff --git a/src/pages/lesson-details.tsx b/src/pages/lesson-details.tsx index 634c0a7..dca5e38 100644 --- a/src/pages/lesson-details.tsx +++ b/src/pages/lesson-details.tsx @@ -137,29 +137,18 @@ const LessonDetail = () => { if (!groupedReactions[reaction.sub]) { groupedReactions[reaction.sub] = []; } - - // Добавляем только новые реакции - const isNewReaction = !prevReactionsRef.current[reaction.sub]?.some( - r => r._id === reaction._id - ); - - if (isNewReaction) { - groupedReactions[reaction.sub] = [reaction]; - } + groupedReactions[reaction.sub].push(reaction); }); // Обновляем отображаемые реакции setStudentReactions(groupedReactions); - // Обновляем предыдущие реакции - prevReactionsRef.current = { ...groupedReactions }; + // Обновляем предыдущие реакции после небольшой задержки + const updatePrevReactionsTimeout = setTimeout(() => { + prevReactionsRef.current = groupedReactions; + }, 1000); - // Сбрасываем отображаемые реакции через некоторое время - const clearReactionsTimeout = setTimeout(() => { - setStudentReactions({}); - }, 5000); - - return () => clearTimeout(clearReactionsTimeout); + return () => clearTimeout(updatePrevReactionsTimeout); } }, [accessCode?.body?.lesson?.studentReactions]); diff --git a/src/pages/user-page.tsx b/src/pages/user-page.tsx index 67c6e9b..a0ef422 100644 --- a/src/pages/user-page.tsx +++ b/src/pages/user-page.tsx @@ -63,28 +63,28 @@ const UserPage = () => { // Эффект для поэтапного появления карточек студентов useEffect(() => { if (ls.data?.body?.students?.length) { - // Сначала очищаем список - setAnimatedStudents([]) - - // Затем постепенно добавляем студентов для красивой анимации - const students = [...ls.data.body.students] - const addStudentWithDelay = (index) => { - if (index < students.length) { - setAnimatedStudents(prev => [...prev, {...students[index], isNew: true}]) - - // Для следующего студента - setTimeout(() => { - addStudentWithDelay(index + 1) - }, 100) // Уменьшенная задержка для более плавной анимации + // Обновляем существующих студентов с сохранением их анимации + setAnimatedStudents(prevStudents => { + const newStudents = ls.data.body.students.map(student => { + // Находим существующего студента + const existingStudent = prevStudents.find(p => p.sub === student.sub); + // Сохраняем флаг isNew если студент уже существует + return { + ...student, + isNew: existingStudent ? existingStudent.isNew : true + }; + }); + + // Если количество студентов не изменилось, сохраняем текущий массив + if (prevStudents.length === newStudents.length && + prevStudents.every(student => newStudents.find(n => n.sub === student.sub))) { + return prevStudents; } - } - - // Запускаем процесс добавления с небольшой задержкой для лучшего UX - setTimeout(() => { - addStudentWithDelay(0) - }, 300) + + return newStudents; + }); } - }, [ls.data?.body?.students]) + }, [ls.data?.body?.students, ls.data?.body?.studentReactions]) // Эффект для сброса флага "новизны" студентов useEffect(() => {