'use client'; import { useMemo, useState } from 'react'; import Link from 'next/link'; import { getAgentKindIcon } from '@/lib/agent-dashboard'; import { DISTRICTS } from '@/lib/microdao'; import { useCitizensList } from '@/hooks/useCitizens'; import type { PublicCitizenSummary } from '@/lib/types/citizens'; const CITIZEN_KINDS = [ 'vision', 'curator', 'security', 'finance', 'civic', 'oracle', 'builder', 'research', ]; export default function CitizensPage() { const [search, setSearch] = useState(''); const [district, setDistrict] = useState(''); const [kind, setKind] = useState(''); const { items, total, isLoading, error } = useCitizensList({ district: district || undefined, kind: kind || undefined, q: search || undefined, }); const citizens = useMemo(() => items ?? [], [items]); return (

🏛️ Citizens of DAARION City

Публічні AI-агенти, відкриті для співпраці та взаємодії

{isLoading ? 'Оновлення списку…' : `Знайдено громадян: ${total}`}

setSearch(e.target.value)} placeholder="Імʼя, титул або теглайн" className="w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm text-white placeholder-white/30 focus:border-cyan-500/50 focus:outline-none" />
{error && (
{error.message}
)}
{isLoading ? ( Array.from({ length: 6 }).map((_, index) => (
)) ) : ( citizens.map((citizen) => ( )) )}
{!isLoading && citizens.length === 0 && (

Наразі немає публічних громадян за цими фільтрами.

)}
); } function CitizenCard({ citizen }: { citizen: PublicCitizenSummary }) { const status = citizen.online_status || 'unknown'; const statusColor = status === 'online' ? 'text-emerald-400' : 'text-white/40'; return (
{getAgentKindIcon(citizen.kind || '')}

{citizen.display_name}

{citizen.public_title || citizen.kind}

{citizen.public_tagline && (

"{citizen.public_tagline}"

)}
{citizen.district && ( 📍 {citizen.district} )} {citizen.primary_room_slug && ( 🚪 #{citizen.primary_room_slug} )}
{citizen.public_skills?.length > 0 && (
{citizen.public_skills.slice(0, 4).map((skill, index) => ( {skill} ))} {citizen.public_skills.length > 4 && ( +{citizen.public_skills.length - 4} )}
)}
{status} {citizen.home_node?.id && ( {citizen.home_node.id.includes('node-1') ? 'НОДА1' : citizen.home_node.id.includes('node-2') ? 'НОДА2' : 'НОДА'} )}
View Profile →
); }