Implement admin back-pass flow and guarded admin actions

This commit is contained in:
2026-02-08 14:20:38 +01:00
parent 4ee327fb4e
commit 5595bfd3b1
25 changed files with 572 additions and 109 deletions

View File

@@ -42,6 +42,7 @@ export function renderVotes() {
li.querySelector(".card-body").appendChild(footer);
list.appendChild(li);
});
state.displayedVoteSuggestionsSig = state.allSuggestionsSig;
updatePhaseNav();
updateMissingBadgeFromDom();
list.scrollTop = prevScroll;
@@ -202,9 +203,11 @@ export function updatePhaseNav() {
showNav("nav-suggest", phase === "Suggest");
showNav("nav-vote", phase === "Vote");
const playerCanMoveBackToSuggest =
!isAdmin && phase === "Vote" && state.hasJoker;
const jokerBtn = $("open-joker-modal");
if (jokerBtn) {
const showJoker = phase === "Vote" && state.hasJoker;
const showJoker = false;
jokerBtn.classList.toggle("hidden", !showJoker);
jokerBtn.disabled = !showJoker;
}
@@ -242,11 +245,14 @@ export function updatePhaseNav() {
renderAdminLinker();
updateMissingBadgeFromDom();
const backButtons = ["nav-vote-prev"];
backButtons.forEach((id) => {
const btn = $(id);
if (btn) btn.classList.toggle("hidden", !isAdmin);
});
const votePrev = $("nav-vote-prev");
if (votePrev) {
const canUseBack = isAdmin || playerCanMoveBackToSuggest;
votePrev.classList.toggle("hidden", !canUseBack);
votePrev.textContent = playerCanMoveBackToSuggest
? t("nav.backToSuggestOnce")
: t("nav.prev");
}
const suggestNext = $("nav-suggest-next");
if (suggestNext) {
@@ -268,8 +274,10 @@ export function updatePhaseNav() {
: t("nav.next");
}
const adminResultsToggle = $("results-open");
const adminResultsToggle = $("results-open-toggle");
if (adminResultsToggle) {
adminResultsToggle.checked = !!state.resultsOpen;
adminResultsToggle.textContent = state.resultsOpen
? t("admin.resultsOpenButtonDisable")
: t("admin.resultsOpenButtonEnable");
}
}