import React, { useState, useEffect } from 'react';
import { dbService } from '../services/DatabaseService';
import { Icons } from '../components/IconSet';
import { Player, Project, Organization } from '../types';
const StatCard = ({ label, value, trend, icon: Icon }: any) => (
{trend && (
0 ? 'bg-accentSuccess/10 text-accentSuccess' : 'bg-accentWarn/10 text-accentWarn'
}`}>
{trend > 0 ? '+' : ''}{trend}%
)}
{value}
{label}
);
const ProjectCard = ({ project }: { project: any }) => (
{project.title}
Inhaber: {project.owner}
{project.progress}%
);
const Dashboard: React.FC = () => {
const [players, setPlayers] = useState([]);
const [projects, setProjects] = useState([]);
const [orgs, setOrgs] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
const loadData = async () => {
setLoading(true);
try {
await dbService.fetchAll();
} catch (error) {
console.warn('Failed to fetch fresh data:', error);
// Continue with cached data
}
setLoading(false);
};
// Subscribe to database updates
const unsubscribe = dbService.subscribe(() => {
setPlayers(dbService.getPlayers());
setProjects(dbService.getProjects());
setOrgs(dbService.getOrgs());
});
// Load fresh data on mount
loadData();
return unsubscribe;
}, []);
const activeProjectsCount = projects.filter(p => p.status === 'active' || p.status === 'recruiting').length;
return (
{/* Intro Section */}
Live-Telemetrie
Tal-Übersicht
Echtzeit-Datenaggregation aus dem Zentralarchiv.
{/* KPI Grid */}
{/* Content Grid */}
{/* Projects List - Wider */}
Top Unternehmen
{loading ? (
) : (
projects.slice(0, 5).map(p => (
))
)}
{/* Decree / News - Narrower */}
Offizieller Erlass
{/* Decorative background element */}
NEU
VOR 12 MIN
"Im Auftrag des Bürgermeisters ist jeglicher Handel innerhalb der inneren Mauern für das kommende Fest steuerbefreit."
Bürger werden ermutigt, ihre Stände im Marktviertel aufzubauen, bevor der Mond am 14. Tag aufgeht.
#Wirtschaft
#Events
);
};
export default Dashboard;