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(() => {
// Subscribe to database updates
const unsubscribe = dbService.subscribe(() => {
setPlayers(dbService.getPlayers());
setProjects(dbService.getProjects());
setOrgs(dbService.getOrgs());
setLoading(false);
});
// Initial data load
setPlayers(dbService.getPlayers());
setProjects(dbService.getProjects());
setOrgs(dbService.getOrgs());
setLoading(false);
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;