From 37fa5345f51ee778a71d73a3c978f5c865f6b436 Mon Sep 17 00:00:00 2001 From: Michael Geers Date: Sun, 23 Feb 2025 11:24:47 +0100 Subject: [PATCH] Restart: improve login flow (#19084) --- assets/js/auth.js | 12 ++++++++++-- assets/js/components/HelpModal.vue | 7 ++++++- assets/js/components/LoginModal.vue | 8 +++++--- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/assets/js/auth.js b/assets/js/auth.js index b5faed53e..befa07ad3 100644 --- a/assets/js/auth.js +++ b/assets/js/auth.js @@ -7,7 +7,8 @@ import { isSystemError } from "./utils/fatal"; const auth = reactive({ configured: true, loggedIn: null, // true / false / null (unknown) - nextUrl: null, + nextUrl: null, // url to navigate to after login + nextModal: null, // modal instance to show after login }); export async function updateAuthStatus() { @@ -64,8 +65,15 @@ export function getAndClearNextUrl() { return nextUrl; } -export function openLoginModal(nextUrl = null) { +export function getAndClearNextModal() { + const nextModal = auth.nextModal; + auth.nextModal = null; + return nextModal; +} + +export function openLoginModal(nextUrl = null, nextModal = null) { auth.nextUrl = nextUrl; + auth.nextModal = nextModal; const modal = Modal.getOrCreateInstance(document.getElementById("loginModal")); modal.show(); } diff --git a/assets/js/components/HelpModal.vue b/assets/js/components/HelpModal.vue index 26cc4ee62..c8806425b 100644 --- a/assets/js/components/HelpModal.vue +++ b/assets/js/components/HelpModal.vue @@ -140,6 +140,7 @@ import Modal from "bootstrap/js/dist/modal"; import { docsPrefix } from "../i18n"; import { performRestart } from "../restart"; +import { isLoggedIn, openLoginModal } from "../auth"; export default { name: "HelpModal", @@ -156,7 +157,11 @@ export default { }, openConfirmRestartModal() { const modal = Modal.getOrCreateInstance(document.getElementById("confirmRestartModal")); - modal.show(); + if (!isLoggedIn()) { + openLoginModal(null, modal); + } else { + modal.show(); + } }, async restartConfirmed() { await performRestart(); diff --git a/assets/js/components/LoginModal.vue b/assets/js/components/LoginModal.vue index 1c15e11f2..46d352cdd 100644 --- a/assets/js/components/LoginModal.vue +++ b/assets/js/components/LoginModal.vue @@ -61,7 +61,7 @@ import GenericModal from "./GenericModal.vue"; import Modal from "bootstrap/js/dist/modal"; import api from "../api"; -import { updateAuthStatus, getAndClearNextUrl, isLoggedIn } from "../auth"; +import { updateAuthStatus, getAndClearNextUrl, getAndClearNextModal, isLoggedIn } from "../auth"; import { docsPrefix } from "../i18n"; export default { @@ -119,8 +119,10 @@ export default { await updateAuthStatus(); if (isLoggedIn()) { this.closeModal(); - const target = getAndClearNextUrl(); - if (target) this.$router.push(target); + const url = getAndClearNextUrl(); + if (url) this.$router.push(url); + const modal = getAndClearNextModal(); + if (modal) modal.show(); this.password = ""; } else { // login successful but auth cookie doesnt work