import { AnimatePresence, motion } from 'framer-motion' import { Copy, X } from 'lucide-react' import { toast } from 'sonner' import { copyToClipboard, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from 'ui' import { type LogData } from '../Settings/Logs/Logs.types' import { buildLogsPrompt, formatLogsAsJson, formatLogsAsMarkdown, } from '../Settings/Logs/Logs.utils' import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' import { AiAssistantDropdown } from '@/components/ui/AiAssistantDropdown' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { useDataTable } from '@/components/ui/DataTable/providers/DataTableProvider' import { ShortcutBadge } from '@/components/ui/ShortcutBadge' import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state' import { SHORTCUT_IDS } from '@/state/shortcuts/registry' import { useShortcut } from '@/state/shortcuts/useShortcut' import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state' // TODO - format Logs as JSON, as markdown, and as prompt export const RowSelectionHeader = () => { const { openSidebar } = useSidebarManagerSnapshot() const aiSnap = useAiAssistantStateSnapshot() const { table } = useDataTable() const selectedRows = table.getSelectedRowModel().rows.map((x) => x.original) as LogData[] const handleOpenAiAssistant = () => { const prompt = buildLogsPrompt(selectedRows) openSidebar(SIDEBAR_KEYS.AI_ASSISTANT) aiSnap.newChat({ initialMessage: prompt }) } const onCopy = (format: 'json' | 'markdown') => { const text = format === 'json' ? formatLogsAsJson(selectedRows) : formatLogsAsMarkdown(selectedRows) copyToClipboard(text, () => { toast.success( `Copied ${selectedRows.length} log${selectedRows.length !== 1 ? 's' : ''} as ${format === 'json' ? format.toUpperCase() : format}` ) }) } const hasSelection = selectedRows.length > 0 useShortcut(SHORTCUT_IDS.RESULTS_COPY_JSON, () => onCopy('json'), { enabled: hasSelection, registerInCommandMenu: true, }) useShortcut(SHORTCUT_IDS.RESULTS_COPY_MARKDOWN, () => onCopy('markdown'), { enabled: hasSelection, registerInCommandMenu: true, }) return (
{selectedRows.length > 0 && (

{selectedRows.length} row{selectedRows.length > 1 ? 's' : ''} selected

} className="w-7" tooltip={{ content: { side: 'bottom', text: 'Copy selected logs' } }} /> onCopy('json')} className="gap-2 text-xs"> Copy as JSON onCopy('markdown')} className="gap-2 text-xs"> Copy as Markdown buildLogsPrompt(selectedRows)} onOpenAssistant={handleOpenAiAssistant} telemetrySource="log_explorer" /> } className="px-1" onClick={() => table.resetRowSelection()} tooltip={{ content: { side: 'bottom', text: 'Clear selection' } }} />
)}
) }