import { useRecoilValue } from 'recoil'; import { useAuthContext, useMessageHelpers, useLocalize } from '~/hooks'; import type { TMessageProps } from '~/common'; import Icon from '~/components/Chat/Messages/MessageIcon'; import { Plugin } from '~/components/Messages/Content'; import MessageContent from './Content/MessageContent'; import SiblingSwitch from './SiblingSwitch'; // eslint-disable-next-line import/no-cycle import MultiMessage from './MultiMessage'; import HoverButtons from './HoverButtons'; import SubRow from './SubRow'; import { cn } from '~/utils'; import store from '~/store'; export default function Message(props: TMessageProps) { const UsernameDisplay = useRecoilValue(store.UsernameDisplay); const { user } = useAuthContext(); const localize = useLocalize(); const { ask, edit, index, isLast, enterEdit, handleScroll, conversation, isSubmitting, latestMessage, handleContinue, copyToClipboard, regenerateMessage, } = useMessageHelpers(props); const { message, siblingIdx, siblingCount, setSiblingIdx, currentEditId, setCurrentEditId } = props; if (!message) { return null; } const { text, children, messageId = null, isCreatedByUser, error, unfinished } = message ?? {}; let messageLabel = ''; if (isCreatedByUser) { messageLabel = UsernameDisplay ? user?.name || user?.username : localize('com_user_message'); } else { messageLabel = message.sender; } return ( <>
{messageLabel}
{/* Legacy Plugins */} {message?.plugin && } { return; }) } />
{isLast && isSubmitting ? null : ( regenerateMessage()} copyToClipboard={copyToClipboard} handleContinue={handleContinue} latestMessage={latestMessage} isLast={isLast} /> )}
); }