import * as React from 'react';
import { Box, Button, Checkbox, IconButton, ListItem, Sheet, Typography, useTheme } from '@mui/joy';
import ClearIcon from '@mui/icons-material/Clear';
import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';
import { DMessage } from '@/lib/stores/store-chats';
import { TokenBadge } from '@/components/util/TokenBadge';
import { makeAvatar, messageBackground } from '@/components/ChatMessage';
/**
* Header bar for controlling the operations during the Selection mode
*/
export const MessagesSelectionHeader = (props: { hasSelected: boolean, isBottom: boolean, onClose: () => void, onSelectAll: (selected: boolean) => void, onDeleteMessages: () => void }) =>
props.onSelectAll(event.target.checked)} sx={{ minWidth: 24, justifyContent: 'center' }} />
Select All
}>
Delete
;
/**
* Small representation of a ChatMessage, used when in selection mode
*
* Shall look similarly to the main ChatMessage, for consistency, but just allow a simple checkbox selection
*/
export function ChatMessageSelectable(props: { message: DMessage, isBottom: boolean, selected: boolean, onToggleSelected: (messageId: string, selected: boolean) => void }) {
// external state
const theme = useTheme();
const {
id: messageId,
text: messageText,
sender: messageSender,
avatar: messageAvatar,
typing: messageTyping,
role: messageRole,
purposeId: messagePurposeId,
// originLLM: messageModelId,
tokenCount: messageTokenCount,
updated: messageUpdated,
} = props.message;
const fromAssistant = messageRole === 'assistant';
const isAssistantError = fromAssistant && (messageText.startsWith('[Issue] ') || messageText.startsWith('[OpenAI Issue]'));
const background = messageBackground(theme, messageRole, !!messageUpdated, isAssistantError);
const avatarEl: JSX.Element | null = React.useMemo(() =>
makeAvatar(messageAvatar, messageRole, messagePurposeId, messageSender, messageTyping, 'sm'),
[messageAvatar, messagePurposeId, messageRole, messageSender, messageTyping],
);
const handleCheckedChange = (event: React.ChangeEvent) => props.onToggleSelected(messageId, event.target.checked);
return (
button': { opacity: 1 },
}}>
{avatarEl}
{messageRole}
{messageText}
);
}