feat(modal): ordenar atuações por data e ajustar layout do nome
- Adicionar ordenação das atuações por data (mais recente primeiro) - Ajustar grid de dados pessoais para campo nome ocupar 2 colunas - Reduzir minmax do grid de 220px para 150px para melhor distribuição
This commit is contained in:
@@ -114,6 +114,67 @@ const LABEL_MAP = {
|
||||
|
||||
const formatLabel = (key) => LABEL_MAP[key] || key.replace(/([A-Z])/g, ' $1').replace(/^./, s => s.toUpperCase());
|
||||
|
||||
const parseDate = (dateStr) => {
|
||||
if (!dateStr) return null;
|
||||
try {
|
||||
if (dateStr.includes('/')) {
|
||||
const parts = dateStr.split('/');
|
||||
if (parts.length === 3) {
|
||||
const [day, month, year] = parts;
|
||||
return new Date(year, month - 1, day);
|
||||
}
|
||||
}
|
||||
const date = new Date(dateStr);
|
||||
return isNaN(date.getTime()) ? null : date;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
const getAtuacaoDate = (atuacao) => {
|
||||
const candidateDates = [
|
||||
atuacao.inicio,
|
||||
atuacao.fim,
|
||||
atuacao.dadosEmprego?.dtAdmissao,
|
||||
atuacao.dadosEmprego?.dtDesligamento,
|
||||
atuacao.dadosDocencia?.inicioVinculacao,
|
||||
atuacao.dadosDocencia?.fimVinculacao,
|
||||
atuacao.dadosCoordenacaoArea?.inicioVinculacao,
|
||||
atuacao.dadosCoordenacaoArea?.fimVinculacao,
|
||||
atuacao.dadosHistoricoCoordenacaoArea?.inicioVinculacao,
|
||||
atuacao.dadosHistoricoCoordenacaoArea?.fimVinculacao,
|
||||
atuacao.dadosConsultoria?.inicioVinculacao,
|
||||
atuacao.dadosConsultoria?.fimVinculacao,
|
||||
atuacao.dadosConsultoria?.inicioSituacao,
|
||||
atuacao.dadosConsultoria?.inativacaoSituacao,
|
||||
atuacao.dadosEvento?.inicio,
|
||||
atuacao.dadosEvento?.fim,
|
||||
atuacao.dadosParticipacaoEvento?.inicio,
|
||||
atuacao.dadosParticipacaoEvento?.fim,
|
||||
atuacao.dadosPremiacaoPremio?.ano ? `01/01/${atuacao.dadosPremiacaoPremio.ano}` : null,
|
||||
atuacao.dadosParticipacaoPremio?.ano ? `01/01/${atuacao.dadosParticipacaoPremio.ano}` : null,
|
||||
atuacao.dadosParticipacaoInscricaoPremio?.ano ? `01/01/${atuacao.dadosParticipacaoInscricaoPremio.ano}` : null,
|
||||
atuacao.dadosProjeto?.anoInicio ? `01/01/${atuacao.dadosProjeto.anoInicio}` : null,
|
||||
];
|
||||
|
||||
for (const dateStr of candidateDates) {
|
||||
const date = parseDate(dateStr);
|
||||
if (date) return date;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const sortAtuacoesByDate = (atuacoes) => {
|
||||
return [...atuacoes].sort((a, b) => {
|
||||
const dateA = getAtuacaoDate(a);
|
||||
const dateB = getAtuacaoDate(b);
|
||||
if (!dateA && !dateB) return 0;
|
||||
if (!dateA) return 1;
|
||||
if (!dateB) return -1;
|
||||
return dateB.getTime() - dateA.getTime();
|
||||
});
|
||||
};
|
||||
|
||||
const DataField = ({ label, value, className = '' }) => {
|
||||
const formattedValue = formatValue(value);
|
||||
if (formattedValue === null) return null;
|
||||
@@ -470,9 +531,11 @@ const RawDataModal = ({ idPessoa, nome, onClose }) => {
|
||||
const atuacoes = source.atuacoes || [];
|
||||
|
||||
const tiposAtuacao = [...new Set(atuacoes.map(a => a.tipo))].sort();
|
||||
const atuacoesFiltradas = filterType === 'all'
|
||||
? atuacoes
|
||||
: atuacoes.filter(a => a.tipo === filterType);
|
||||
const atuacoesFiltradas = sortAtuacoesByDate(
|
||||
filterType === 'all'
|
||||
? atuacoes
|
||||
: atuacoes.filter(a => a.tipo === filterType)
|
||||
);
|
||||
|
||||
const atuacoesPorTipo = tiposAtuacao.reduce((acc, tipo) => {
|
||||
acc[tipo] = atuacoes.filter(a => a.tipo === tipo).length;
|
||||
|
||||
Reference in New Issue
Block a user