import { useEffect, useState } from "react"; import { MapContainer, TileLayer, Marker, Popup } from 'react-leaflet'; import 'leaflet/dist/leaflet.css'; import Chart from 'chart.js/auto'; function App() { const [data, setData] = useState({ geoData: [{ latitude: 45.4, longitude: -71.9, name: "Position 1" }], // Sherbrooke, Québec par défaut statsData: { labels: [], datasets: [] }, alerts: [] }); useEffect(() => { // Simulation de données en temps réel (à remplacer par une connexion réelle) const interval = setInterval(() => { setData(prevData => ({ ...prevData, geoData: prevData.geoData.map(point => ({ ...point, latitude: point.latitude + (Math.random() - 0.5) * 0.1, // Mouvement aléatoire sur la carte longitude: point.longitude + (Math.random() - 0.5) * 0.1 })), statsData: { labels: ["Red", "Blue", "Green"], datasets: [{ label: 'Dataset 1', data: [Math.random() * 100, Math.random() * 100, Math.random() * 100], backgroundColor: [ 'rgba(255, 99, 132, 0.2)', 'rgba(54, 162, 235, 0.2)', 'rgba(75, 192, 192, 0.2)' ], borderColor: [ 'rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(75, 192, 192, 1)' ], borderWidth: 1 }] }, alerts: [...prevData.alerts, `Alerte ${Math.floor(Math.random() * 100)}`] })); }, 2000); // Mettre à jour les données toutes les 2 secondes return () => clearInterval(interval); }, []); function updateMap(geoData) { return ( {geoData.map(point => ( {point.name} ))} ); } useEffect(() => { if (data.statsData.datasets.length > 0) { const ctx = document.getElementById('myChart').getContext('2d'); new Chart(ctx, { type: 'bar', data: data.statsData, }); } }, [data.statsData]); function updateAlerts(alerts) { return (

Alertes:

); } return (

Tableau de Bord Démonstrateur

{updateMap(data.geoData)} {updateAlerts(data.alerts)}
); } export default App;