import React, { useRef, useEffect, useState } from 'react'; import { Line } from 'react-chartjs-2'; import ChartJS from 'chart.js/auto'; import zoomPlugin from 'chartjs-plugin-zoom'; ChartJS.register(zoomPlugin); interface EnergyLineChartProps { consumptionData: number[]; generationData: number[]; } const labels = [ '08:00', '08:30', '09:00', '09:30', '10:00', '10:30', '11:00', '11:30', '12:00', '12:30', '13:00', '13:30', '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00', ]; const EnergyLineChart = ({ consumptionData, generationData }: EnergyLineChartProps) => { const chartRef = useRef(null); const [startIndex, setStartIndex] = useState(0); const [endIndex, setEndIndex] = useState(labels.length - 1); useEffect(() => { if (typeof window !== 'undefined') { import('hammerjs'); } }, []); // Filter data arrays based on selected range const filteredConsumption = consumptionData.slice(startIndex, endIndex + 1); const filteredGeneration = generationData.slice(startIndex, endIndex + 1); const filteredLabels = labels.slice(startIndex, endIndex + 1); const allDataPoints = [...filteredConsumption, ...filteredGeneration]; const maxDataValue = allDataPoints.length > 0 ? Math.max(...allDataPoints) : 0; const yAxisSuggestedMax = maxDataValue * 1.15; const data = { labels: filteredLabels, datasets: [ { label: 'Consumption', data: filteredConsumption, borderColor: '#8884d8', tension: 0.4, fill: false, }, { label: 'Generation', data: filteredGeneration, borderColor: '#82ca9d', tension: 0.4, fill: false, }, ], }; const options = { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top' as const }, zoom: { zoom: { wheel: { enabled: true }, pinch: { enabled: true }, mode: 'x' as const, }, pan: { enabled: true, mode: 'x' as const }, }, tooltip: { enabled: true, mode: 'index' as const, intersect: false }, }, scales: { y: { beginAtZero: true, suggestedMax: yAxisSuggestedMax }, }, }; const handleResetZoom = () => { chartRef.current?.resetZoom(); }; return (

Energy Consumption & Generation

{/* Time range selectors */}
); }; export default EnergyLineChart;