'use client'; import { ColorSquare } from '@/components/color-square'; import { fancyMinutes, useNumber } from '@/hooks/useNumerFormatter'; import type { IChartData } from '@/trpc/client'; import { cn } from '@/utils/cn'; import AutoSizer from 'react-virtualized-auto-sizer'; import { Area, AreaChart } from 'recharts'; import type { IChartMetric } from '@openpanel/validation'; import { getDiffIndicator, PreviousDiffIndicatorText, } from '../PreviousDiffIndicator'; import { useChartContext } from './ChartProvider'; interface MetricCardProps { serie: IChartData['series'][number]; color?: string; metric: IChartMetric; unit?: string; } export function MetricCard({ serie, color: _color, metric, unit, }: MetricCardProps) { const { previousIndicatorInverted } = useChartContext(); const number = useNumber(); const renderValue = (value: number, unitClassName?: string) => { if (unit === 'min') { return <>{fancyMinutes(value)}; } return ( <> {number.short(value)} {unit && {unit}} ); }; const previous = serie.metrics.previous[metric]; const graphColors = getDiffIndicator( previousIndicatorInverted, previous?.state, 'green', 'red', 'blue' ); return (
{({ width, height }) => ( )}
{serie.event.id} {serie.name || serie.event.displayName || serie.event.name}
{/* */}
{renderValue(serie.metrics[metric], 'ml-1 font-light text-xl')}
); } export function MetricCardEmpty() { return (
No data
); } export function MetricCardLoading() { return (
); }