feat(frontend): alinhar critérios e selos/hints

This commit is contained in:
Frederico Castro
2025-12-15 00:13:15 -03:00
parent 2a0dc1a652
commit 6369ac5d22
4 changed files with 154 additions and 58 deletions

View File

@@ -9,6 +9,8 @@ function App() {
const [consultores, setConsultores] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
const [processing, setProcessing] = useState(false);
const [processMessage, setProcessMessage] = useState('');
const [total, setTotal] = useState(0);
const [page, setPage] = useState(1);
const [pageSize, setPageSize] = useState(50);
@@ -45,12 +47,44 @@ function App() {
try {
setLoading(true);
setError(null);
setProcessMessage('');
const response = await rankingService.getRanking(page, pageSize);
setConsultores(response.consultores);
setTotal(response.total);
setTotalPages(response.total_pages || 0);
setPage(response.page || page);
} catch (err) {
const status = err?.response?.status;
if (status === 503) {
try {
setProcessing(true);
setProcessMessage('Ranking ainda não processado. Iniciando processamento...');
await rankingService.processarRanking(true);
while (true) {
const st = await rankingService.getStatus();
setProcessMessage(st.mensagem || `Processando... ${st.progress || 0}%`);
if (!st.running) {
if (st.erro) throw new Error(st.erro);
break;
}
await new Promise((r) => setTimeout(r, 4000));
}
const response = await rankingService.getRanking(page, pageSize);
setConsultores(response.consultores);
setTotal(response.total);
setTotalPages(response.total_pages || 0);
setPage(response.page || page);
} catch (e) {
console.error('Erro ao processar ranking:', e);
setError('Erro ao processar ranking. Verifique a conexão com o Elasticsearch.');
} finally {
setProcessing(false);
}
return;
}
console.error('Erro ao carregar ranking:', err);
setError('Erro ao carregar ranking. Verifique se a API está rodando.');
} finally {
@@ -88,7 +122,9 @@ function App() {
if (loading) {
return (
<div className="container">
<div className="loading">Carregando ranking...</div>
<div className="loading">
{processing ? (processMessage || 'Processando ranking...') : 'Carregando ranking...'}
</div>
</div>
);
}