import { useMemo } from "react"; import { Card, CardContent } from "@/components/ui/card"; import { Loader2, TrendingUp } from "lucide-react"; import { TimeRangeSelector } from "./charts/TimeRangeSelector"; import { useServerHistoryData } from "./charts/hooks/useServerHistoryData"; import { CPUChart } from "./charts/CPUChart"; import { MemoryChart } from "./charts/MemoryChart"; import { DiskChart } from "./charts/DiskChart"; import { NetworkChart } from "./charts/NetworkChart"; interface ServerHistoryChartsProps { serverId: string; } export const ServerHistoryCharts = ({ serverId }: ServerHistoryChartsProps) => { const { timeRange, setTimeRange, metrics, chartData, isLoading, error, isFetching } = useServerHistoryData(serverId); // console.log('ServerHistoryCharts: Rendering with serverId:', serverId, 'timeRange:', timeRange); // Memoize latest data calculation to prevent unnecessary recalculations const latestData = useMemo(() => { return chartData.length > 0 ? chartData[chartData.length - 1] : null; }, [chartData]); // Show skeleton loading state for better UX if (isLoading) { return (

Historical Performance

Loading...
{/* Skeleton loading cards */}
{[1, 2, 3, 4].map((index) => (
))}
); } if (error) { // console.error('ServerHistoryCharts: Error loading data:', error); return (

Historical Performance

{isFetching && }

Error loading chart data

{error?.message}

Server ID: {serverId} • Time Range: {timeRange}

); } if (chartData.length === 0) { return (

Historical Performance

{isFetching && }

No historical data available for {timeRange}

Raw metrics count: {metrics.length}

Server ID: {serverId} • Time Range: {timeRange}

{metrics.length > 0 ? 'Data exists but may be outside selected time range' : 'No metrics data found'}

); } // console.log('ServerHistoryCharts: Rendering charts with', chartData.length, 'data points for time range:', timeRange); return (

Historical Performance

({chartData.length} data points • {timeRange}) {isFetching && ( Updating... )}
{/* Improved responsive grid layout */}
); };