import { filterUnits, subjectsFor, teacherGuidesFor } from './src/library.mjs'; const filters = document.querySelector('#subject-filters'); const grid = document.querySelector('#unit-grid'); const status = document.querySelector('#library-status'); let units = []; let selectedSubject = 'All'; function resourceLink(material) { return `Open ${material.role}`; } function renderFilters() { filters.innerHTML = subjectsFor(units).map((subject) => ``).join(''); filters.querySelectorAll('button').forEach((button) => button.addEventListener('click', () => { selectedSubject = button.dataset.subject; renderFilters(); renderUnits(); })); } function renderUnits() { const filtered = filterUnits(units, selectedSubject); status.textContent = `${filtered.length} ${selectedSubject === 'All' ? 'units' : selectedSubject + ' units'} shown`; grid.innerHTML = filtered.map((unit) => { const guides = teacherGuidesFor(unit); const student = unit.materials.filter((material) => material.role === 'Student Reader'); const resources = [...guides, ...student].slice(0, 3).map(resourceLink).join(''); return `

${unit.subject}

${unit.title.replace(/^Grade 3\s*/, '')}

${guides.length ? `${guides.length} teacher plan${guides.length === 1 ? '' : 's'}` : 'Teacher plan not identified'} · ${student.length} student resource${student.length === 1 ? '' : 's'}

${resources ? `` : '

Open the original archive source for supporting materials.

'}Core Knowledge source ↗
`; }).join(''); } async function loadLibrary() { try { const response = await fetch('/api/catalog', { cache: 'no-store' }); if (!response.ok) throw new Error('catalog unavailable'); const catalog = await response.json(); units = catalog.units; document.querySelector('#unit-count').textContent = catalog.unit_count; document.querySelector('#guide-count').textContent = catalog.teacher_guide_count; document.querySelector('#student-count').textContent = catalog.student_material_count; renderFilters(); renderUnits(); } catch { status.textContent = 'The local catalog could not load. Start the private Grade 3 demo server.'; } } loadLibrary();