Update files

This commit is contained in:
glpshchn 2025-12-05 00:39:03 +03:00
parent 458c7fadc8
commit a19c4bca62
1 changed files with 78 additions and 73 deletions

View File

@ -72,7 +72,7 @@ export default function CommentsModal({ post, onClose, onUpdate }) {
return () => { return () => {
cancelled = true cancelled = true
} }
}, [post?._id || null]) // Только ID поста в зависимостях, используем null для стабильности }, [post?._id]) // Используем просто post?._id без || null
// Проверка на существование поста ПОСЛЕ хуков // Проверка на существование поста ПОСЛЕ хуков
const displayPost = fullPost || post const displayPost = fullPost || post
@ -104,10 +104,6 @@ export default function CommentsModal({ post, onClose, onUpdate }) {
setComment('') setComment('')
hapticFeedback('success') hapticFeedback('success')
// Обновить данные поста для синхронизации (но не блокируем UI)
// Перезагружаем через useEffect, который сработает при изменении post._id
// Но так как post._id не меняется, просто обновим локально
if (onUpdate) { if (onUpdate) {
onUpdate() onUpdate()
} }
@ -124,6 +120,7 @@ export default function CommentsModal({ post, onClose, onUpdate }) {
} }
const formatDate = (date) => { const formatDate = (date) => {
if (!date) return 'только что'
const d = new Date(date) const d = new Date(date)
const now = new Date() const now = new Date()
const diff = Math.floor((now - d) / 1000) // секунды const diff = Math.floor((now - d) / 1000) // секунды
@ -142,17 +139,15 @@ export default function CommentsModal({ post, onClose, onUpdate }) {
} }
} }
// Если нет валидного поста, не рендерим модалку вообще // ВСЕГДА рендерим createPortal, даже если пост не валиден
if (!hasValidPost) { // Это критично для соблюдения правил хуков
return null
}
return createPortal( return createPortal(
<div <div
className="comments-modal-overlay" className="comments-modal-overlay"
onMouseDown={(e) => e.stopPropagation()} onMouseDown={(e) => e.stopPropagation()}
onTouchStart={(e) => e.stopPropagation()} onTouchStart={(e) => e.stopPropagation()}
onClick={handleOverlayClick} onClick={handleOverlayClick}
style={{ display: hasValidPost ? 'flex' : 'none' }}
> >
<div className="comments-modal" onClick={(e) => e.stopPropagation()}> <div className="comments-modal" onClick={(e) => e.stopPropagation()}>
{/* Хедер */} {/* Хедер */}
@ -165,7 +160,13 @@ export default function CommentsModal({ post, onClose, onUpdate }) {
</div> </div>
{/* Пост */} {/* Пост */}
{loadingPost ? ( {!hasValidPost ? (
<div className="post-preview">
<div className="loading-state">
<p>Загрузка...</p>
</div>
</div>
) : loadingPost ? (
<div className="post-preview"> <div className="post-preview">
<div className="loading-state"> <div className="loading-state">
<div className="spinner" /> <div className="spinner" />
@ -205,6 +206,7 @@ export default function CommentsModal({ post, onClose, onUpdate }) {
)} )}
{/* Список комментариев */} {/* Список комментариев */}
{hasValidPost && (
<div className="comments-list"> <div className="comments-list">
{comments.length === 0 ? ( {comments.length === 0 ? (
<div className="empty-comments"> <div className="empty-comments">
@ -249,8 +251,10 @@ export default function CommentsModal({ post, onClose, onUpdate }) {
.filter(Boolean) // Убираем null значения .filter(Boolean) // Убираем null значения
)} )}
</div> </div>
)}
{/* Форма добавления комментария */} {/* Форма добавления комментария */}
{hasValidPost && (
<div className="comment-form"> <div className="comment-form">
<input <input
type="text" type="text"
@ -268,8 +272,9 @@ export default function CommentsModal({ post, onClose, onUpdate }) {
<Send size={20} /> <Send size={20} />
</button> </button>
</div> </div>
)}
</div> </div>
</div> </div>,
document.body
) )
} }