/** * This file is part of the NocoBase (R) project. * Copyright (c) 2020-2024 NocoBase Co., Ltd. * Authors: NocoBase Team. * * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. * For more information, please refer to: https://www.nocobase.com/agreement. */ import React, { memo, useEffect, useRef } from 'react'; import { Bubble } from '@ant-design/x'; import { useChatBoxContext } from './ChatBoxContext'; import emptyIcon from '../empty-icon.svg'; import { Spin, Layout } from 'antd'; import { useChatMessages } from './ChatMessagesProvider'; export const Messages: React.FC = () => { const { messages, messagesService, lastMessageRef } = useChatMessages(); const roles = useChatBoxContext('roles'); const containerRef = useRef(null); useEffect(() => { if (!containerRef.current) return; const container = containerRef.current; const resizeObserver = new ResizeObserver(() => { container.scrollTop = container.scrollHeight; }); resizeObserver.observe(container); return () => resizeObserver.disconnect(); }, [messages]); return ( {messagesService.loading && ( )} {messages?.length ? (
{messages.map((msg, index) => { const role = roles[msg.role]; if (!role) { return null; } return index === 0 && msg.content?.type !== 'greeting' ? (
) : ( ); })}
) : (
)}
); };