import { fancyMinutes, useNumber } from '@/hooks/use-numer-formatter';
import type { IChartData } from '@/trpc/client';
import { cn } from '@/utils/cn';
import AutoSizer from 'react-virtualized-auto-sizer';
import { Area, AreaChart, Tooltip } from 'recharts';
import type { IChartMetric } from '@openpanel/validation';
import {
ChartTooltipContainer,
ChartTooltipHeader,
ChartTooltipItem,
} from '@/components/charts/chart-tooltip';
import { formatDate } from '@/utils/date';
import { getChartColor } from '@/utils/theme';
import {
PreviousDiffIndicator,
getDiffIndicator,
} from '../common/previous-diff-indicator';
import { SerieName } from '../common/serie-name';
import { useReportChartContext } from '../context';
interface MetricCardProps {
serie: IChartData['series'][number];
color?: string;
metric: IChartMetric;
unit?: string;
}
const TooltipContent = (props: { payload?: any[] }) => {
const number = useNumber();
return (
{props.payload?.map((item) => {
const { date, count } = item.payload;
return (
{formatDate(new Date(date))}
{number.format(count)}
);
})}
);
};
export function MetricCard({
serie,
color: _color,
metric,
unit,
}: MetricCardProps) {
const { isEditMode } = useReportChartContext();
const number = useNumber();
const renderValue = (value: number | undefined, unitClassName?: string) => {
if (!value) {
return
N/A
;
}
if (unit === 'min') {
return <>{fancyMinutes(value)}>;
}
return (
<>
{number.short(value)}
{unit && {unit}}
>
);
};
const previous = serie.metrics.previous?.[metric];
const graphColors = getDiffIndicator(
false,
previous?.state,
'#6ee7b7', // green
'#fda4af', // red
'#93c5fd', // blue
);
return (
{({ width, height }) => (
)}
}
value={renderValue(serie.metrics[metric], 'ml-1 font-light text-xl')}
enhancer={
}
/>
);
}
export function MetricCardNumber({
label,
value,
enhancer,
className,
}: {
label: React.ReactNode;
value: React.ReactNode;
enhancer?: React.ReactNode;
className?: string;
}) {
return (
);
}