"use client"; import { useEffect, useRef } from "react"; import { Skeleton } from "@/components/ui/skeleton"; import type { ChatMessage } from "@/lib/hooks/use-chat"; import { MessageBubble } from "./MessageBubble"; interface MessageListProps { messages: ChatMessage[]; currentUserId: number; isLoading: boolean; onLoadMore?: () => void; hasMore: boolean; otherUserTyping: boolean; } export function MessageList({ messages, currentUserId, isLoading, onLoadMore, hasMore, otherUserTyping, }: MessageListProps) { const messagesEndRef = useRef(null); const messagesContainerRef = useRef(null); const prevMessagesLengthRef = useRef(0); // Scroll para última mensagem quando novas mensagens chegarem useEffect(() => { if (messages.length > prevMessagesLengthRef.current) { // Nova mensagem adicionada messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); } prevMessagesLengthRef.current = messages.length; }, [messages.length]); // Scroll inicial para o final useEffect(() => { if (messages.length > 0 && !isLoading) { messagesEndRef.current?.scrollIntoView({ behavior: "auto" }); } }, [isLoading, messages.length]); // Detectar scroll no topo para carregar mais const handleScroll = () => { const container = messagesContainerRef.current; if (!container || !onLoadMore || !hasMore || isLoading) return; if (container.scrollTop === 0) { const previousScrollHeight = container.scrollHeight; onLoadMore(); // Ajustar scroll após carregar mais mensagens setTimeout(() => { const newScrollHeight = container.scrollHeight; container.scrollTop = newScrollHeight - previousScrollHeight; }, 100); } }; return (
{isLoading && messages.length === 0 ? (
{Array.from({ length: 5 }).map((_, i) => ( ))}
) : messages.length === 0 ? (

Nenhuma mensagem ainda

Envie a primeira mensagem para começar a conversa

) : ( <> {hasMore && (
)} {messages.map((message) => ( ))} {otherUserTyping && (
)}
)}
); }