'use client'; import { useState, useEffect } from 'react'; import { Setting } from '@/types'; import { settingsService } from '@/lib/services'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Switch } from '@/components/ui/switch'; import { Label } from '@/components/ui/label'; import Navigation from '@/components/Navigation'; import AuthGuard from '@/components/AuthGuard'; import SmtpSettingsForm from '@/components/SmtpSettingsForm'; import { Settings, Monitor, Save, CheckCircle, Mail, FileText, Download } from 'lucide-react'; import { ExportAnonymizationSelect, AnonymizationLevel } from '@/components/ExportAnonymizationSelect'; export const dynamic = 'force-dynamic'; function SettingsPageContent() { const [settings, setSettings] = useState([]); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [saved, setSaved] = useState(false); const [randomizePropositions, setRandomizePropositions] = useState(false); const [proposePageMessage, setProposePageMessage] = useState(''); const [footerMessage, setFooterMessage] = useState(''); const [exportAnonymization, setExportAnonymization] = useState('full'); useEffect(() => { // Vérifier la configuration Supabase const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL; const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; // Si pas de configuration ou valeurs par défaut, rediriger vers setup if (!supabaseUrl || !supabaseAnonKey || supabaseUrl === 'https://placeholder.supabase.co' || supabaseAnonKey === 'your-anon-key') { console.log('🔧 Configuration Supabase manquante, redirection vers /setup'); window.location.href = '/setup'; return; } loadSettings(); }, []); const loadSettings = async () => { try { setLoading(true); const settingsData = await settingsService.getAll(); setSettings(settingsData); // Charger la valeur du paramètre d'ordre aléatoire const randomizeValue = await settingsService.getBooleanValue('randomize_propositions', false); setRandomizePropositions(randomizeValue); // Charger le message de la page de dépôt de propositions const messageValue = await settingsService.getStringValue('propose_page_message', 'Partagez votre vision et proposez des projets qui feront la différence dans votre collectif. Votre voix compte pour façonner l\'avenir de votre communauté.'); setProposePageMessage(messageValue); // Charger le message du bas de page const footerValue = await settingsService.getStringValue('footer_message', 'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL) et transparent pour tous'); setFooterMessage(footerValue); // Charger le niveau d'anonymisation des exports const anonymizationValue = await settingsService.getStringValue('export_anonymization', 'full') as AnonymizationLevel; setExportAnonymization(anonymizationValue); } catch (error) { console.error('Erreur lors du chargement des paramètres:', error); } finally { setLoading(false); } }; const handleRandomizeChange = async (checked: boolean) => { setRandomizePropositions(checked); }; const handleSave = async () => { try { setSaving(true); await settingsService.setBooleanValue('randomize_propositions', randomizePropositions); await settingsService.setStringValue('propose_page_message', proposePageMessage); await settingsService.setStringValue('footer_message', footerMessage); await settingsService.setStringValue('export_anonymization', exportAnonymization); setSaved(true); setTimeout(() => setSaved(false), 2000); } catch (error) { console.error('Erreur lors de la sauvegarde des paramètres:', error); } finally { setSaving(false); } }; if (loading) { return (

Chargement des paramètres...

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

Paramètres

Configurez les paramètres de l'application

{/* Settings Categories */}
{/* Affichage Category */}
Affichage Paramètres d'affichage de l'interface utilisateur
{/* Randomize Propositions Setting */}

Lorsque activé, les propositions seront affichées dans un ordre aléatoire pour chaque participant lors du vote.

{/* Textes Category */}
Textes Personnalisez les textes affichés dans l'application
{/* Propose Page Message Setting */}

Ce texte apparaît sous le titre de la campagne pour inviter les utilisateurs à déposer des propositions.