feat(ranking): adicionar badges de tipos de atuação nos cards
- Adiciona campo tipos_atuacao ao schema e extração no mapper - Exibe tipos de atuação (Coordenador, Consultor, Avaliador, etc.) na seção expandida do card, acima de Selos e Reconhecimentos - Inclui estilos visuais distintos para cada tipo de atuação - Melhorias no Header e SugerirConsultores
This commit is contained in:
@@ -24,6 +24,18 @@ const SELOS = {
|
||||
CO_ORIENT_POS_DOC: { label: 'Coorient. Pos-Doc', cor: 'selo-coorient', icone: '🔬' },
|
||||
};
|
||||
|
||||
const TIPOS_ATUACAO_CONFIG = {
|
||||
'Coordenador': { cor: 'tipo-coordenador', icone: '🎯' },
|
||||
'Consultor': { cor: 'tipo-consultor', icone: '💼' },
|
||||
'Avaliador': { cor: 'tipo-avaliador', icone: '📋' },
|
||||
'Premiado': { cor: 'tipo-premiado', icone: '🏆' },
|
||||
'Orientador': { cor: 'tipo-orientador', icone: '🎓' },
|
||||
'Bolsista CNPq': { cor: 'tipo-bolsista', icone: '🔬' },
|
||||
'Inscrito Premio': { cor: 'tipo-inscrito', icone: '📝' },
|
||||
'Projeto': { cor: 'tipo-projeto', icone: '📊' },
|
||||
'Evento': { cor: 'tipo-evento', icone: '📅' },
|
||||
};
|
||||
|
||||
const gerarSelos = (consultor) => {
|
||||
const selos = [];
|
||||
|
||||
@@ -114,6 +126,32 @@ const SelosBadges = ({ selos, compacto = false }) => {
|
||||
);
|
||||
};
|
||||
|
||||
const TiposAtuacaoBadges = ({ tipos, exibirTodos = false }) => {
|
||||
if (!tipos || tipos.length === 0) return null;
|
||||
|
||||
const tiposExibidos = exibirTodos ? tipos : tipos.slice(0, 4);
|
||||
const tiposOcultos = !exibirTodos && tipos.length > 4 ? tipos.length - 4 : 0;
|
||||
|
||||
return (
|
||||
<div className={`tipos-atuacao-container ${exibirTodos ? 'tipos-expandido' : ''}`}>
|
||||
{tiposExibidos.map((tipo, idx) => {
|
||||
const config = TIPOS_ATUACAO_CONFIG[tipo] || { cor: 'tipo-default', icone: '📌' };
|
||||
return (
|
||||
<span key={idx} className={`tipo-atuacao ${config.cor}`} title={tipo}>
|
||||
<span className="tipo-icone">{config.icone}</span>
|
||||
<span className="tipo-label">{tipo}</span>
|
||||
</span>
|
||||
);
|
||||
})}
|
||||
{tiposOcultos > 0 && (
|
||||
<span className="tipo-atuacao tipo-mais" title={tipos.slice(4).join(', ')}>
|
||||
+{tiposOcultos}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const FORMULAS = {
|
||||
bloco_a: {
|
||||
titulo: 'Coordenacao CAPES',
|
||||
@@ -372,6 +410,13 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
|
||||
)}
|
||||
</div>
|
||||
|
||||
{consultor.tipos_atuacao?.length > 0 && (
|
||||
<div className="detail-section tipos-section">
|
||||
<h4>Tipos de Atuacao</h4>
|
||||
<TiposAtuacaoBadges tipos={consultor.tipos_atuacao} exibirTodos={true} />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{selos.length > 0 && (
|
||||
<div className="detail-section selos-section">
|
||||
<h4>Selos e Reconhecimentos</h4>
|
||||
|
||||
Reference in New Issue
Block a user