feat(filtros): adicionar filtro multi-select por selos no ranking
- Backend: extrair selos de detalhes e filtrar por eles - API: endpoint /ranking/selos e parâmetro selos em /ranking/paginado - Frontend: componente FiltroSelos com dropdown e seleção múltipla - Selos disponíveis: funções, premiações, orientações
This commit is contained in:
@@ -2,6 +2,7 @@ import { useState, useEffect, useRef } from 'react';
|
||||
import Header from './components/Header';
|
||||
import ConsultorCard from './components/ConsultorCard';
|
||||
import CompararModal from './components/CompararModal';
|
||||
import FiltroSelos from './components/FiltroSelos';
|
||||
import { rankingService } from './services/api';
|
||||
import './App.css';
|
||||
|
||||
@@ -21,6 +22,7 @@ function App() {
|
||||
const [buscando, setBuscando] = useState(false);
|
||||
const [selecionados, setSelecionados] = useState([]);
|
||||
const [modalAberto, setModalAberto] = useState(false);
|
||||
const [filtroSelos, setFiltroSelos] = useState([]);
|
||||
|
||||
const toggleSelecionado = (consultor) => {
|
||||
setSelecionados((prev) => {
|
||||
@@ -42,7 +44,7 @@ function App() {
|
||||
|
||||
useEffect(() => {
|
||||
loadRanking();
|
||||
}, [page, pageSize]);
|
||||
}, [page, pageSize, filtroSelos]);
|
||||
|
||||
const loadRanking = async (retryCount = 0) => {
|
||||
const MAX_RETRIES = 10;
|
||||
@@ -52,7 +54,7 @@ function App() {
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
setProcessMessage('');
|
||||
const response = await rankingService.getRanking(page, pageSize);
|
||||
const response = await rankingService.getRanking(page, pageSize, filtroSelos);
|
||||
setConsultores(response.consultores);
|
||||
setTotal(response.total);
|
||||
setTotalPages(response.total_pages || 0);
|
||||
@@ -105,7 +107,7 @@ function App() {
|
||||
throw new Error('Timeout: processamento demorou mais que 45 minutos');
|
||||
}
|
||||
|
||||
const response = await rankingService.getRanking(page, pageSize);
|
||||
const response = await rankingService.getRanking(page, pageSize, filtroSelos);
|
||||
setConsultores(response.consultores);
|
||||
setTotal(response.total);
|
||||
setTotalPages(response.total_pages || 0);
|
||||
@@ -191,6 +193,11 @@ function App() {
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<FiltroSelos
|
||||
selecionados={filtroSelos}
|
||||
onChange={(selos) => { setFiltroSelos(selos); setPage(1); }}
|
||||
/>
|
||||
|
||||
<form className="search-box" onSubmit={handleSubmitBuscar}>
|
||||
<input
|
||||
type="text"
|
||||
|
||||
Reference in New Issue
Block a user