From ed8917e8dd266734a7bac19d69c0b06af22cd12f Mon Sep 17 00:00:00 2001 From: glpshchn <464976@niuitmo.ru> Date: Thu, 4 Dec 2025 23:47:07 +0300 Subject: [PATCH] Update files --- backend/routes/search.js | 2 +- frontend/src/components/CommentsModal.css | 29 +++++ frontend/src/components/CommentsModal.jsx | 114 +++++++++++++++----- frontend/src/components/FollowListModal.css | 37 ++++--- frontend/src/components/FollowListModal.jsx | 37 +++---- frontend/src/pages/Search.css | 45 ++++++++ frontend/src/pages/Search.jsx | 78 +++++++++++--- 7 files changed, 268 insertions(+), 74 deletions(-) diff --git a/backend/routes/search.js b/backend/routes/search.js index 9622fa7..c1414e4 100644 --- a/backend/routes/search.js +++ b/backend/routes/search.js @@ -57,7 +57,7 @@ function createProxyUrl(originalUrl) { // Эндпоинт для проксирования изображений // Используем более мягкий rate limiter для прокси -router.get('/proxy/:encodedUrl', proxyLimiter, async (req, res) => { +router.get('/proxy/:encodedUrl', async (req, res) => { try { const { encodedUrl } = req.params; diff --git a/frontend/src/components/CommentsModal.css b/frontend/src/components/CommentsModal.css index 487ce51..d6dc958 100644 --- a/frontend/src/components/CommentsModal.css +++ b/frontend/src/components/CommentsModal.css @@ -115,6 +115,35 @@ gap: 16px; } +.loading-state { + padding: 40px 20px; + display: flex; + flex-direction: column; + align-items: center; + gap: 12px; + color: var(--text-secondary); +} + +.loading-state .spinner { + width: 32px; + height: 32px; + border: 3px solid var(--divider-color); + border-top-color: var(--button-accent); + border-radius: 50%; + animation: spin 0.8s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +.loading-state p { + font-size: 14px; + margin: 0; +} + .empty-comments { padding: 60px 20px; text-align: center; diff --git a/frontend/src/components/CommentsModal.jsx b/frontend/src/components/CommentsModal.jsx index 8740051..800bce0 100644 --- a/frontend/src/components/CommentsModal.jsx +++ b/frontend/src/components/CommentsModal.jsx @@ -1,7 +1,7 @@ -import { useState } from 'react' +import { useState, useEffect } from 'react' import { createPortal } from 'react-dom' import { X, Send } from 'lucide-react' -import { commentPost } from '../utils/api' +import { commentPost, getPosts } from '../utils/api' import { hapticFeedback } from '../utils/telegram' import { decodeHtmlEntities } from '../utils/htmlEntities' import './CommentsModal.css' @@ -9,7 +9,50 @@ import './CommentsModal.css' export default function CommentsModal({ post, onClose, onUpdate }) { const [comment, setComment] = useState('') const [loading, setLoading] = useState(false) - const [comments, setComments] = useState(post.comments || []) + const [comments, setComments] = useState([]) + const [fullPost, setFullPost] = useState(post) + const [loadingPost, setLoadingPost] = useState(false) + + // Загрузить полные данные поста с комментариями + useEffect(() => { + if (post?._id) { + loadFullPost() + } else { + setFullPost(post) + setComments(post?.comments || []) + } + }, [post?._id]) + + const loadFullPost = async () => { + try { + setLoadingPost(true) + const response = await getPosts() + const foundPost = response.posts?.find(p => p._id === post._id) + if (foundPost) { + setFullPost(foundPost) + setComments(foundPost.comments || []) + } else { + // Fallback на переданный post + setFullPost(post) + setComments(post?.comments || []) + } + } catch (error) { + console.error('[CommentsModal] Ошибка загрузки поста:', error) + // Fallback на переданный post + setFullPost(post) + setComments(post?.comments || []) + } finally { + setLoadingPost(false) + } + } + + // Проверка на существование поста + if (!post) { + console.error('[CommentsModal] Post is missing') + return null + } + + const displayPost = fullPost || post const handleSubmit = async () => { if (!comment.trim()) return @@ -19,9 +62,11 @@ export default function CommentsModal({ post, onClose, onUpdate }) { hapticFeedback('light') const result = await commentPost(post._id, comment) - setComments(result.comments) + setComments(result.comments || []) setComment('') hapticFeedback('success') + // Обновить полный пост + await loadFullPost() onUpdate() } catch (error) { console.error('Ошибка добавления комментария:', error) @@ -50,6 +95,10 @@ export default function CommentsModal({ post, onClose, onUpdate }) { } } + if (!post) { + return null + } + return createPortal(
Загрузка...
Загрузка...
+