import { Dialog } from "@headlessui/react"; import { DocumentIcon, PlusIcon, TrashIcon, EyeIcon, CogIcon, XMarkIcon, } from "@heroicons/react/24/outline"; import { useState, useEffect, useCallback } from "react"; import { useParams, useNavigate, Link } from "react-router-dom"; import { toast } from "react-toastify"; import { useAuth } from "../contexts/AuthContext"; import { api } from "../lib/api"; import { DocumentoEditor } from "./DocumentoEditor"; import { DocumentoViewer } from "./DocumentoViewer"; export function DocumentosPage() { const [isEditorOpen, setIsEditorOpen] = useState(false); const [documentos, setDocumentos] = useState([]); const [modelos, setModelos] = useState([]); const [tabValue, setTabValue] = useState(0); const [isLoading, setIsLoading] = useState(true); const { processoId, atendimentoId } = useParams(); const navigate = useNavigate(); const { user, signOut } = useAuth(); const [documentoVisualizado, setDocumentoVisualizado] = useState(null); const [isVisualizadorOpen, setVisualizadorOpen] = useState(false); const loadData = useCallback(async () => { if (!user) { navigate("/login"); return; } try { setIsLoading(true); await Promise.all([loadDocumentos(), loadModelos()]); } catch (error) { console.error("Erro ao carregar dados:", error); if (error?.response?.status === 401) { signOut(); // Usar a função do AuthContext navigate("/login"); } else { toast.error("Erro ao carregar dados"); } } finally { setIsLoading(false); } }, [user, navigate, signOut]); // Adicionar signOut nas dependências useEffect(() => { loadData(); }, [loadData, processoId, atendimentoId]); const loadDocumentos = async () => { const params = {}; if (processoId) params.processoId = processoId; if (atendimentoId) params.atendimentoId = atendimentoId; const response = await api.get("/documentos", { params }); setDocumentos(response.data); }; const loadModelos = async () => { const response = await api.get("/documentos-modelos"); setModelos(response.data); }; const handleSave = async (data) => { try { if (processoId) data.processoId = processoId; if (atendimentoId) data.atendimentoId = atendimentoId; await api.post("/documentos", data); toast.success("Documento salvo com sucesso"); await loadDocumentos(); setIsEditorOpen(false); } catch (error) { console.error("Erro ao salvar documento:", error); if (error?.response?.status === 401) { toast.error("Sessão expirada. Por favor, faça login novamente."); } else { toast.error("Erro ao salvar documento"); } } }; const handleDeleteDocumento = async (id) => { try { await api.delete(`/documentos/${id}`); toast.success("Documento excluído com sucesso"); await loadDocumentos(); } catch (error) { console.error("Erro ao excluir documento:", error); if (error?.response?.status === 401) { toast.error("Sessão expirada. Por favor, faça login novamente."); } else { toast.error("Erro ao excluir documento"); } } }; const handleVisualizar = async (documento) => { try { const configRes = await api.get("/documentos/configuracoes"); setDocumentoVisualizado({ ...documento, escritorio: configRes.data, }); setVisualizadorOpen(true); } catch (error) { console.error("Erro ao visualizar documento:", error); toast.error("Erro ao visualizar documento"); } }; if (isLoading) { return
Criado em: {new Date(doc.criadoEm).toLocaleDateString()}
{modelo.descricao}