Keep vote warnings until save succeeds
This commit is contained in:
@@ -198,11 +198,13 @@ export function renderVotes() {
|
||||
input.addEventListener("input", (e) => {
|
||||
if (state.votesFinal) return;
|
||||
const val = Number(e.target.value);
|
||||
$("score-" + e.target.dataset.id).textContent = val;
|
||||
const emojiEl = $("emoji-" + e.target.dataset.id);
|
||||
const id = e.target.dataset.id;
|
||||
$("score-" + id).textContent = val;
|
||||
const emojiEl = $("emoji-" + id);
|
||||
if (emojiEl) emojiEl.textContent = scoreToEmoji(val);
|
||||
const warn = $("warn-" + e.target.dataset.id);
|
||||
if (warn) warn.classList.add("hidden");
|
||||
const warn = $("warn-" + id);
|
||||
if (warn) warn.classList.remove("hidden");
|
||||
e.target.dataset.pending = "1";
|
||||
syncLinkedSliders(e.target, val);
|
||||
updateMissingBadgeFromDom();
|
||||
});
|
||||
@@ -210,11 +212,30 @@ export function renderVotes() {
|
||||
if (state.votesFinal) return;
|
||||
const suggestionId = Number(e.target.dataset.id);
|
||||
const score = Number(e.target.value);
|
||||
const prevScore = votesMap[suggestionId];
|
||||
const resetUi = () => {
|
||||
const label = $("score-" + suggestionId);
|
||||
const emoji = $("emoji-" + suggestionId);
|
||||
const warn = $("warn-" + suggestionId);
|
||||
const fallbackValue = prevScore ?? 5;
|
||||
const fallbackDisplay = prevScore ?? "—";
|
||||
const fallbackEmoji = prevScore != null ? scoreToEmoji(prevScore) : "⚠️";
|
||||
e.target.value = fallbackValue;
|
||||
if (label) label.textContent = fallbackDisplay;
|
||||
if (emoji) emoji.textContent = fallbackEmoji;
|
||||
if (warn) warn.classList.remove("hidden");
|
||||
};
|
||||
try {
|
||||
await api.vote(suggestionId, score);
|
||||
toast(t("vote.saved"));
|
||||
delete e.target.dataset.pending;
|
||||
const warn = $("warn-" + suggestionId);
|
||||
if (warn) warn.classList.add("hidden");
|
||||
await window.loadVoteData();
|
||||
updateMissingBadgeFromDom();
|
||||
} catch (err) {
|
||||
delete e.target.dataset.pending;
|
||||
resetUi();
|
||||
toast(err.message, true);
|
||||
}
|
||||
});
|
||||
@@ -743,12 +764,8 @@ function updateMissingBadgeFromDom() {
|
||||
badge.classList.add("hidden");
|
||||
return;
|
||||
}
|
||||
const sliders = document.querySelectorAll("#vote-list input[type=range]");
|
||||
const missing = Array.from(sliders).some((slider) => {
|
||||
const scoreLabel = $("score-" + slider.dataset.id);
|
||||
return !scoreLabel || scoreLabel.textContent === "—";
|
||||
});
|
||||
badge.classList.toggle("hidden", !missing);
|
||||
const missing = missingVotesCount();
|
||||
badge.classList.toggle("hidden", missing === 0);
|
||||
}
|
||||
|
||||
function renderAdminVoteStatus() {
|
||||
@@ -987,7 +1004,8 @@ function syncLinkedSliders(sourceEl, value) {
|
||||
const emojiEl = $("emoji-" + id);
|
||||
if (emojiEl) emojiEl.textContent = scoreToEmoji(Number(value));
|
||||
const warn = $("warn-" + id);
|
||||
if (warn) warn.classList.add("hidden");
|
||||
if (warn) warn.classList.remove("hidden");
|
||||
slider.dataset.pending = "1";
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user