// 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 ? `Edit` : "-"} `; 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."); } }