/** * Koha Transparency Dashboard * Real-time donation metrics with privacy-preserving analytics */ // Chart instances (global for updates) let allocationChart = null; let trendChart = null; /** * Load and display transparency metrics */ async function loadMetrics() { try { const response = await fetch('/api/koha/transparency'); const data = await response.json(); if (data.success && data.data) { const metrics = data.data; // Update stats updateStats(metrics); // Update allocation chart updateAllocationChart(metrics); // Update progress bars (legacy display) animateProgressBars(); // Display recent donors displayRecentDonors(metrics.recent_donors || []); // Update last updated time updateLastUpdated(metrics.last_updated); } else { throw new Error('Failed to load metrics'); } } catch (error) { console.error('Error loading transparency metrics:', error); document.getElementById('recent-donors').innerHTML = `