(() => { "use strict"; const body = document.body; const tableBody = document.getElementById("userlistbody"); const search = document.getElementById("userSearch"); const filterForm = document.getElementById("filterform"); const message = document.getElementById("userMessage"); const showMessage = (text, type = "success") => { const parts = String(text || "").split(":"); message.textContent = parts.length > 2 ? parts.slice(2).join(":") : text; message.className = `alert alert-${type} py-2 px-3 mb-2`; }; const openUser = async (userId) => { const params = new URLSearchParams({ uid: String(userId), suuid: document.getElementById("suuid").value }); const result = await window.MatrixModal.openFrame({ title: userId === "0" ? "New User" : "Edit User", url: `${body.dataset.userDetailUrl}?${params}` }); if (result.status === "saved") { filterForm.submit(); } }; search?.addEventListener("input", () => { const query = search.value.trim().toLocaleUpperCase(); tableBody.querySelectorAll("tr").forEach((row) => { row.hidden = query && !row.textContent.toLocaleUpperCase().includes(query); }); }); document.getElementById("addUser")?.addEventListener("click", () => openUser("0")); document.getElementById("refreshUsers")?.addEventListener("click", () => filterForm.submit()); tableBody?.addEventListener("click", async (event) => { const row = event.target.closest("tr[data-user-id]"); if (!row) return; if (event.target.closest(".edit-user")) { openUser(row.dataset.userId); return; } const statusButton = event.target.closest(".user-status"); if (!statusButton) return; statusButton.disabled = true; try { const response = await fetch(body.dataset.userStatusUrl, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded;charset=ISO-8859-1" }, body: new URLSearchParams({ user: row.dataset.userId, oprby: document.getElementById("usid").value }) }); if (!response.ok) throw new Error(await response.text()); const result = JSON.parse(await response.text()); if (result.status === "failed") { showMessage(result.message, "danger"); return; } const active = statusButton.dataset.active !== "true"; statusButton.dataset.active = String(active); statusButton.textContent = active ? "Active" : "Inactive"; statusButton.className = `btn btn-sm user-status ${active ? "btn-success" : "btn-outline-secondary"}`; row.querySelector(".edit-user").disabled = !active; showMessage("Status changed successfully"); } catch (error) { showMessage(error.message || "Could not change user status", "danger"); } finally { statusButton.disabled = false; } }); })();