import { useState, useEffect } from 'react'; import { Plus, Edit, Trash2, Eye, EyeOff, BarChart3 } from 'lucide-react'; import Layout from '@/components/layout/Layout'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; import { Label } from '@/components/ui/label'; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Badge } from '@/components/ui/badge'; import { supabase } from '@/integrations/supabase/client'; import { useToast } from '@/hooks/use-toast'; interface FAQ { id: string; pergunta: string; resposta: string; imagem_url?: string; ativo: boolean; created_at: string; } const AdminFAQ = () => { const [faqs, setFaqs] = useState([]); const [loading, setLoading] = useState(true); const [showForm, setShowForm] = useState(false); const [editingFaq, setEditingFaq] = useState(null); const [showStats, setShowStats] = useState(false); const [stats, setStats] = useState({}); const { toast } = useToast(); const [formData, setFormData] = useState({ pergunta: '', resposta: '', imagem_url: '', ativo: true }); useEffect(() => { loadFAQs(); loadStats(); }, []); const loadFAQs = async () => { try { const { data, error } = await supabase .from('faqs') .select('*') .order('created_at', { ascending: false }); if (error) throw error; setFaqs(data || []); } catch (error) { console.error('Erro ao carregar FAQs:', error); toast({ title: "Erro", description: "Não foi possível carregar os FAQs.", variant: "destructive" }); } finally { setLoading(false); } }; const loadStats = async () => { try { const { data, error } = await supabase .from('faq_feedback') .select(` faq_id, helpful, faqs (pergunta) `); if (error) throw error; const statsData = data?.reduce((acc: any, feedback: any) => { const faqId = feedback.faq_id; if (!acc[faqId]) { acc[faqId] = { pergunta: feedback.faqs?.pergunta || 'FAQ não encontrado', helpful: 0, notHelpful: 0, total: 0 }; } if (feedback.helpful) { acc[faqId].helpful++; } else { acc[faqId].notHelpful++; } acc[faqId].total++; return acc; }, {}); setStats(statsData || {}); } catch (error) { console.error('Erro ao carregar estatísticas:', error); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!formData.pergunta || !formData.resposta) { toast({ title: "Erro", description: "Pergunta e resposta são obrigatórias.", variant: "destructive" }); return; } try { if (editingFaq) { const { error } = await supabase .from('faqs') .update(formData) .eq('id', editingFaq.id); if (error) throw error; toast({ title: "FAQ atualizado com sucesso!" }); } else { const { error } = await supabase .from('faqs') .insert(formData); if (error) throw error; toast({ title: "FAQ criado com sucesso!" }); } resetForm(); loadFAQs(); } catch (error) { console.error('Erro ao salvar FAQ:', error); toast({ title: "Erro", description: "Não foi possível salvar o FAQ.", variant: "destructive" }); } }; const handleEdit = (faq: FAQ) => { setEditingFaq(faq); setFormData({ pergunta: faq.pergunta, resposta: faq.resposta, imagem_url: faq.imagem_url || '', ativo: faq.ativo }); setShowForm(true); }; const handleDelete = async (id: string) => { if (!confirm('Tem certeza que deseja excluir este FAQ?')) return; try { const { error } = await supabase .from('faqs') .delete() .eq('id', id); if (error) throw error; toast({ title: "FAQ excluído com sucesso!" }); loadFAQs(); } catch (error) { console.error('Erro ao excluir FAQ:', error); toast({ title: "Erro", description: "Não foi possível excluir o FAQ.", variant: "destructive" }); } }; const handleToggleActive = async (id: string, ativo: boolean) => { try { const { error } = await supabase .from('faqs') .update({ ativo: !ativo }) .eq('id', id); if (error) throw error; toast({ title: `FAQ ${!ativo ? 'ativado' : 'desativado'} com sucesso!` }); loadFAQs(); } catch (error) { console.error('Erro ao alterar status:', error); } }; const resetForm = () => { setFormData({ pergunta: '', resposta: '', imagem_url: '', ativo: true }); setEditingFaq(null); setShowForm(false); }; return (

Gerenciar FAQs

Pergunta Status Data Ações {faqs.map((faq) => (
{faq.pergunta}
{faq.ativo ? 'Ativo' : 'Inativo'} {new Date(faq.created_at).toLocaleDateString('pt-BR')}
))}
{/* Form Dialog */} {editingFaq ? 'Editar FAQ' : 'Novo FAQ'}
setFormData({ ...formData, pergunta: e.target.value })} required />