Files
archived-hc-harbor/app/javascript/controllers/trust_level_controller.js
2025-05-08 18:03:44 -04:00

57 lines
1.8 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 === 'untrusted') {
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.')
}
}
}