import { useState, useRef, useEffect } from 'react'; import './FiltroSelos.css'; const SELOS_CONFIG = { funcoes: { label: 'Funções', selos: [ { codigo: 'PRESID_CAMARA', label: 'Presidente Câmara', icone: '👑' }, { codigo: 'COORD_PPG', label: 'Coord. PPG', icone: '🎓' }, { codigo: 'BPQ', label: 'Bolsista PQ', icone: '🏅' }, ], }, premiacoes: { label: 'Premiações', selos: [ { codigo: 'AUTOR_GP', label: 'Autor GP', icone: '🏆' }, { codigo: 'AUTOR_PREMIO', label: 'Autor Prêmio', icone: '🥇' }, { codigo: 'AUTOR_MENCAO', label: 'Autor Menção', icone: '🥈' }, { codigo: 'ORIENT_GP', label: 'Orient. GP', icone: '🏆' }, { codigo: 'ORIENT_PREMIO', label: 'Orient. Prêmio', icone: '🎖️' }, { codigo: 'ORIENT_MENCAO', label: 'Orient. Menção', icone: '📜' }, ], }, orientacoes: { label: 'Orientações', selos: [ { codigo: 'ORIENT_POS_DOC', label: 'Pós-Doc', icone: '🔬' }, { codigo: 'ORIENT_TESE', label: 'Tese', icone: '📚' }, { codigo: 'ORIENT_DISS', label: 'Dissertação', icone: '📄' }, { codigo: 'CO_ORIENT_POS_DOC', label: 'Co-orient. Pós-Doc', icone: '🔬' }, { codigo: 'CO_ORIENT_TESE', label: 'Co-orient. Tese', icone: '📚' }, { codigo: 'CO_ORIENT_DISS', label: 'Co-orient. Diss.', icone: '📄' }, ], }, }; function FiltroSelos({ selecionados, onChange }) { const [aberto, setAberto] = useState(false); const [selosTemp, setSelosTemp] = useState([]); const ref = useRef(null); useEffect(() => { if (aberto) { setSelosTemp([...selecionados]); } }, [aberto, selecionados]); useEffect(() => { const handleClickOutside = (e) => { if (ref.current && !ref.current.contains(e.target)) { setAberto(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); const toggleSelo = (codigo) => { if (selosTemp.includes(codigo)) { setSelosTemp(selosTemp.filter((s) => s !== codigo)); } else { setSelosTemp([...selosTemp, codigo]); } }; const limparTemp = () => { setSelosTemp([]); }; const limparFiltros = (e) => { e.stopPropagation(); onChange([]); }; const aplicarFiltro = () => { onChange(selosTemp); setAberto(false); }; const totalSelos = Object.values(SELOS_CONFIG).reduce( (acc, g) => acc + g.selos.length, 0 ); return (
{aberto && (
Selecione os selos para filtrar {selosTemp.length > 0 && ( )}
{Object.entries(SELOS_CONFIG).map(([grupoKey, grupo]) => (
{grupo.label}
{grupo.selos.map((selo) => ( ))}
))}
{selosTemp.length} de {totalSelos} selecionado{selosTemp.length !== 1 ? 's' : ''}
)}
); } export default FiltroSelos;