import React, { useState, useEffect } from 'react'; import { Organization } from '../types'; import { Icons } from '../components/IconSet'; import { dbService } from '../services/DatabaseService'; interface CitiesProps { onSelectCity: (id: string) => void; } const CityCard = ({ city, onClick }: { city: Organization; onClick: () => void }) => (
{/* Background Image */}
{city.name}
{/* Content */}
{city.establishedYear || 'Unbekannte Ära'}

{city.name}

{city.description}

{city.memberCount} Bürger
{city.status}
); const Cities: React.FC = ({ onSelectCity }) => { const [cities, setCities] = useState([]); const [citiesWithStats, setCitiesWithStats] = 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); }; const loadCities = () => { // Get all organizations from database const allOrgs = dbService.getOrgs(); const cityOrgs = allOrgs.filter(org => org.type === 'City'); // Calculate dynamic stats for each city const citiesStats = cityOrgs.map(city => { // Count citizens (players with this organizationId) const allPlayers = dbService.getPlayers(); const citizenCount = allPlayers.filter(player => player.organizationId === city.id ).length; // Count businesses/projects in this city const allProjects = dbService.getProjects(); const businessCount = allProjects.filter(project => project.associatedOrgId === city.id ).length; return { ...city, memberCount: citizenCount, businessCount: businessCount, // Override static memberCount with dynamic count stats: { citizens: citizenCount, businesses: businessCount, ...city.cityStats } }; }); setCities(cityOrgs); setCitiesWithStats(citiesStats); }; // Load fresh data on mount loadData(); // Subscribe to updates const unsub = dbService.subscribe(loadCities); return unsub; }, []); return (

Große Siedlungen

Entdecke die blühenden Zentren der Zivilisation im Obsidian-Tal.

{loading ? (
) : ( <>
{citiesWithStats.map(city => (
onSelectCity(city.id)} />
))}
{citiesWithStats.length === 0 && (

Noch keine Städte gegründet.

)} )}
); }; export default Cities;