RealtimeMessageColumnRenderer.tsx 1.4 KB

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