front: redirect to last visited page after login

This commit is contained in:
AdrienLSH 2024-01-19 10:54:14 +01:00
parent e1e6e6c1ab
commit 60a3e02420
4 changed files with 23 additions and 17 deletions

View File

@ -22,6 +22,7 @@ import TournamentCreateView from "./views/tournament/TournamentCreateView.js";
let client = new Client(location.protocol + "//" + location.host) let client = new Client(location.protocol + "//" + location.host)
let lastView = undefined let lastView = undefined
let lastPageUrlBeforeLogin = undefined
const pathToRegex = path => new RegExp("^" + path.replace(/\//g, "\\/").replace(/:\w+/g, "(.+)") + "$"); const pathToRegex = path => new RegExp("^" + path.replace(/\//g, "\\/").replace(/:\w+/g, "(.+)") + "$");
@ -106,12 +107,14 @@ const router = async(uri) => {
if (lastView !== undefined) if (lastView !== undefined)
await lastView.leavePage(); await lastView.leavePage();
const view = new match.route.view(getParams(match)); const view = new match.route.view(getParams(match), lastPageUrlBeforeLogin);
if (view instanceof AbstractRedirectView && await view.redirect()) if (view instanceof AbstractRedirectView && await view.redirect())
return 1; return 1;
lastView = view; lastView = view;
if (uri !== '/login' && uri !== '/register' && uri !== '/logout')
lastPageUrlBeforeLogin = uri;
if (await renderView(view)) if (await renderView(view))
return 1; return 1;

View File

@ -2,7 +2,7 @@ import { client, navigateTo } from "../../index.js";
import { clear, fill_errors } from "../../utils/formUtils.js"; import { clear, fill_errors } from "../../utils/formUtils.js";
import AbstractNonAuthentifiedView from "../abstracts/AbstractNonAuthentified.js"; import AbstractNonAuthentifiedView from "../abstracts/AbstractNonAuthentified.js";
async function login() async function login(redirectTo = '/home')
{ {
clear('innerHTML', ['username', 'password', 'login']); clear('innerHTML', ['username', 'password', 'login']);
@ -23,7 +23,7 @@ async function login()
if (response.status == 200) { if (response.status == 200) {
await client.notice.disconnect(); await client.notice.disconnect();
await client.notice.connect(); await client.notice.connect();
navigateTo("/home"); navigateTo(redirectTo);
} else { } else {
let error = await response.json(); let error = await response.json();
fill_errors(error, "innerHTML"); fill_errors(error, "innerHTML");
@ -31,8 +31,9 @@ async function login()
} }
export default class extends AbstractNonAuthentifiedView { export default class extends AbstractNonAuthentifiedView {
constructor(params) { constructor(params, lastUrlBeforeLogin = '/home') {
super(params, "Login", "/home"); super(params, "Login", lastUrlBeforeLogin);
this.redirectTo = lastUrlBeforeLogin;
} }
async postInit() async postInit()
@ -40,15 +41,15 @@ export default class extends AbstractNonAuthentifiedView {
let usernameField = document.getElementById('usernameInput'); let usernameField = document.getElementById('usernameInput');
usernameField.addEventListener('keydown', ev => { usernameField.addEventListener('keydown', ev => {
if (ev.key === 'Enter') if (ev.key === 'Enter')
login(); login(this.redirectTo);
}); });
usernameField.focus(); usernameField.focus();
let passwordField = document.getElementById('passwordInput'); let passwordField = document.getElementById('passwordInput');
passwordField.addEventListener('keydown', ev => { passwordField.addEventListener('keydown', ev => {
if (ev.key === 'Enter') if (ev.key === 'Enter')
login(); login(this.redirectTo);
}); });
document.getElementById('loginButton').onclick = login; document.getElementById('loginButton').onclick = _ => login(this.redirectTo);
} }
async getHtml() { async getHtml() {

View File

@ -3,13 +3,14 @@ import AbstractAuthentifiedView from "../abstracts/AbstractAuthentifiedView.js";
export default class extends AbstractAuthentifiedView export default class extends AbstractAuthentifiedView
{ {
constructor(params) { constructor(params, lastPageUrl = '/login') {
super(params, "Logout"); super(params, "Logout");
this.lastPageUrl = lastPageUrl;
} }
async postInit() { async postInit() {
await client.logout(); await client.logout();
await client.notice.disconnect(); await client.notice.disconnect();
navigateTo("/login") navigateTo(this.lastPageUrl);
} }
} }

View File

@ -2,7 +2,7 @@ import { client, navigateTo } from "../../index.js";
import { clear, fill_errors } from "../../utils/formUtils.js"; import { clear, fill_errors } from "../../utils/formUtils.js";
import AbstractNonAuthentifiedView from "../abstracts/AbstractNonAuthentified.js"; import AbstractNonAuthentifiedView from "../abstracts/AbstractNonAuthentified.js";
async function register() async function register(redirectTo = '/home')
{ {
let username = document.getElementById("usernameInput").value; let username = document.getElementById("usernameInput").value;
let password = document.getElementById("passwordInput").value; let password = document.getElementById("passwordInput").value;
@ -20,7 +20,7 @@ async function register()
if (response_data == null) if (response_data == null)
{ {
navigateTo("/home"); navigateTo(redirectTo);
return; return;
} }
@ -29,8 +29,9 @@ async function register()
} }
export default class extends AbstractNonAuthentifiedView { export default class extends AbstractNonAuthentifiedView {
constructor(params) { constructor(params, lastUrlBeforeLogin = '/home') {
super(params, "Register", "/home"); super(params, "Register", lastUrlBeforeLogin);
this.redirectTo = lastUrlBeforeLogin;
} }
async postInit() async postInit()
@ -38,15 +39,15 @@ export default class extends AbstractNonAuthentifiedView {
let usernameField = document.getElementById('usernameInput'); let usernameField = document.getElementById('usernameInput');
usernameField.addEventListener('keydown', ev => { usernameField.addEventListener('keydown', ev => {
if (ev.key === 'Enter') if (ev.key === 'Enter')
register(); register(this.redirectTo);
}); });
usernameField.focus(); usernameField.focus();
let passwordField = document.getElementById('passwordInput'); let passwordField = document.getElementById('passwordInput');
passwordField.addEventListener('keydown', ev => { passwordField.addEventListener('keydown', ev => {
if (ev.key === 'Enter') if (ev.key === 'Enter')
register(); register(this.redirectTo);
}); });
document.getElementById("registerButton").onclick = register; document.getElementById("registerButton").onclick = _ => register(this.redirectTo);
} }
async getHtml() { async getHtml() {