mirror of
https://github.com/System-End/hackatime.git
synced 2026-04-19 22:15:14 +00:00
62 lines
1.9 KiB
JavaScript
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.");
|
|
}
|
|
}
|
|
}
|