"use client"; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { EnvelopeIcon, PhoneIcon, MagnifyingGlassIcon, } from '@heroicons/react/24/outline'; interface Lead { id: string; name: string; email: string; phone: string; status: string; source: string; created_at: string; } export default function CustomerLeadsPage() { const router = useRouter(); const [leads, setLeads] = useState([]); const [loading, setLoading] = useState(true); const [searchTerm, setSearchTerm] = useState(''); useEffect(() => { fetchLeads(); }, []); const fetchLeads = async () => { try { const token = localStorage.getItem('token'); const response = await fetch('/api/portal/leads', { headers: { 'Authorization': `Bearer ${token}`, }, }); if (!response.ok) throw new Error('Erro ao buscar leads'); const data = await response.json(); setLeads(data.leads || []); } catch (error) { console.error('Error fetching leads:', error); } finally { setLoading(false); } }; const getStatusColor = (status: string) => { const colors: Record = { novo: 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300', qualificado: 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300', negociacao: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300', convertido: 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300', perdido: 'bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300', }; return colors[status] || 'bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-300'; }; const getStatusLabel = (status: string) => { const labels: Record = { novo: 'Novo', qualificado: 'Qualificado', negociacao: 'Em Negociação', convertido: 'Convertido', perdido: 'Perdido', }; return labels[status] || status; }; const filteredLeads = leads.filter(lead => lead.name.toLowerCase().includes(searchTerm.toLowerCase()) || lead.email.toLowerCase().includes(searchTerm.toLowerCase()) || lead.phone?.includes(searchTerm) ); if (loading) { return (

Carregando...

); } return (
{/* Header */}

Meus Leads

Lista completa dos seus leads

{/* Search */}
setSearchTerm(e.target.value)} placeholder="Buscar por nome, email ou telefone..." className="w-full pl-10 pr-4 py-3 border border-gray-300 dark:border-gray-700 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-white placeholder-gray-400 focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
{/* Table */}
{filteredLeads.length === 0 ? ( ) : ( filteredLeads.map((lead) => ( )) )}
Nome Contato Origem Status Data
{searchTerm ? 'Nenhum lead encontrado com esse filtro' : 'Nenhum lead encontrado'}
{lead.name}
{lead.email}
{lead.phone && (
{lead.phone}
)}
{lead.source || 'Manual'} {getStatusLabel(lead.status)} {new Date(lead.created_at).toLocaleDateString('pt-BR')}
); }