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 (
Email settings can only be managed by superusers.
Configure automatic email signature for contact submission replies