feat(raw-data): adicionar visualização de dados brutos do ATUACAPES

- Novo endpoint GET /api/v1/consultor/{id}/raw para buscar documento completo do ES
- Novo componente RawDataModal com formatação inteligente de campos
- Botão de acesso rápido no ConsultorCard (ícone ⋮)
- Melhorias de estilo no Header e ConsultorCard
This commit is contained in:
Frederico Castro
2025-12-17 23:28:11 -03:00
parent 99ce6e30d8
commit c388509acb
11 changed files with 1186 additions and 21 deletions

View File

@@ -1,5 +1,6 @@
import React, { useState, useRef, useEffect, useMemo, memo } from 'react';
import './ConsultorCard.css';
import RawDataModal from './RawDataModal';
const SELOS = {
PRESID_CAMARA: { label: 'Presidente Camara', cor: 'selo-camara', icone: '👑' },
@@ -185,6 +186,7 @@ const ScoreItemWithTooltip = ({ value, label, formula, style }) => (
const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecionado }) => {
const [expanded, setExpanded] = useState(false);
const [showRawModal, setShowRawModal] = useState(false);
const cardRef = useRef(null);
useEffect(() => {
@@ -213,6 +215,11 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
onToggleSelecionado(consultor);
};
const handleRawDataClick = (e) => {
e.stopPropagation();
setShowRawModal(true);
};
const { consultoria, pontuacao } = consultor;
const blocoA = pontuacao?.bloco_a || { total: consultor.bloco_a || 0 };
const blocoB = pontuacao?.bloco_b || { total: consultor.bloco_b || 0 };
@@ -278,6 +285,13 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
<div className="score-value">{pontuacaoTotal}</div>
<div className="stat-label">Score</div>
</div>
<button
className="btn-raw-data"
onClick={handleRawDataClick}
title="Ver dados completos do ATUACAPES"
>
</button>
<div className="expand-icon">{expanded ? '▲' : '▼'}</div>
</div>
</div>
@@ -474,6 +488,14 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
)}
</div>
)}
{showRawModal && (
<RawDataModal
idPessoa={consultor.id_pessoa}
nome={consultor.nome}
onClose={() => setShowRawModal(false)}
/>
)}
</div>
);
});