hackatime/app/javascript/controllers/trust_level_controller.js
Echo f7f2be553c
trust factor updates and more (#263)
Co-authored-by: ImgBotApp <ImgBotHelp@gmail.com>
2025-05-29 17:40:26 -04:00

62 lines
1.9 KiB
JavaScript

import { Controller } from "@hotwired/stimulus";
export default class extends Controller {
static targets = ["select"];
connect() {
this.selectTarget.addEventListener("change", this.handleChange.bind(this));
}
async handleChange(event) {
const userId = event.target.dataset.userId;
const trustLevel = event.target.value;
if (!userId) {
console.error("No user ID found in dataset");
event.target.value = event.target.dataset.currentTrustLevel;
alert("Error: No user ID found. Please try again.");
return;
}
try {
console.log("Updating trust level for user:", userId, "to:", trustLevel);
const url = new URL(
`/users/${userId}/update_trust_level`,
window.location.origin
);
const response = await fetch(url, {
method: "PATCH",
headers: {
"Content-Type": "application/json",
"X-CSRF-Token": document.querySelector('meta[name="csrf-token"]')
.content,
},
body: JSON.stringify({ trust_level: trustLevel }),
});
if (!response.ok) {
throw new Error(
`Failed to update trust level: ${response.status} ${response.statusText}`
);
}
// Update the current trust level in the dataset
event.target.dataset.currentTrustLevel = trustLevel;
// Update the leaderboard entry's omitted class
const leaderboardEntry = event.target.closest(".leaderboard-entry");
if (leaderboardEntry) {
if (trustLevel === "red") {
leaderboardEntry.classList.add("omitted");
} else {
leaderboardEntry.classList.remove("omitted");
}
}
} catch (error) {
console.error("Error updating trust level:", error);
// Revert the select to its previous value
event.target.value = event.target.dataset.currentTrustLevel;
alert("Failed to update trust level. Please try again.");
}
}
}