const SHEET_CSV_URL = "https://docs.google.com/spreadsheets/d/1p9Zn9pRmeDt_eFVgPJye70uueOpuEpCQGUaVAzJs91c/gviz/tq?tqx=out:csv&sheet=Directorio_Publico";
const grid = document.getElementById('directoryGrid');
const tabsEl = document.getElementById('yearTabs');
function initials(name){
return name.trim().split(/\s+/).slice(0,2).map(w => w[0] || '').join('').toUpperCase();
}
function renderCards(rows, year){
grid.innerHTML = '';
const filtered = year === 'todos' ? rows : rows.filter(r => String(r.anio).trim() === String(year).trim());
if(filtered.length === 0){
grid.innerHTML = '
Aún no hay egresados registrados en esta promoción.
';
return;
}
filtered.forEach(r => {
const card = document.createElement('div');
card.className = 'alum-card';
card.innerHTML = `${initials(r.nombre)}
${r.nombre}
Prom. ${r.anio}`;
grid.appendChild(card);
});
}
function buildTabs(rows){
const years = [...new Set(rows.map(r => r.anio))].filter(Boolean).sort();
tabsEl.innerHTML = 'Todos' +
years.map(y => `${y}`).join('');
tabsEl.querySelectorAll('.tab').forEach(tab => {
tab.addEventListener('click', () => {
tabsEl.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
tab.classList.add('active');
renderCards(rows, tab.dataset.year);
});
});
}
fetch(SHEET_CSV_URL)
.then(res => res.text())
.then(csv => {
const parsed = Papa.parse(csv, { header: true, skipEmptyLines: true });
const rows = parsed.data.map(r => ({
nombre: [r['Nombre'], r['Apellido']].filter(Boolean).join(' ') || Object.values(r)[0],
anio: (r['Año'] || '').toString().trim()
})).filter(r => r.nombre && r.anio);
buildTabs(rows);
renderCards(rows, 'todos');
})
.catch(err => {
console.error('No se pudo cargar el directorio de egresados', err);
grid.innerHTML = 'El directorio se está actualizando. Intenta de nuevo más tarde.
';
tabsEl.innerHTML = 'Todos';
});