diff --git a/src/app/admin/campaigns/[id]/participants/page.tsx b/src/app/admin/campaigns/[id]/participants/page.tsx index 38c35ea..5fc52fc 100644 --- a/src/app/admin/campaigns/[id]/participants/page.tsx +++ b/src/app/admin/campaigns/[id]/participants/page.tsx @@ -13,11 +13,12 @@ import { Badge } from '@/components/ui/badge'; import { Avatar, AvatarFallback } from '@/components/ui/avatar'; import { Input } from '@/components/ui/input'; import Navigation from '@/components/Navigation'; +import AuthGuard from '@/components/AuthGuard'; import { Users, User, Calendar, Mail, Vote, Copy, Check } from 'lucide-react'; export const dynamic = 'force-dynamic'; -export default function CampaignParticipantsPage() { +function CampaignParticipantsPageContent() { const params = useParams(); const campaignId = params.id as string; const [campaign, setCampaign] = useState(null); @@ -369,3 +370,11 @@ export default function CampaignParticipantsPage() { ); } + +export default function CampaignParticipantsPage() { + return ( + + + + ); +} diff --git a/src/app/admin/campaigns/[id]/propositions/page.tsx b/src/app/admin/campaigns/[id]/propositions/page.tsx index 2f81d39..37bd16d 100644 --- a/src/app/admin/campaigns/[id]/propositions/page.tsx +++ b/src/app/admin/campaigns/[id]/propositions/page.tsx @@ -12,11 +12,12 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com import { Badge } from '@/components/ui/badge'; import { Avatar, AvatarFallback } from '@/components/ui/avatar'; import Navigation from '@/components/Navigation'; +import AuthGuard from '@/components/AuthGuard'; import { FileText, User, Calendar, Mail } from 'lucide-react'; export const dynamic = 'force-dynamic'; -export default function CampaignPropositionsPage() { +function CampaignPropositionsPageContent() { const params = useParams(); const campaignId = params.id as string; const [campaign, setCampaign] = useState(null); @@ -295,3 +296,11 @@ export default function CampaignPropositionsPage() { ); } + +export default function CampaignPropositionsPage() { + return ( + + + + ); +} diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index b43eb8b..07bca85 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -12,17 +12,19 @@ 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 } from 'lucide-react'; export const dynamic = 'force-dynamic'; -export default function AdminPage() { +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 [copiedCampaignId, setCopiedCampaignId] = useState(null); + const [searchTerm, setSearchTerm] = useState(''); useEffect(() => { loadCampaigns(); @@ -65,23 +67,39 @@ export default function AdminPage() { }; const getStatusBadge = (status: string) => { - const statusConfig = { - deposit: { label: 'Dépôt de propositions', variant: 'secondary' as const }, - voting: { label: 'En cours de vote', variant: 'default' as const }, - closed: { label: 'Terminée', variant: 'destructive' as const } - }; - const config = statusConfig[status as keyof typeof statusConfig]; - return {config.label}; + 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('€, ') + '€'; + 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 (
+
@@ -102,15 +120,12 @@ export default function AdminPage() {
-

- Administration -

-

- Gérez vos campagnes de budget participatif -

+

Administration

+

Gérez vos campagnes de budget participatif

@@ -122,11 +137,11 @@ export default function AdminPage() {

Total Campagnes

-

{campaigns.length}

-
-
- 📊 +

{stats.total}

+
+ +
@@ -136,12 +151,10 @@ export default function AdminPage() {

En cours

-

- {campaigns.filter(c => c.status === 'voting').length} -

+

{stats.voting}

- 🗳️ +
@@ -152,12 +165,10 @@ export default function AdminPage() {

Dépôt

-

- {campaigns.filter(c => c.status === 'deposit').length} -

+

{stats.deposit}

- 📝 +
@@ -168,39 +179,54 @@ export default function AdminPage() {

Terminées

-

- {campaigns.filter(c => c.status === 'closed').length} -

+

{stats.closed}

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

- Aucune campagne créée + {searchTerm ? 'Aucune campagne trouvée' : 'Aucune campagne'}

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

- + {!searchTerm && ( + + )}
) : (
- {campaigns.map((campaign) => ( + {filteredCampaigns.map((campaign) => (
@@ -209,9 +235,7 @@ export default function AdminPage() { {campaign.title} {getStatusBadge(campaign.status)}
- - {campaign.description} - + {campaign.description}
-
-
-
- - +
+

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

+
+ + +
+
)} {/* Action Buttons */}
@@ -313,30 +331,22 @@ export default function AdminPage() { )} {/* Modals */} - setShowCreateModal(false)} - onSuccess={handleCampaignCreated} - /> - + setShowCreateModal(false)} onSuccess={handleCampaignCreated} /> {selectedCampaign && ( - setShowEditModal(false)} - onSuccess={handleCampaignEdited} - campaign={selectedCampaign} - /> + setShowEditModal(false)} onSuccess={handleCampaignEdited} campaign={selectedCampaign} /> )} - {selectedCampaign && ( - setShowDeleteModal(false)} - onSuccess={handleCampaignDeleted} - campaign={selectedCampaign} - /> + setShowDeleteModal(false)} onSuccess={handleCampaignDeleted} campaign={selectedCampaign} /> )}
); } + +export default function AdminPage() { + return ( + + + + ); +} diff --git a/src/app/page.tsx b/src/app/page.tsx index f6cb258..874722f 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -22,7 +22,7 @@ export default function HomePage() {
+ + +
+ +
+ + + + +
+ ); + } + + return ( +
+ {/* Header avec bouton de déconnexion */} +
+
+
+
+ + Connecté en tant que : + + + {user.email} + +
+ +
+
+
+ + {/* Contenu protégé */} + {children} +
+ ); +}