import { MessageItem } from "@components/PageComponents/Messages/MessageItem.tsx"; import { InboxIcon } from "lucide-react"; import { useCallback, useEffect, useRef } from "react"; import { Message } from "@core/stores/messageStore/types.ts"; export interface ChannelChatProps { messages?: Message[]; } const EmptyState = () => (
No Messages
); export const ChannelChat = ({ messages = [] }: ChannelChatProps) => { const messagesEndRef = useRef(null); const scrollContainerRef = useRef(null); const userScrolledUpRef = useRef(false); const scrollToBottom = useCallback((behavior: ScrollBehavior = 'smooth') => { requestAnimationFrame(() => { messagesEndRef.current?.scrollIntoView({ behavior }); }); }, []); useEffect(() => { const scrollContainer = scrollContainerRef.current; if (!scrollContainer) return; const isScrolledToBottom = scrollContainer.scrollHeight - scrollContainer.scrollTop - scrollContainer.clientHeight <= 10; if (isScrolledToBottom || !userScrolledUpRef.current) { scrollToBottom('smooth'); } }, [messages, scrollToBottom]); useEffect(() => { const scrollContainer = scrollContainerRef.current; const handleScroll = () => { if (!scrollContainer) return; const isAtBottom = scrollContainer.scrollHeight - scrollContainer.scrollTop - scrollContainer.clientHeight <= 10; userScrolledUpRef.current = !isAtBottom; }; scrollContainer?.addEventListener('scroll', handleScroll, { passive: true }); return () => { scrollContainer?.removeEventListener('scroll', handleScroll); }; }, []); if (!messages?.length) { return (
); } return (
    {messages?.map((message) => ( ))}
); };