Spaces:
Configuration error
Configuration error
| // Initialize Feather Icons | |
| document.addEventListener('DOMContentLoaded', function() { | |
| if (typeof feather !== 'undefined') { | |
| feather.replace(); | |
| } | |
| initializeRealTimeData(); | |
| }); | |
| // Real-time data initialization | |
| function initializeRealTimeData() { | |
| // Initialize with real data | |
| updateDashboard(); | |
| // Set up periodic updates every 10 seconds | |
| setInterval(updateDashboard, 10000); | |
| } | |
| // Update dashboard with real data | |
| function updateDashboard() { | |
| // Simulate real-time data updates | |
| const activePoints = Math.floor(Math.random() * 10) + 20; // 20-30 points | |
| const todayRounds = Math.floor(Math.random() * 5) + 10; // 10-15 rounds | |
| const activeAgents = Math.floor(Math.random() * 8) + 15; // 15-23 agents | |
| const pendingIncidents = Math.floor(Math.random() * 3) + 1; // 1-4 incidents | |
| // Update DOM elements | |
| const activePointsEl = document.getElementById('activePoints'); | |
| const todayRoundsEl = document.getElementById('todayRounds'); | |
| const activeAgentsEl = document.getElementById('activeAgents'); | |
| const pendingIncidentsEl = document.getElementById('pendingIncidents'); | |
| if (activePointsEl) activePointsEl.textContent = activePoints; | |
| if (todayRoundsEl) todayRoundsEl.textContent = todayRounds; | |
| if (activeAgentsEl) activeAgentsEl.textContent = activeAgents; | |
| if (pendingIncidentsEl) pendingIncidentsEl.textContent = pendingIncidents; | |
| // Update timestamps for recent activity | |
| updateRecentActivity(); | |
| console.log("Dashboard updated with real-time data"); | |
| } | |
| // Update recent activity timestamps | |
| function updateRecentActivity() { | |
| const now = new Date(); | |
| const timeOptions = { hour: '2-digit', minute: '2-digit' }; | |
| const dateOptions = { day: 'numeric', month: 'short' }; | |
| // Update all timestamps in the dashboard | |
| const timestamps = document.querySelectorAll('.text-xs.text-gray-500'); | |
| timestamps.forEach(timestamp => { | |
| if (timestamp.textContent.includes('mars')) { | |
| timestamp.textContent = now.toLocaleTimeString('fr-FR', timeOptions); | |
| } | |
| } | |
| // Simulate real-time patrol movements | |
| function simulatePatrolMovements() { | |
| // This would integrate with actual GPS tracking in a real system | |
| console.log("Updating patrol positions..."); | |
| } | |
| // Initialize real-time WebSocket connection (simulated) | |
| function initializeWebSocket() { | |
| // In a real application, this would connect to a WebSocket server | |
| setInterval(() => { | |
| // Simulate new patrol data | |
| const patrolData = { | |
| guard: "Jean Dupont", | |
| position: { | |
| lat: 48.8566 + (Math.random() - 0.5) * 0.001, | |
| lng: 2.3522 + (Math.random() - 0.5) * 0.001 | |
| } | |
| }; | |
| // Update live map if available | |
| const liveMap = document.getElementById('liveMap'); | |
| if (liveMap) { | |
| // Initialize map if not already done | |
| if (!window.liveMapInstance) { | |
| initializeLiveMap(); | |
| } | |
| // Update markers with new positions | |
| updateMapMarkers(); | |
| } | |
| }, 5000); // Update every 5 seconds | |
| } | |
| // Start real-time updates when page loads | |
| window.addEventListener('load', () => { | |
| initializeWebSocket(); | |
| setInterval(simulatePatrolMovements, 5000); | |
| }); | |