import { useState, useEffect } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { Save, Loader2, Mail } from 'lucide-react'; import { supabase } from '@/lib/supabaseClient'; import { Button } from '@/components/ui/button'; import { Textarea } from '@/components/ui/textarea'; import { Label } from '@/components/ui/label'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card'; import { AdminLayout } from '@/components/layout/AdminLayout'; import { useUserRole } from '@/hooks/useUserRole'; import { handleError, handleSuccess } from '@/lib/errorHandler'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { useDocumentTitle } from '@/hooks/useDocumentTitle'; export default function AdminEmailSettings() { useDocumentTitle('Email Settings - Admin'); const queryClient = useQueryClient(); const { isSuperuser, loading: rolesLoading } = useUserRole(); const [signature, setSignature] = useState(''); // Fetch email signature const { data: signatureSetting, isLoading } = useQuery({ queryKey: ['admin-email-signature'], queryFn: async () => { const { data, error } = await supabase .from('admin_settings') .select('setting_value') .eq('setting_key', 'email.signature') .single(); if (error && error.code !== 'PGRST116') { // PGRST116 = no rows returned throw error; } // Type guard for the setting value const settingValue = data?.setting_value as { signature?: string } | null; return settingValue?.signature || ''; }, }); useEffect(() => { if (signatureSetting !== undefined) { setSignature(signatureSetting); } }, [signatureSetting]); // Update email signature mutation const updateSignatureMutation = useMutation({ mutationFn: async (newSignature: string) => { const { data: existing } = await supabase .from('admin_settings') .select('id') .eq('setting_key', 'email.signature') .single(); if (existing) { // Update existing const { error } = await supabase .from('admin_settings') .update({ setting_value: { signature: newSignature }, updated_at: new Date().toISOString(), }) .eq('setting_key', 'email.signature'); if (error) throw error; } else { // Insert new const { error } = await supabase .from('admin_settings') .insert({ setting_key: 'email.signature', setting_value: { signature: newSignature }, category: 'email', description: 'Email signature automatically appended to all contact submission replies', }); if (error) throw error; } }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin-email-signature'] }); handleSuccess('Saved', 'Email signature has been updated successfully'); }, onError: (error) => { handleError(error, { action: 'update_email_signature' }); }, }); const handleSave = () => { updateSignatureMutation.mutate(signature); }; // Show loading state while roles are being fetched if (rolesLoading) { return (
); } // Superuser-only access check if (!isSuperuser()) { return (

Access Denied

Email settings can only be managed by superusers.

); } return (

Email Settings

Configure automatic email signature for contact submission replies

Email Signature This signature will be automatically appended to all email replies sent to users from the Contact Submissions page. The signature will be added after a separator line. Preview: The signature will appear as:
[Your reply message] {'\n\n'}--- {'\n'}[Admin Display Name] {signature ? `\n${signature}` : '\n[No signature set]'}