import { Line } from 'react-chartjs-2' import { Chart as ChartJS, CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip as ChartTooltip, Legend, TimeScale, } from 'chart.js' import 'chartjs-adapter-moment' import { MonitorState, MonitorTarget } from '@/uptime.types' import { iataToCountry } from '@/util/iata' ChartJS.register( CategoryScale, LinearScale, PointElement, LineElement, Title, ChartTooltip, Legend, TimeScale ) export default function DetailChart({ monitor, state, }: { monitor: MonitorTarget state: MonitorState }) { const latencyData = state.latency[monitor.id].recent.map((point) => ({ x: point.time * 1000, y: point.ping, loc: point.loc, })) let data = { datasets: [ { data: latencyData, borderColor: 'rgb(112, 119, 140)', borderWidth: 2, radius: 0, cubicInterpolationMode: 'monotone' as const, tension: 0.4, }, ], } let options = { responsive: true, maintainAspectRatio: false, interaction: { mode: 'index' as const, intersect: false, }, animation: { duration: 0, }, plugins: { tooltip: { callbacks: { label: (item: any) => { if (item.parsed.y) { return `${item.parsed.y}ms (${iataToCountry(item.raw.loc)})` } }, }, }, legend: { display: false, }, title: { display: true, text: 'Response times(ms)', align: 'start' as const, }, }, scales: { x: { type: 'time' as const, ticks: { source: 'auto' as const, maxRotation: 0, autoSkip: true, }, }, }, } return (