import Avatar from "@siteground/styleguide/lib/components/avatar/avatar"; import cn from "@siteground/styleguide/lib/utils/classnames"; import { Flex } from "@siteground/styleguide"; import { FC, useRef } from "react"; import { MarkdownParser } from "../../markdown-parser/mardown-parser"; import { useAppSelector } from "@/store/hooks"; import { MessageSegment } from "@/chat/types/message-segments"; import TypingIndicator from "../typing-indicator/typing-indicator"; import { PowerModeNotice } from "../power-mode-notice/power-mode-notice"; import ErrorMessage from "./error-message"; import QuickActions from "../quick-actions/quick-actions"; interface Props { messageSegments: MessageSegment[]; isTyping: boolean; errorOccured: boolean; showAvatar?: boolean; actionRequest?: { actionRequired: "super_power"; toolCall: { id: string; name: string; args: unknown; }; isResolved?: boolean; }; messageId?: string; } const BotMessage: FC = ({ messageSegments, isTyping, errorOccured, showAvatar, actionRequest, messageId }) => { const domRef = useRef(null); const config = useAppSelector((state) => state.app.config); const { threadId } = useAppSelector((state) => state.messages); const avatarIcon = config.assetsPath + "/images/wp-agent-logo.png"; const classes = cn("wp-ai-studio-bot-message", "wp-ai-studio-message-vertical-align-bot"); return (
{showAvatar && (
)} {messageSegments.map((segment, index) => { if (segment.type === "text") { return (
{segment.content}
); } if (segment.type === "quick-actions" && segment.content?.categories && !threadId) { return ( ); } return null; })} {isTyping && } {errorOccured && } {actionRequest && actionRequest.actionRequired === "super_power" && messageId && ( )}
); }; export default BotMessage;