// public/main.js – страница записи родителей let allLessons = []; async function loadFilterOptions() { try { const [classes, teachers, topics] = await Promise.all([ fetch('/api/filter-options/class-names').then(r => r.json()), fetch('/api/filter-options/teachers').then(r => r.json()), fetch('/api/filter-options/topics').then(r => r.json()) ]); window.allClassNames = classes; window.allTeachers = teachers; window.allTopics = topics; populateSelect('filterClass', window.allClassNames, 'Все классы'); populateSelect('filterTeacher', window.allTeachers, 'Все учителя'); populateSelect('filterTopic', window.allTopics, 'Все темы'); } catch (err) { console.error('Ошибка загрузки опций фильтров', err); } } function populateSelect(selectId, options, defaultLabel) { const select = document.getElementById(selectId); if (!select) return; const currentValue = select.value; select.innerHTML = ``; options.forEach(opt => { const option = document.createElement('option'); option.value = opt; option.textContent = opt; select.appendChild(option); }); if (currentValue && options.includes(currentValue)) { select.value = currentValue; } else { select.value = ''; } } async function loadLessons() { try { const res = await fetch('/api/lessons'); allLessons = await res.json(); updateDependentFilters(); applyFilters(); } catch (err) { console.error('Ошибка загрузки уроков', err); document.getElementById('lessonsContainer').innerHTML = '
Ошибка загрузки данных
'; } } function updateDependentFilters() { const selectedClass = document.getElementById('filterClass').value; const selectedTeacher = document.getElementById('filterTeacher').value; const selectedTopic = document.getElementById('filterTopic').value; let filteredLessons = allLessons; if (selectedClass) { filteredLessons = filteredLessons.filter(l => l.class_name === selectedClass); } if (selectedTeacher) { filteredLessons = filteredLessons.filter(l => l.teacher === selectedTeacher); } if (selectedTopic) { filteredLessons = filteredLessons.filter(l => l.topic === selectedTopic); } const availableClasses = [...new Set(filteredLessons.map(l => l.class_name))].sort(); const availableTeachers = [...new Set(filteredLessons.map(l => l.teacher))].sort(); const availableTopics = [...new Set(filteredLessons.map(l => l.topic).filter(t => t))].sort(); const classSelect = document.getElementById('filterClass'); const teacherSelect = document.getElementById('filterTeacher'); const topicSelect = document.getElementById('filterTopic'); const oldClass = classSelect.value; const oldTeacher = teacherSelect.value; const oldTopic = topicSelect.value; populateSelect('filterClass', availableClasses, 'Все классы'); populateSelect('filterTeacher', availableTeachers, 'Все учителя'); populateSelect('filterTopic', availableTopics, 'Все темы'); if (oldClass && availableClasses.includes(oldClass)) classSelect.value = oldClass; else classSelect.value = ''; if (oldTeacher && availableTeachers.includes(oldTeacher)) teacherSelect.value = oldTeacher; else teacherSelect.value = ''; if (oldTopic && availableTopics.includes(oldTopic)) topicSelect.value = oldTopic; else topicSelect.value = ''; } function applyFilters() { const classFilter = document.getElementById('filterClass').value; const teacherFilter = document.getElementById('filterTeacher').value; const topicFilter = document.getElementById('filterTopic').value; let filtered = allLessons.filter(lesson => lesson.available === true); if (classFilter) filtered = filtered.filter(lesson => lesson.class_name === classFilter); if (teacherFilter) filtered = filtered.filter(lesson => lesson.teacher === teacherFilter); if (topicFilter) filtered = filtered.filter(lesson => lesson.topic === topicFilter); renderLessons(filtered); } function renderLessons(lessons) { const container = document.getElementById('lessonsContainer'); const counterSpan = document.getElementById('availableCount'); if (!container) return; if (lessons.length === 0) { container.innerHTML = 'Нет доступных уроков
'; if (counterSpan) counterSpan.textContent = '0'; return; } container.innerHTML = lessons.map(lesson => { // Определяем, что показывать в строке времени let timeHtml = ''; if (lesson.topic && lesson.topic.includes('Консультация') && lesson.date && lesson.time) { timeHtml = `Дата/время: ${escapeHtml(lesson.date)} ${escapeHtml(lesson.time)}
`; } else { timeHtml = `Время: Согласно расписания
`; } return `Учитель: ${escapeHtml(lesson.teacher)}
Тема: ${escapeHtml(lesson.topic || '—')}
${timeHtml}