"use client"; import React, { useState, useEffect, useTransition } from 'react'; import { Save, Globe, Mail, Phone, MapPin, Share2, Link as LinkIcon, Loader2, Newspaper, Briefcase } from 'lucide-react'; import { getSiteSettings, updateSiteSettings } from '@/app/actions/settings'; import { toast } from 'react-hot-toast'; import { getBlogPosts } from '@/app/actions/blog'; import RichTextEditor from '@/components/RichTextEditor'; const BUSINESS_CATEGORIES = [ "Technologie & IT", "Agriculture & Agrobusiness", "Mode & Textile", "Cosmétique & Beauté", "Services aux entreprises", "Restauration & Alimentation", "Construction & BTP", "Éducation & Formation", "Santé & Bien-être", "Artisanat & Déco", "Tourisme & Loisirs", "Finance & Assurance", "Immobilier", "Transport & Logistique", "Média & Communication", "Autre" ]; const BLOG_CATEGORIES = [ "Actualité", "Conseils", "Success Story", "Événement", "Formation" ]; export default function SettingsPage({ searchParams }: { searchParams: Promise<{ tab?: string }> }) { const [isPending, startTransition] = useTransition(); const [settings, setSettings] = useState(null); const [allPosts, setAllPosts] = useState([]); const [loading, setLoading] = useState(true); const [selectedPostIds, setSelectedPostIds] = useState([]); const [selectedHomeCategories, setSelectedHomeCategories] = useState([]); const [selectedBlogCategories, setSelectedBlogCategories] = useState([]); const [resetPasswordTemplate, setResetPasswordTemplate] = useState(''); const [verifyEmailTemplate, setVerifyEmailTemplate] = useState(''); // Use a state for the tab if we want it to be fully client-side reactive without full reload // But since the user wants it "like moderation center", I'll use URL search params const [currentTab, setCurrentTab] = useState('general'); useEffect(() => { async function loadData() { const [settingsData, postsData] = await Promise.all([ getSiteSettings(), getBlogPosts() ]); setSettings(settingsData); setAllPosts(postsData); setSelectedPostIds(settingsData?.homeBlogIds || []); setSelectedHomeCategories(settingsData?.homeCategories || []); setSelectedBlogCategories(settingsData?.homeBlogCategories || []); setResetPasswordTemplate(settingsData?.resetPasswordTemplate || ''); setVerifyEmailTemplate(settingsData?.verifyEmailTemplate || ''); setLoading(false); } loadData(); }, []); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const formData = new FormData(e.currentTarget); const data = { siteName: formData.get('siteName'), siteSlogan: formData.get('siteSlogan'), contactEmail: formData.get('contactEmail'), contactPhone: formData.get('contactPhone'), address: formData.get('address'), facebookUrl: formData.get('facebookUrl'), twitterUrl: formData.get('twitterUrl'), instagramUrl: formData.get('instagramUrl'), linkedinUrl: formData.get('linkedinUrl'), footerText: formData.get('footerText'), homeBlogShow: formData.get('homeBlogShow') === 'on', homeBlogTitle: formData.get('homeBlogTitle'), homeBlogSubtitle: formData.get('homeBlogSubtitle'), homeBlogCount: parseInt(formData.get('homeBlogCount') as string || '3'), homeBlogSelection: formData.get('homeBlogSelection'), homeBlogIds: selectedPostIds, homeBlogCategories: selectedBlogCategories, homeCategories: selectedHomeCategories, resetPasswordSubject: formData.get('resetPasswordSubject'), resetPasswordTemplate: resetPasswordTemplate, verifyEmailSubject: formData.get('verifyEmailSubject'), verifyEmailTemplate: verifyEmailTemplate, }; startTransition(async () => { const result = await updateSiteSettings(data); if (result.success) { toast.success("Paramètres mis à jour avec succès"); } else { toast.error("Erreur lors de la mise à jour"); } }); }; const togglePostId = (id: string) => { setSelectedPostIds(prev => prev.includes(id) ? prev.filter(i => i !== id) : [...prev, id] ); }; const toggleHomeCategory = (cat: string) => { setSelectedHomeCategories(prev => prev.includes(cat) ? prev.filter(c => c !== cat) : [...prev, cat] ); }; const toggleBlogCategory = (cat: string) => { setSelectedBlogCategories(prev => prev.includes(cat) ? prev.filter(c => c !== cat) : [...prev, cat] ); }; if (loading) { return (
); } return (

Configuration du Site

Gérez les informations globales, les sections de l'accueil et les modèles d'emails.

{/* Tabs Switcher */}
{currentTab === 'general' && (
{/* Section Générale */}

Informations Générales

{/* Section Page d'Accueil - Secteurs */}

Secteurs en Vedette (Home)

Sélectionnez les secteurs d'activité à afficher sur la page d'accueil.

{BUSINESS_CATEGORIES.map(cat => ( ))}
{/* Section Page d'Accueil - Blog */}

Section Blog sur l'Accueil

{/* Manual Selection UI */}
{allPosts.map(post => ( ))}
{/* Category Selection UI */}
{BLOG_CATEGORIES.map(cat => ( ))}
{/* Section Contact */}

Coordonnées de Contact

{/* Section Réseaux Sociaux */}

Réseaux Sociaux

)} {currentTab === 'emails' && (
{/* Section Mail */}

Gestion des Emails

{/* Password Reset */}

Réinitialisation de mot de passe

Variables : {"{name}"}, {"{resetUrl}"}, {"{siteName}"}

{/* Account Verification */}

Vérification de compte

Variables : {"{name}"}, {"{verifyUrl}"}, {"{siteName}"}

)}
); }