// retoor <retoor@molodetz.nl>
import { Http } from "./Http.js";
class AwardGiver {
constructor() {
this.btn = document.querySelector("[data-award-give]");
this.modal = document.getElementById("award-give-modal");
if (!this.btn || !this.modal) return;
this.form = this.modal.querySelector("form");
this.textarea = this.modal.querySelector('textarea[name="description"]');
this.counter = this.modal.querySelector("[data-award-char-count]");
this.btn.addEventListener("click", () => this.open());
if (this.form) {
this.form.addEventListener("submit", (event) => this.submit(event));
}
if (this.textarea) {
this.textarea.addEventListener("input", () => this.updateCounter());
this.updateCounter();
}
}
open() {
if (this.btn.disabled) return;
this.modal.classList.add("visible");
if (this.textarea) {
this.textarea.focus();
}
}
updateCounter() {
if (!this.counter || !this.textarea) return;
const max = Number(this.textarea.getAttribute("maxlength") || 125);
const length = this.textarea.value.length;
this.counter.textContent = `${length}/${max}`;
}
async submit(event) {
event.preventDefault();
const username = this.btn.dataset.username;
const description = (this.textarea?.value || "").trim();
if (!description) return;
const submitBtn = this.form.querySelector('button[type="submit"]');
if (submitBtn) submitBtn.disabled = true;
try {
await Http.postJson(`/profile/${username}/award`, { description });
this.modal.classList.remove("visible");
if (this.form) this.form.reset();
this.updateCounter();
await window.app.dialog.alert({
title: "Award submitted",
message: `Your award for @${username} is being created. They will be notified when it is ready.`,
});
} catch {
await window.app.dialog.alert({
title: "Award failed",
message: "Could not submit the award. Try again later.",
});
} finally {
if (submitBtn) submitBtn.disabled = false;
}
}
}
window.AwardGiver = AwardGiver;
export { AwardGiver };