function loadStudents() {
const urlParams = new URLSearchParams(window.location.search);
const netID = urlParams.get("netID");
fetch("/student/getAll")
.then((response) => response.json())
.then((data) => {
const tableBody = document.getElementById("student-table-body");
tableBody.innerHTML = "";
// If netID exists, filter data in JS; otherwise show all
const filteredData = netID ? data.filter((s) => s.netID === netID) : data;
filteredData.forEach((student) => {
const row = document.createElement("tr");
row.innerHTML = `
|
${student.firstName} ${student.lastName} |
${student.gradeLevel} |
${student.pronouns} |
${student.specialNotes} |
${student.email} |
${student.allergies_sensitivities} |
`;
tableBody.appendChild(row);
});
// Only set filter input if netID exists
if (netID) {
document.getElementById("filter-column").value = "netID";
document.getElementById("filter-input").value = netID;
}
})
.catch((error) => console.error("Error fetching student data:", error));
}
//this function processes the filter request and updates the table accordingly
function processFilter(page) {
const filterBy = document.getElementById("filter-column").value;
const filterValue = document.getElementById("filter-input").value;
fetch(`/${page}/filterBy?column=${filterBy}&value=${filterValue}`)
.then((res) => res.json())
.then((data) => {
const tableBody = document.getElementById(`${page}-table-body`);
tableBody.innerHTML = "";
data.forEach((item) => {
const row = document.createElement("tr");
row.innerHTML = `
|
${item.firstName} ${item.lastName} |
${item.gradeLevel} |
${item.pronouns} |
${item.specialNotes} |
${item.email} |
${item.allergies_sensitivities} |
`;
tableBody.appendChild(row);
});
});
}
function clearInput(elementId) {
document.getElementById(elementId).value = "";
}
function handleNetIdDropdown(selectedValue, netID) {
if (!selectedValue) {
return;
}
if (selectedValue === "roles") {
window.location.href = `/characters/loadpage?netID=${netID}`;
}
if (selectedValue === "shows") {
window.location.href = `/student/${netID}/shows`;
}
if (selectedValue === "crew") {
window.location.href = `/crew/loadpage?netID=${netID}`;
}
if (selectedValue === "delete") {
deleteStudent(netID);
}
if (selectedValue === "edit") {
window.location.href = `/student/${netID}/editPage`;
}
if (selectedValue === "actor") {
window.location.href = `/actors/loadpage?netID=${netID}`;
}
}
async function editStudent(netID) {
const formData = new URLSearchParams();
formData.append("netID", document.getElementById("netID").value);
formData.append("firstName", document.getElementById("firstName").value);
formData.append("lastName", document.getElementById("lastName").value);
formData.append("gradeLevel", document.getElementById("gradeLevel").value);
formData.append("pronouns", document.getElementById("pronouns").value);
formData.append(
"specialNotes",
document.getElementById("specialNotes").value
);
formData.append("email", document.getElementById("email").value);
formData.append(
"allergies_sensitivities",
document.getElementById("allergies").value
);
const response = await fetch(`/student/${netID}/edit`, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: formData.toString(),
});
if (response.ok) {
alert("Student edited successfully!");
document.getElementById("edit-student-form").reset();
window.location.href = "/student/loadpage";
} else {
alert("Error editing student.");
}
}
const FILTER_DROPDOWN_MAP = {
student: [
{ value: "netID", label: "NetID" },
{ value: "firstName", label: "First Name" },
{ value: "lastName", label: "Last Name" },
{ value: "gradeLevel", label: "Grade Level" },
{ value: "allergies_sensitivities", label: "Allergies/Sensitivities" },
],
};
function populateFilterDropdown() {
const select = document.getElementById("filter-column");
select.innerHTML = "";
const options = FILTER_DROPDOWN_MAP["student"];
if (!options) return;
options.forEach((opt) => {
const optionElement = document.createElement("option");
optionElement.value = opt.value; // this is sent to the backend
optionElement.textContent = opt.label; // this is displayed to the user
select.appendChild(optionElement);
});
}
async function addStudent() {
const formData = new URLSearchParams();
formData.append("netID", document.getElementById("netID").value);
formData.append("firstName", document.getElementById("firstName").value);
formData.append("lastName", document.getElementById("lastName").value);
formData.append("gradeLevel", document.getElementById("gradeLevel").value);
formData.append("pronouns", document.getElementById("pronouns").value);
formData.append(
"specialNotes",
document.getElementById("specialNotes").value
);
formData.append("email", document.getElementById("email").value);
formData.append("allergies", document.getElementById("allergies").value);
const response = await fetch("/student/add", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: formData.toString(),
});
if (response.ok) {
alert("Student added successfully!");
document.getElementById("add-student-form").reset();
window.location.href = "/student/loadpage";
} else {
alert("Error adding student.");
}
}
function deleteStudent(netID) {
if (
!confirm(`Are you sure you want to delete student with NetID: ${netID}?`)
) {
return;
}
const formData = new URLSearchParams();
formData.append("netID", netID);
fetch("/student/delete", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: formData.toString(),
})
.then((response) => {
if (response.ok) {
alert("Student deleted successfully!");
loadStudents();
} else {
alert("Error deleting student.");
}
})
.catch((error) => console.error("Error deleting student:", error));
}
function validateNetID() {
document.getElementById("netID").addEventListener("input", function (e) {
let value = e.target.value;
// Only allow letters for first 3 chars
if (value.length <= 3) {
value = value.replace(/[^A-Za-z]/g, "");
}
// After 3 chars, allow only digits
if (value.length > 3) {
value = value.substring(0, 3) + value.substring(3).replace(/[^0-9]/g, "");
}
// Enforce max length 8
value = value.substring(0, 8);
e.target.value = value;
});
}