import { useMemo } from 'react'; import type { ReactNode } from 'react'; import { Card, theme } from 'antd'; import { Sparkline } from '@/components/viz'; import { mean, peak } from './useOverviewHistory'; interface VitalTileProps { icon: ReactNode; label: string; percent: number; statusColor: string; detail: string; footLeft: string; footRight: string; data: number[]; isMobile: boolean; } export default function VitalTile({ icon, label, percent, statusColor, detail, footLeft, footRight, data, isMobile, }: VitalTileProps) { const { token } = theme.useToken(); const meanColor = token.colorTextTertiary; const referenceLines = useMemo( () => (data.length > 1 ? [{ y: mean(data), dash: '3 4', color: meanColor }] : []), [data, meanColor], ); return (
{icon} {label}
{percent.toFixed(1)} %
{detail}
{footLeft} {footRight}
0 ? null : 100} stroke={statusColor} referenceLines={referenceLines} yFormatter={(v) => `${v.toFixed(0)}%`} name1={label} />
); }