RealtimeMessageColumnRenderer.tsx44 lines · main
1import { AlertTriangle } from 'lucide-react'
2import { Column } from 'react-data-grid'
3import { cn, IconBroadcast, IconDatabaseChanges, IconPresence } from 'ui'
4
5import type { LogData, PreviewLogData } from './Messages.types'
6import { RowLayout } from './MessagesFormatters'
7import { isErrorLog } from './MessagesTable'
8
9const ICONS = {
10 PRESENCE: <IconPresence size="xlarge" />,
11 BROADCAST: <IconBroadcast size="xlarge" />,
12 POSTGRES: <IconDatabaseChanges size="xlarge" />,
13 SYSTEM: <AlertTriangle size="20" strokeWidth={1} />,
14}
15
16export const ColumnRenderer: Column<LogData, unknown>[] = [
17 {
18 name: 'timestamp-with-truncated-text',
19 key: 'main-column',
20 renderHeaderCell: () => null,
21 renderCell: (data: { row: PreviewLogData }) => {
22 const type = data.row.message as keyof typeof ICONS
23
24 return (
25 <RowLayout>
26 <div
27 className={cn(
28 'flex justify-center items-center min-w-[24px]',
29 isErrorLog(data.row) ? 'text-warning' : 'text-green-900'
30 )}
31 >
32 {ICONS[type]}
33 </div>
34 <span className={cn('font-mono', isErrorLog(data.row) ? 'text-warning!' : '')}>
35 {new Date(data.row.timestamp).toISOString()}
36 </span>
37 <span className={cn('truncate font-mono', isErrorLog(data.row) ? 'text-warning!' : '')}>
38 {JSON.stringify(data.row.metadata)}
39 </span>
40 </RowLayout>
41 )
42 },
43 },
44]