diff --git a/wwwroot/js/data.js b/wwwroot/js/data.js index 623f4a0..db97d7a 100644 --- a/wwwroot/js/data.js +++ b/wwwroot/js/data.js @@ -1,5 +1,5 @@ import { api, adminApi } from "./api.js"; -import { handleAuthError, renderAllSuggestions, renderCounts, renderMySuggestions, renderPhasePill, renderPhaseTitles, renderResults, renderVotes, renderWelcome, setAuthUI, syncVoteScores, updatePhaseNav } from "./ui.js"; +import { handleAuthError, renderAllSuggestions, renderCounts, renderMySuggestions, renderPhasePill, renderPhaseTitles, renderResults, renderVotes, renderWelcome, setAuthUI, syncVoteScores, updatePhaseNav, openResultsRelockModal } from "./ui.js"; import { state, clearUserState } from "./state.js"; export async function loadState() { @@ -63,6 +63,8 @@ export async function loadResults() { export async function refreshPhaseData() { try { + const prevPhase = state.phase; + const prevResultsOpen = state.resultsOpen; await loadState(); await Promise.all([loadSuggestData(), loadRevealData(), loadResults()]); if (state.phase === "Vote") { @@ -74,6 +76,14 @@ export async function refreshPhaseData() { if (state.me?.isAdmin) { state.adminVoteStatus = await adminApi.voteStatus(); } + if ( + prevPhase === "Results" && + state.phase === "Vote" && + prevResultsOpen && + !state.resultsOpen + ) { + openResultsRelockModal(); + } updatePhaseNav(); } catch (err) { if (handleAuthError(err, clearUserState)) return; diff --git a/wwwroot/js/i18n.js b/wwwroot/js/i18n.js index 064352e..55f7d6c 100644 --- a/wwwroot/js/i18n.js +++ b/wwwroot/js/i18n.js @@ -105,6 +105,9 @@ const translations = { "results.links": "Links", "results.link.site": "Site ↗", "results.link.youtube": "YouTube ↗", + "results.relockedTitle": "Results closed", + "results.relockedBody": "Results have been locked again. You’re back in the voting phase and your finalized status was cleared. Adjust scores and re-finalize when ready.", + "results.relockedConfirm": "Got it", "admin.title": "Admin", "admin.tools": "Admin tools", @@ -274,6 +277,9 @@ const translations = { "results.links": "Links", "results.link.site": "Webseite ↗", "results.link.youtube": "YouTube ↗", + "results.relockedTitle": "Ergebnisse geschlossen", + "results.relockedBody": "Die Ergebnisse wurden wieder gesperrt. Du bist zurück in der Bewertungsphase und deine Finalisierung wurde zurückgesetzt. Passe deine Bewertungen an und schließe erneut ab, wenn du bereit bist.", + "results.relockedConfirm": "Verstanden", "admin.title": "Admin", "admin.tools": "Admin-Werkzeuge", diff --git a/wwwroot/js/ui.js b/wwwroot/js/ui.js index 9693ecb..c4bc231 100644 --- a/wwwroot/js/ui.js +++ b/wwwroot/js/ui.js @@ -724,6 +724,16 @@ export function openLightbox(url, title) { document.body.appendChild(overlay); } +export function openResultsRelockModal() { + openConfirmModal({ + title: t("results.relockedTitle"), + body: t("results.relockedBody"), + confirmLabel: t("results.relockedConfirm"), + cancelLabel: t("modal.close"), + onConfirm: (close) => close(), + }); +} + export function openConfirmModal({ title, body, confirmLabel, cancelLabel = t("modal.cancel"), onConfirm }) { const overlay = document.createElement("div"); overlay.className = "edit-modal";