UNPKG

@plteam/chat-ui

Version:

CUI Kit is a free and open-source library for creating AI assistant chat interfaces, built with React, Material UI, and TypeScript

21 lines (20 loc) 1.42 kB
import * as React from 'react'; import { useChatSlots } from '../core/ChatSlotsContext'; import { useGroupedMessages } from './hooks/useGroupedMessages'; import MessagesInGroup from './MessagesInGroup'; import { arrayPluckAndJoin } from '../../utils/arrayUtils/arrayPluckAndJoin'; import { useObserverValue } from '../hooks/useObserverValue'; import MessageComponentSkeleton from './MessageComponentSkeleton'; const MessagesList = ({ messages, thread, gap }) => { const { slots } = useChatSlots(); const groupedMessages = useGroupedMessages(messages); const isFullDataLoading = useObserverValue(thread.isLoadingFullData); return (React.createElement(React.Fragment, null, React.createElement(slots.firstMessage, { thread: thread }), groupedMessages.map((groupMessages, key) => (React.createElement(MessagesInGroup, { key: arrayPluckAndJoin(groupMessages, 'viewerUniqueKey', '-'), messages: groupMessages, gap: gap, isLatestGroup: key === groupedMessages.length - 1, thread: thread }))), !!isFullDataLoading && (React.createElement(MessageComponentSkeleton, { gap: gap })))); }; export default React.memo(MessagesList, (prevProps, nextProps) => { return prevProps.thread.viewerUniqueKey === nextProps.thread.viewerUniqueKey && arrayPluckAndJoin(prevProps.messages, 'viewerUniqueKey') === arrayPluckAndJoin(nextProps.messages, 'viewerUniqueKey'); });