import { useState } from "react"; import { useParams, useNavigate } from "react-router-dom"; import { useQuery, useQueryClient } from "react-query"; import { Tab } from "@headlessui/react"; import { classNames } from "../../utils/classNames"; import { ArrowLeftIcon, DocumentTextIcon, ClockIcon, PencilIcon, TrashIcon, CurrencyDollarIcon, } from "@heroicons/react/24/outline"; import { formatCurrency } from "../../utils/format"; import { useProcessosAdministrativos } from "../../hooks/useProcessosAdministrativos"; import { ProcessoAdminModal } from "./ProcessoAdminModal"; import { MovimentacaoAdministrativaDialog } from "./MovimentacaoAdministrativaDialog"; import { MovimentacaoAdminActions } from "./MovimentacaoAdminActions"; // Adicionar esta importação import api from "../../services/api"; import { CustaAdministrativaPanel } from "./CustaAdministrativaPanel"; const tabs = [ { id: "geral", name: "Informações Gerais", icon: DocumentTextIcon }, { id: "movimentacoes", name: "Movimentações", icon: ClockIcon }, { id: "financeiro", name: "Financeiro", icon: CurrencyDollarIcon }, // Adicionar nova tab ]; export function ProcessoAdminDetalhes() { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const queryClient = useQueryClient(); const [selectedTab, setSelectedTab] = useState(0); const [isMovimentacaoModalOpen, setIsMovimentacaoModalOpen] = useState(false); const [isEditModalOpen, setIsEditModalOpen] = useState(false); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [movimentacaoParaEditar, setMovimentacaoParaEditar] = useState(null); // Se o id for "novo", renderizar diretamente o modal de criação if (id === "novo") { return ( navigate("/processos-administrativos")} onSuccess={() => navigate("/processos-administrativos")} /> ); } const { data: processo, isLoading, error } = useQuery( ["processo-administrativo", id], async () => { const response = await api.get(`/processos-administrativos/${id}`); return response.data; }, { enabled: !!id && id !== "novo", // Só executa se tiver um id válido retry: 2, // Tenta no máximo 2 vezes em caso de erro onError: (error) => { console.error("Erro ao carregar processo:", error); } } ); const { deleteProcesso } = useProcessosAdministrativos(); const handleDelete = async () => { try { await deleteProcesso.mutateAsync(id!); navigate("/processos-administrativos"); } catch (error) { console.error("Erro ao excluir processo:", error); } }; const handleSaveMovimentacao = async (data: any) => { try { await api.post(`/processos-administrativos/${id}/movimentacoes`, data); // Recarregar dados queryClient.invalidateQueries(["processo-administrativo", id]); } catch (error) { console.error("Erro ao salvar movimentação:", error); } }; const handleEditMovimentacao = async (data: any) => { try { // Atualizar URL para usar a nova rota await api.put(`/processos-administrativos/movimentacoes/${data.id}`, data); queryClient.invalidateQueries(["processo-administrativo", id]); setMovimentacaoParaEditar(null); } catch (error) { console.error("Erro ao editar movimentação:", error); } }; const handleDeleteMovimentacao = async (movimentacaoId: string) => { if (!window.confirm("Deseja realmente excluir esta movimentação?")) return; try { // Atualizar URL para usar a nova rota await api.delete(`/processos-administrativos/movimentacoes/${movimentacaoId}`); queryClient.invalidateQueries(["processo-administrativo", id]); } catch (error) { console.error("Erro ao excluir movimentação:", error); } }; if (!processo) return
Processo não encontrado
; if (isLoading) return
Carregando...
; if (error) return
Erro ao carregar processo
; return (
{/* Header */}

{processo.numero}

{processo.orgao}

{/* 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 Gerais */}
Número/Protocolo
{processo.numero}
Órgão
{processo.orgao}
Status
{processo.status}
Valor da Pretensão
{processo.valorPretensao ? formatCurrency(processo.valorPretensao) : "-"}
Descrição
{processo.descricao}
Observações
{processo.observacoes || "-"}
{/* Movimentações */}

Movimentações

{processo.movimentacoes?.length > 0 ? (
    {processo.movimentacoes.map((mov, idx) => (
  • {idx !== processo.movimentacoes.length - 1 ? (
  • ))}
) : (

Nenhuma movimentação registrada

)}
{/* Painel Financeiro */}
{/* Modais */} setIsEditModalOpen(false)} processo={processo} onSuccess={() => { queryClient.invalidateQueries(["processo-administrativo", id]); setIsEditModalOpen(false); }} /> setIsMovimentacaoModalOpen(false)} onSave={handleSaveMovimentacao} /> setMovimentacaoParaEditar(null)} onSave={handleEditMovimentacao} movimentacao={movimentacaoParaEditar} />
); }