'use client' import { useTranslations } from 'next-intl' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@nextsparkjs/core/components/ui/table' import type { Trace } from '../../types/observability.types' import { TraceStatusBadge } from './TraceStatusBadge' interface TracesTableProps { traces: Trace[] onSelect: (traceId: string) => void className?: string } export function TracesTable({ traces, onSelect, className = '' }: TracesTableProps) { const t = useTranslations('observability') const formatDuration = (ms?: number) => { if (!ms) return '-' if (ms < 1000) return `${ms}ms` return `${(ms / 1000).toFixed(2)}s` } const formatTokens = (tokens: number) => { if (tokens === 0) return '-' return tokens.toLocaleString() } const truncateTraceId = (traceId: string) => { return `${traceId.substring(0, 8)}...${traceId.substring(traceId.length - 4)}` } const truncateInput = (input: string, maxLength = 60) => { if (!input) return '-' if (input.length <= maxLength) return input return `${input.substring(0, maxLength)}...` } if (traces.length === 0) { return (
{t('table.empty')}