import React, { useState } from "react"; import { useParams, useNavigate } from "react-router-dom"; import { useClientes } from "../../hooks/useClientes"; import { Tab } from "@headlessui/react"; import { ArrowLeftIcon, PencilIcon, UserIcon, HomeIcon, BanknotesIcon, UserGroupIcon, DocumentTextIcon, } from "@heroicons/react/24/outline"; import { ClienteModal } from "./ClienteModal"; import { formatCPF, formatTelefone, formatNome, formatEmail, formatMoeda, formatTextoSimples, formatData, } from "../../utils/formatters"; function classNames(...classes: string[]) { return classes.filter(Boolean).join(" "); } const tabs = [ { id: "info", name: "Informações Básicas", icon: UserIcon }, { id: "endereco", name: "Endereço", icon: HomeIcon }, { id: "financeiro", name: "Informações Financeiras", icon: BanknotesIcon }, { id: "familia", name: "Informações Familiares", icon: UserGroupIcon }, { id: "processos", name: "Processos", icon: DocumentTextIcon }, ]; interface InfoItemProps { label: string; value: string; onEdit?: () => void; isEditable?: boolean; } const InfoItem: React.FC = ({ label, value, onEdit, isEditable = true, }) => (
{label}
{value} {isEditable && ( )}
); export const ClienteDetalhes: React.FC = () => { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const { clientes, isLoading } = useClientes(); const [selectedTab, setSelectedTab] = useState(0); const [isEditModalOpen, setIsEditModalOpen] = useState(false); const [editingField, setEditingField] = useState(null); const cliente = clientes.find((c) => c.id === id); if (isLoading) { return (
); } if (!cliente) { return
Cliente não encontrado
; } // Funções de formatação simplificadas const formataCurrency = (valor: any): string => { if (!valor) return "Não informado"; try { return new Intl.NumberFormat("pt-BR", { style: "currency", currency: "BRL", }).format(Number(valor)); } catch { return "Não informado"; } }; const formataTexto = (texto: any): string => { if (!texto && texto !== false) return "Não informado"; if (typeof texto === "boolean") return texto ? "Sim" : "Não"; return String(texto); }; const getTabForField = (field: string | null) => { switch (field) { case "nome": case "cpfCnpj": case "rg": case "email": case "telefone": case "instagram": case "estadoCivil": case "dataNascimento": return 0; case "cep": case "endereco": case "complemento": case "bairro": case "cidade": case "estado": return 1; case "profissao": case "vinculoEmpregaticio": case "renda": case "declaraIR": case "tipoPrevidencia": case "contribuiPrevidencia": return 2; case "nomePai": case "nomeMae": case "conjugeNome": case "conjugeCpf": return 3; default: return 0; } }; return (
{/* Header */}

{formatNome(cliente.nome)}

Cadastrado em {new Date(cliente.dataCriacao).toLocaleDateString()}

{/* Tabs */} {tabs.map((tab) => ( classNames( "w-full rounded-lg py-2.5 text-sm font-medium leading-5", "flex items-center justify-center", selected ? "bg-white text-blue-700 shadow" : "text-gray-600 hover:bg-white/[0.12] hover:text-blue-600", ) } > {tab.name} ))} {/* Informações Básicas */}
{ setEditingField("nome"); setIsEditModalOpen(true); }} /> { setEditingField("cpfCnpj"); setIsEditModalOpen(true); }} />
{/* Endereço */}
{/* Informações Financeiras */}
{/* Informações Familiares */}
{/* Lista de Filhos */}

Filhos

{cliente.filhos && cliente.filhos.length > 0 ? (
    {cliente.filhos.map((filho) => (
  • {filho.nome}

    Nascimento:{" "} {new Date(filho.dataNascimento).toLocaleDateString()}

  • ))}
) : (

Nenhum filho cadastrado

)}
{/* Processos */} {cliente.processos && cliente.processos.length > 0 ? (
    {cliente.processos.map((processo) => (
  • {processo.titulo}

    Nº {processo.numero}

    {processo.status}
  • ))}
) : (

Nenhum processo cadastrado

)}
{/* Modal de Edição */} { setIsEditModalOpen(false); setEditingField(null); }} onSuccess={() => { setIsEditModalOpen(false); setEditingField(null); }} initialTab={getTabForField(editingField)} />
); };