allow admins to delete approvals and activity entries

This commit is contained in:
2026-04-02 22:21:13 +02:00
parent 66b08693b9
commit bc2f972769
3 changed files with 223 additions and 5 deletions

View File

@@ -2594,6 +2594,19 @@ function renderActivityLog() {
details.textContent = JSON.stringify(entry.details, null, 2);
block.appendChild(details);
}
if (isAdmin()) {
const actions = document.createElement("div");
actions.className = "actions";
const deleteBtn = document.createElement("button");
deleteBtn.type = "button";
deleteBtn.className = "danger";
deleteBtn.textContent = "Eintrag loeschen";
deleteBtn.addEventListener("click", async () => {
await deleteActivityEntry(entry.id);
});
actions.appendChild(deleteBtn);
block.appendChild(actions);
}
els.activityLogList.appendChild(block);
}
}
@@ -2813,6 +2826,17 @@ function renderApprovals() {
await decideApproval(entry.id, false);
});
actions.appendChild(rejectBtn);
if (isAdmin()) {
const deleteBtn = document.createElement("button");
deleteBtn.type = "button";
deleteBtn.className = "danger";
deleteBtn.textContent = "Eintrag loeschen";
deleteBtn.addEventListener("click", async () => {
await deleteApprovalEntry(entry.id);
});
actions.appendChild(deleteBtn);
}
block.appendChild(actions);
els.approvalsList.appendChild(block);
@@ -2863,6 +2887,32 @@ async function decideApproval(id, approve) {
}
}
async function deleteApprovalEntry(id) {
clearMessages("approvals");
try {
await api(`/v1/approvals/${encodeURIComponent(id)}`, {
method: "DELETE"
});
await refreshApprovals();
renderMessage(els.approvalsMessage, "Freigabe-Eintrag geloescht", false, true);
} catch (error) {
renderMessage(els.approvalsMessage, error.message, true);
}
}
async function deleteActivityEntry(id) {
clearMessages("activity");
try {
await api(`/v1/activity-log/${encodeURIComponent(id)}`, {
method: "DELETE"
});
await refreshActivityLog();
renderMessage(els.activityMessage, "Aktivitaets-Eintrag geloescht", false, true);
} catch (error) {
renderMessage(els.activityMessage, error.message, true);
}
}
function renderStatus() {
const status = state.status;
if (!status) {