import React, { useState, useMemo } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from './ui/card'; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, ReferenceDot, } from 'recharts'; import { calculateDifferences, calculateStats } from '../App.utility'; import { type IData, type PerformanceData } from '../App.interface'; import FallbackPage from './FallbackPage'; interface PerformanceVisualizationProps { startMarker: string; endMarker: string; data: IData[]; } const CustomTooltip: React.FC = ({ active, payload, label }) => { if (active && payload && payload.length) { const data = payload[0].payload; return (

Iteration {label}

Start Marker: {data.startMarker}

End Marker: {data.endMarker}

Duration: {data.duration.toFixed(2)} ms

); } return null; }; const PerformanceVisualization: React.FC = ({ startMarker, endMarker, data: rawData, }) => { const [selectedPoint, setSelectedPoint] = useState(null); const data: PerformanceData[] = calculateDifferences( rawData, startMarker, endMarker ); const { mean, standardDeviation, errorRate } = useMemo( () => calculateStats(data), [data] ); const handleClick = (point: any) => { if (point && point.activePayload && point.activePayload.length > 0) { const index = data.findIndex( (item) => item.iteration === point.activePayload[0].payload.iteration ); setSelectedPoint(index); } }; if (data.length === 0) { return ; } return (
Mean

{mean.toFixed(2)} ms

Standard Deviation

{standardDeviation} ms

Error Rate

{errorRate}%

Performance Graph
} /> {selectedPoint !== null && data[selectedPoint] && ( )}
Results for {startMarker} & {endMarker}
{data.map((item) => ( ))}
Iteration Start Marker End Marker Duration (ms)
{item.iteration} {item.startMarker} {item.endMarker} {item.duration.toFixed(2)}
); }; export default PerformanceVisualization;