// patientAppointment.js
import { getPatientAppointments, getPatientData, filterAppointments } from "./services/patientServices.js";
const tableBody = document.getElementById("patientTableBody");
const token = localStorage.getItem("token");
let allAppointments = [];
let filteredAppointments = [];
let patientId = null;
document.addEventListener("DOMContentLoaded", initializePage);
async function initializePage() {
try {
if (!token) throw new Error("No token found");
const patient = await getPatientData(token);
if (!patient) throw new Error("Failed to fetch patient details");
patientId = Number(patient.id);
const appointmentData = await getPatientAppointments(patientId, token, "patient") || [];
allAppointments = appointmentData.filter(app => app.patientId === patientId);
renderAppointments(allAppointments);
} catch (error) {
console.error("Error loading appointments:", error);
alert("❌ Failed to load your appointments.");
}
}
function renderAppointments(appointments) {
tableBody.innerHTML = "";
const actionTh = document.querySelector("#patientTable thead tr th:last-child");
if (actionTh) {
actionTh.style.display = "table-cell"; // Always show "Actions" column
}
if (!appointments.length) {
tableBody.innerHTML = `
| No Appointments Found |
`;
return;
}
appointments.forEach(appointment => {
const tr = document.createElement("tr");
tr.innerHTML = `
${appointment.patientName || "You"} |
${appointment.doctorName} |
${appointment.appointmentDate} |
${appointment.appointmentTimeOnly} |
${appointment.status == 0 ? ` ` : "-"} |
`;
if (appointment.status == 0) {
const actionBtn = tr.querySelector(".prescription-btn");
actionBtn?.addEventListener("click", () => redirectToUpdatePage(appointment));
}
tableBody.appendChild(tr);
});
}
function redirectToUpdatePage(appointment) {
// Prepare the query parameters
const queryString = new URLSearchParams({
appointmentId: appointment.id,
patientId: appointment.patientId,
patientName: appointment.patientName || "You",
doctorName: appointment.doctorName,
doctorId: appointment.doctorId,
appointmentDate: appointment.appointmentDate,
appointmentTime: appointment.appointmentTimeOnly,
}).toString();
// Redirect to the update page with the query string
setTimeout(() => {
window.location.href = `/pages/updateAppointment.html?${queryString}`;
}, 100);
}
// Search and Filter Listeners
document.getElementById("searchBar").addEventListener("input", handleFilterChange);
document.getElementById("appointmentFilter").addEventListener("change", handleFilterChange);
async function handleFilterChange() {
const searchBarValue = document.getElementById("searchBar").value.trim();
const filterValue = document.getElementById("appointmentFilter").value;
const name = searchBarValue || null;
const condition = filterValue === "allAppointments" ? null : filterValue || null;
try {
const response = await filterAppointments(condition, name, token);
const appointments = response?.appointments || [];
filteredAppointments = appointments.filter(app => app.patientId === patientId);
renderAppointments(filteredAppointments);
} catch (error) {
console.error("Failed to filter appointments:", error);
alert("❌ An error occurred while filtering appointments.");
}
}