import { useEffect, useRef } from 'react'; import type { ChatMessage } from '../../shared/chat'; type MessageListProps = { currentNickname: string; currentUserId: string | null; messages: ChatMessage[]; }; function formatTime(value: string) { return new Intl.DateTimeFormat('zh-CN', { hour: '2-digit', minute: '2-digit', }).format(new Date(value)); } function isStickerMessage(text: string) { return text.length <= 4 && /\p{Extended_Pictographic}/u.test(text); } export default function MessageList({ currentNickname, currentUserId, messages, }: MessageListProps) { const endRef = useRef(null); useEffect(() => { endRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [messages]); if (messages.length === 0) { return (
聊天室已准备好 发送第一条消息,其他在线成员会立即看到。
); } return (
{messages.map((message) => { if (message.kind === 'system') { return (
{message.text}
); } const isMine = message.userId === currentUserId || message.nickname === currentNickname; const isSticker = isStickerMessage(message.text); return (
{message.nickname} {formatTime(message.createdAt)}

{message.text}

); })}
); }