'use client'; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { Campaign, CampaignWithStats } from '@/types'; import { campaignService } from '@/lib/services'; import CreateCampaignModal from '@/components/CreateCampaignModal'; import EditCampaignModal from '@/components/EditCampaignModal'; import DeleteCampaignModal from '@/components/DeleteCampaignModal'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Input } from '@/components/ui/input'; import { Progress } from '@/components/ui/progress'; import Navigation from '@/components/Navigation'; import AuthGuard from '@/components/AuthGuard'; import { FolderOpen, Users, FileText, CheckCircle, Clock, Plus, BarChart3 } from 'lucide-react'; export const dynamic = 'force-dynamic'; function AdminPageContent() { const [campaigns, setCampaigns] = useState([]); const [loading, setLoading] = useState(true); const [showCreateModal, setShowCreateModal] = useState(false); const [showEditModal, setShowEditModal] = useState(false); const [showDeleteModal, setShowDeleteModal] = useState(false); const [selectedCampaign, setSelectedCampaign] = useState(null); const [searchTerm, setSearchTerm] = useState(''); useEffect(() => { loadCampaigns(); }, []); const loadCampaigns = async () => { try { setLoading(true); const campaignsData = await campaignService.getAll(); const campaignsWithStats = await Promise.all( campaignsData.map(async (campaign) => { const stats = await campaignService.getStats(campaign.id); return { ...campaign, stats }; }) ); setCampaigns(campaignsWithStats); } catch (error) { console.error('Erreur lors du chargement des campagnes:', error); } finally { setLoading(false); } }; const handleCampaignCreated = () => { setShowCreateModal(false); loadCampaigns(); }; const handleCampaignEdited = () => { setShowEditModal(false); loadCampaigns(); }; const handleCampaignDeleted = () => { setShowDeleteModal(false); loadCampaigns(); }; const getStatusBadge = (status: string) => { switch (status) { case 'deposit': return Dépôt de propositions; case 'voting': return En cours de vote; case 'closed': return Terminée; default: return {status}; } }; const getSpendingTiersDisplay = (tiers: string) => { return tiers.split(',').map(tier => `${tier.trim()}€`).join(', '); }; const filteredCampaigns = campaigns.filter(campaign => campaign.title.toLowerCase().includes(searchTerm.toLowerCase()) || campaign.description.toLowerCase().includes(searchTerm.toLowerCase()) ); const stats = { total: campaigns.length, deposit: campaigns.filter(c => c.status === 'deposit').length, voting: campaigns.filter(c => c.status === 'voting').length, closed: campaigns.filter(c => c.status === 'closed').length, }; if (loading) { return (

Chargement des campagnes...

); } return (
{/* Header */}

Administration

Gérez vos campagnes de budget participatif

{/* Stats Overview */}

Total Campagnes

{stats.total}

En cours

{stats.voting}

Dépôt

{stats.deposit}

Terminées

{stats.closed}

{/* Search */}
setSearchTerm(e.target.value)} className="max-w-md" />
{/* Campaigns List */} {filteredCampaigns.length === 0 ? (

{searchTerm ? 'Aucune campagne trouvée' : 'Aucune campagne'}

{searchTerm ? 'Aucune campagne ne correspond à votre recherche.' : 'Commencez par créer votre première campagne de budget participatif.' }

{!searchTerm && ( )}
) : (
{filteredCampaigns.map((campaign) => (
{campaign.title} {getStatusBadge(campaign.status)}
{campaign.description}
{/*

Propositions

{campaign.stats.propositions}

Participants

{campaign.stats.participants}

Budget/participant

{campaign.budget_per_user}€

Paliers

{getSpendingTiersDisplay(campaign.spending_tiers)}

*/} {/* Public URL for deposit campaigns */} {campaign.status === 'deposit' && (

Lien public pour le dépôt de propositions :

)} {/* Action Buttons */}
{(campaign.status === 'voting' || campaign.status === 'closed') && ( )}
))}
)} {/* Modals */} setShowCreateModal(false)} onSuccess={handleCampaignCreated} /> {selectedCampaign && ( setShowEditModal(false)} onSuccess={handleCampaignEdited} campaign={selectedCampaign} /> )} {selectedCampaign && ( setShowDeleteModal(false)} onSuccess={handleCampaignDeleted} campaign={selectedCampaign} /> )}
); } export default function AdminPage() { return ( ); }