Files
matrix/cygnus-onprem-app/build/WebContent/js/manage-users-v2.js

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;
}
});
})();