79 lines
3.1 KiB
JavaScript
79 lines
3.1 KiB
JavaScript
(() => {
|
|
"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;
|
|
}
|
|
});
|
|
})();
|