import ChatFallbackError from '@/features/chat/components/chat-fallback-error' import InfiniteScroll from '@/features/chat/components/infinite-scroll' import MessageInput from '@/features/chat/components/message-input' import { useChatContext } from '@/features/chat/context/chat-context' import OLBadge from '@/features/ui/components/ol/ol-badge' import { FetchError } from '@/infrastructure/fetch-json' import { FullSizeLoadingSpinner } from '@/shared/components/loading-spinner' import MaterialIcon from '@/shared/components/material-icon' import { useUserContext } from '@/shared/context/user-context' import { lazy, Suspense, useEffect } from 'react' import { useTranslation } from 'react-i18next' import classNames from 'classnames' import { RailPanelHeader } from '../rail' const MessageList = lazy(() => import('../../../chat/components/message-list')) export const ChatIndicator = () => { const { unreadMessageCount } = useChatContext() if (unreadMessageCount === 0) { return null } return {unreadMessageCount} } const Loading = () => export const ChatPane = () => { const { t } = useTranslation() const user = useUserContext() const { status, messages, initialMessagesLoaded, atEnd, loadInitialMessages, loadMoreMessages, reset, sendMessage, markMessagesAsRead, error, } = useChatContext() useEffect(() => { if (!initialMessagesLoaded) { loadInitialMessages() } }, [loadInitialMessages, initialMessagesLoaded]) const shouldDisplayPlaceholder = status !== 'pending' && messages.length === 0 const messageContentCount = messages.reduce( (acc, { contents }) => acc + contents.length, 0 ) if (error) { // let user try recover from fetch errors if (error instanceof FetchError) { return } throw error } if (!user) { return null } return (
) } function Placeholder() { const { t } = useTranslation() return (
{t('no_messages_yet')}
{t('start_the_conversation_by_saying_hello_or_sharing_an_update')}
) }