import React, { useEffect } from 'react'; import { Chart, registerables } from 'chart.js'; import zoomPlugin from 'chartjs-plugin-zoom'; // Registra los módulos necesarios de Chart.js y el plugin de zoom Chart.register(...registerables, zoomPlugin); const Tablero = ({ labels, dataPoints }) => { useEffect(() => { // Verifica si el canvas está disponible const canvas = document.getElementById("myChart"); if (!canvas) { console.error("Canvas element not found"); return; } const ctx = canvas.getContext("2d"); // Verifica si el contexto es válido if (!ctx) { console.error("Failed to get canvas context"); return; } // Datos del gráfico const data = { labels: labels, datasets: [{ label: 'f(x)', borderColor: 'rgba(75, 192, 192, 1)', data: dataPoints, fill: false }] }; // Configuración del gráfico const myChart = new Chart(ctx, { type: 'line', data: data, options: { scales: { x: { title: { display: true, text: 'X' }, zoom: { enabled: true, mode: 'x', // Habilita el zoom en el eje X }, pan: { enabled: true, mode: 'x', // Habilita el desplazamiento en el eje X }, }, y: { title: { display: true, text: 'f(x)' }, zoom: { enabled: true, mode: 'y', // Habilita el zoom en el eje Y }, pan: { enabled: true, mode: 'y', // Habilita el desplazamiento en el eje Y }, } }, plugins: { zoom: { pan: { enabled: true, mode: 'xy', // Permite el desplazamiento en ambos ejes }, zoom: { enabled: true, mode: 'xy', // Permite el zoom en ambos ejes speed: 0.1, // Velocidad de zoom sensitivity: 3, // Sensibilidad del zoom threshold: 2, // Umbral de activación del zoom } } } } }); // Limpieza del gráfico cuando el componente se desmonte return () => myChart.destroy(); }, [labels, dataPoints]); return ; }; export default Tablero;