35 lines
1.3 KiB
JavaScript
35 lines
1.3 KiB
JavaScript
import { students } from "./data.js";
|
|
import { calculateOverallStatistics } from "./analytics.js";
|
|
import { getTopThree, uniqueCourses } from "./utils.js";
|
|
import { renderTable, renderSummary } from "./ui.js";
|
|
import { toggleTheme, loadTheme } from "./theme.js";
|
|
|
|
let filteredStudents = [...students];
|
|
|
|
const nameSearchInput = document.getElementById("nameSearch");
|
|
const minGradeInput = document.getElementById("minimumGrade");
|
|
const minGradeValue = document.getElementById("gradeValue");
|
|
|
|
const applyFilters = () => {
|
|
const nameFilter = nameSearchInput.value.toLowerCase();
|
|
const minGrade = parseInt(minGradeInput.value);
|
|
|
|
filteredStudents = students.filter((student) => student.name.toLowerCase().includes(nameFilter) && student.grade >= minGrade);
|
|
|
|
const topThree = getTopThree(filteredStudents);
|
|
renderTable(filteredStudents, topThree);
|
|
|
|
const stats = calculateOverallStatistics(filteredStudents);
|
|
renderSummary(stats, uniqueCourses(filteredStudents).length);
|
|
};
|
|
|
|
nameSearchInput.addEventListener("input", applyFilters);
|
|
minGradeInput.addEventListener("input", () => {
|
|
minGradeValue.textContent = minGradeInput.value;
|
|
applyFilters();
|
|
});
|
|
|
|
document.getElementById("themeToggle").addEventListener("click", toggleTheme);
|
|
|
|
loadTheme();
|
|
applyFilters(); |