// src/views/AgentChat/components/ChatArea/MessageRenderer.js
// 消息渲染器组件
import React from 'react';
import { motion } from 'framer-motion';
import {
Card,
CardBody,
Avatar,
Badge,
Spinner,
Tooltip,
IconButton,
HStack,
Flex,
Text,
Box,
} from '@chakra-ui/react';
import { Cpu, User, Copy, ThumbsUp, ThumbsDown, File } from 'lucide-react';
import { MessageTypes } from '../../constants/messageTypes';
import ExecutionStepsDisplay from './ExecutionStepsDisplay';
/**
* MessageRenderer - 消息渲染器组件
*
* @param {Object} props
* @param {Object} props.message - 消息对象
* @param {string} props.userAvatar - 用户头像 URL
* @returns {JSX.Element|null}
*/
const MessageRenderer = ({ message, userAvatar }) => {
switch (message.type) {
case MessageTypes.USER:
return (
{message.content}
{message.files && message.files.length > 0 && (
{message.files.map((file, idx) => (
{file.name}
))}
)}
}
size="sm"
bgGradient="linear(to-br, blue.500, purple.600)"
boxShadow="0 0 12px rgba(139, 92, 246, 0.4)"
/>
);
case MessageTypes.AGENT_THINKING:
return (
}
size="sm"
bgGradient="linear(to-br, purple.500, pink.500)"
boxShadow="0 0 12px rgba(236, 72, 153, 0.4)"
/>
{message.content}
);
case MessageTypes.AGENT_RESPONSE:
return (
}
size="sm"
bgGradient="linear(to-br, purple.500, pink.500)"
boxShadow="0 0 12px rgba(236, 72, 153, 0.4)"
/>
{message.content}
{message.stepResults && message.stepResults.length > 0 && (
)}
}
onClick={() => navigator.clipboard.writeText(message.content)}
bg="rgba(255, 255, 255, 0.05)"
color="gray.400"
_hover={{
color: 'white',
bg: 'rgba(255, 255, 255, 0.1)',
}}
/>
}
bg="rgba(255, 255, 255, 0.05)"
color="gray.400"
_hover={{
color: 'green.400',
bg: 'rgba(16, 185, 129, 0.1)',
boxShadow: '0 0 12px rgba(16, 185, 129, 0.3)',
}}
/>
}
bg="rgba(255, 255, 255, 0.05)"
color="gray.400"
_hover={{
color: 'red.400',
bg: 'rgba(239, 68, 68, 0.1)',
boxShadow: '0 0 12px rgba(239, 68, 68, 0.3)',
}}
/>
{new Date(message.timestamp).toLocaleTimeString('zh-CN', {
hour: '2-digit',
minute: '2-digit',
})}
);
case MessageTypes.ERROR:
return (
{message.content}
);
default:
return null;
}
};
export default MessageRenderer;