/** * MicrodaoListPage Component * Phase 7: List of user's microDAOs */ import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useMicrodaos } from './hooks/useMicrodaos'; import { createMicrodao, type MicrodaoCreate } from '@/api/microdao'; import { MicrodaoBrandBadge } from './components/MicrodaoBrandBadge'; export function MicrodaoListPage() { const navigate = useNavigate(); const { microdaos, loading, error, refetch } = useMicrodaos(); const [createDialogOpen, setCreateDialogOpen] = useState(false); const [creating, setCreating] = useState(false); const [createError, setCreateError] = useState(null); const [newName, setNewName] = useState(''); const [newSlug, setNewSlug] = useState(''); const [newDescription, setNewDescription] = useState(''); const handleCreate = async (e: React.FormEvent) => { e.preventDefault(); try { setCreating(true); setCreateError(null); const data: MicrodaoCreate = { name: newName, slug: newSlug, description: newDescription || undefined, }; const microdao = await createMicrodao(data); // Success setCreateDialogOpen(false); setNewName(''); setNewSlug(''); setNewDescription(''); refetch(); // Navigate to new microDAO navigate(`/microdao/${microdao.slug}`); } catch (err) { console.error('Failed to create microDAO:', err); setCreateError((err as Error).message); } finally { setCreating(false); } }; return (
{/* Header */}

🏛️ Мої microDAO

Керуйте вашими спільнотами та організаціями

{/* Content */}
{/* Loading */} {loading && (
Завантаження...
)} {/* Error */} {error && (
❌ Помилка завантаження
{error.message}
)} {/* Empty */} {!loading && !error && microdaos.length === 0 && (
🏛️

Немає microDAO

Створіть ваше перше microDAO

)} {/* List */} {!loading && microdaos.length > 0 && (
{microdaos.map((dao) => (
navigate(`/microdao/${dao.slug}`)} className="bg-white border border-gray-200 rounded-lg overflow-hidden hover:shadow-lg hover:border-blue-500 transition-all cursor-pointer group relative" > {/* Banner Background */} {dao.banner_url && (
)}

{dao.name}

@{dao.slug}

{dao.description && (

{dao.description}

)}
👥 {dao.member_count || 0}
🤖 {dao.agent_count || 0}
))}
)}
{/* Create Dialog */} {createDialogOpen && (

Створити microDAO

{createError && (
{createError}
)}
setNewName(e.target.value)} required placeholder="DAARION Core" className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" />
setNewSlug(e.target.value.toLowerCase().replace(/[^a-z0-9-]/g, ''))} required placeholder="daarion-core" className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" />