import React, { useState, useEffect } from 'react'; const ANALYTICS_API_BASE = 'http://localhost:3001/api/analytics'; const AnalyticsDashboard = () => { const [kpis, setKpis] = useState(null); const [employees, setEmployees] = useState([]); const [customers, setCustomers] = useState([]); const [materials, setMaterials] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [activeTab, setActiveTab] = useState('overview'); // Fetch analytics data useEffect(() => { const fetchAnalyticsData = async () => { try { setLoading(true); const [kpisRes, employeesRes, customersRes, materialsRes] = await Promise.all([ fetch(`${ANALYTICS_API_BASE}/kpis`), fetch(`${ANALYTICS_API_BASE}/employees`), fetch(`${ANALYTICS_API_BASE}/customers?top=10`), fetch(`${ANALYTICS_API_BASE}/materials`) ]); const [kpisData, employeesData, customersData, materialsData] = await Promise.all([ kpisRes.json(), employeesRes.json(), customersRes.json(), materialsRes.json() ]); setKpis(kpisData.data); setEmployees(employeesData.data?.slice(0, 10) || []); setCustomers(customersData.data || []); setMaterials(materialsData.data?.slice(0, 8) || []); } catch (err) { setError(err.message); console.error('Analytics fetch error:', err); } finally { setLoading(false); } }; fetchAnalyticsData(); }, []); const formatCurrency = (amount) => { if (!amount) return '0 kr'; if (amount >= 1000000) { return `${(amount / 1000000).toFixed(1)}M kr`; } else if (amount >= 1000) { return `${(amount / 1000).toFixed(0)}k kr`; } return `${amount.toLocaleString()} kr`; }; const formatNumber = (num) => { if (!num) return '0'; return num.toLocaleString(); }; if (loading) { return (
{title}
{value}
| {col.label} | ))}
|---|
| {col.format ? col.format(item[col.key]) : item[col.key]} | ))}