'use client' import { useRef, useState, useEffect } from 'react' import { useRouter } from 'next/navigation' import { createClient } from '@/lib/supabase/client' import SignatureEditor from '@/components/SignatureEditor' import SignaturePreview from '@/components/SignaturePreview' import StyleSelector from '@/components/StyleSelector' import BannerGenerator from '@/components/BannerGenerator' import { useSignatures, SavedSignature } from '@/hooks/useSignatures' import { colorThemes, SignatureStyle } from '@/lib/types' import { generateSignatureHTML, exportAsImage, copyHTMLToClipboard, downloadHTML } from '@/lib/export' import '@/styles/dashboard.scss' export default function DashboardPage() { const router = useRouter() const [user, setUser] = useState<{ email: string } | null>(null) const [copySuccess, setCopySuccess] = useState(false) const [exportLoading, setExportLoading] = useState(false) const [activeTab, setActiveTab] = useState<'editor' | 'style' | 'banner'>('editor') const signatureRef = useRef(null) const { signatures, currentSignature, currentId, loading, saving, updateSignature, createNewSignature, selectSignature, deleteSignature, } = useSignatures() useEffect(() => { const supabase = createClient() supabase.auth.getUser().then(({ data }) => { if (data.user) { setUser({ email: data.user.email || '' }) } else { router.push('/login') } }) }, [router]) const handleLogout = async () => { const supabase = createClient() await supabase.auth.signOut() router.push('/login') router.refresh() } const handleNewSignature = async () => { await createNewSignature() setActiveTab('editor') } const handleStyleChange = (style: SignatureStyle) => { updateSignature({ ...currentSignature, styleTemplate: style }) } const handleThemeChange = (themeIndex: number) => { const theme = colorThemes[themeIndex] updateSignature({ ...currentSignature, primaryColor: theme.primary, secondaryColor: theme.secondary, accentColor: theme.accent, }) } const handleBannerChange = (url: string) => { updateSignature({ ...currentSignature, bannerUrl: url }) } const handleBannerLinkChange = (link: string) => { updateSignature({ ...currentSignature, bannerLink: link }) } const handleCopyHTML = async () => { const html = generateSignatureHTML(currentSignature) try { await copyHTMLToClipboard(html) setCopySuccess(true) setTimeout(() => setCopySuccess(false), 2000) } catch (error) { console.error('Error copying HTML:', error) } } const handleDownloadHTML = () => { const html = generateSignatureHTML(currentSignature) const filename = `signature-${currentSignature.firstName || 'email'}-${currentSignature.lastName || ''}.html` downloadHTML(html, filename) } const handleExportImage = async () => { if (!signatureRef.current) return setExportLoading(true) try { await exportAsImage(signatureRef.current) } catch (error) { console.error('Error exporting image:', error) } finally { setExportLoading(false) } } const handleDeleteSignature = async (sig: SavedSignature, e: React.MouseEvent) => { e.stopPropagation() if (confirm(`Supprimer la signature de ${sig.firstName} ${sig.lastName} ?`)) { await deleteSignature(sig.id) } } if (loading) { return (

Chargement...

) } return (
{/* Header */}
Navier Signatures
{saving && Sauvegarde...} {user && {user.email}}
{/* Sidebar */} {/* Main content */}
{/* Tabs */}
{/* Editor Panel */}
{activeTab === 'editor' && ( )} {activeTab === 'style' && ( t.primary === currentSignature.primaryColor)} onStyleChange={handleStyleChange} onThemeChange={handleThemeChange} photoShape={currentSignature.photoShape} onPhotoShapeChange={(shape) => updateSignature({ ...currentSignature, photoShape: shape })} /> )} {activeTab === 'banner' && ( )}
{/* Preview Panel */}

Aperçu

Collez le HTML dans les paramètres de signature de votre client email.

) }