feat(spa): add host/player route session guards
All checks were successful
CI / test-and-quality (push) Successful in 2m30s
CI / test-and-quality (pull_request) Successful in 2m6s

This commit is contained in:
2026-03-01 16:01:26 +00:00
parent f3ea19fcd7
commit 8ba737be7f
3 changed files with 147 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
import { CommonModule } from '@angular/common';
import { Component } from '@angular/core';
import { Component, OnInit } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { createApiClient } from '../../../../../src/api/client';
@@ -70,7 +70,7 @@ interface LeaderboardResponse {
</div>
`,
})
export class HostShellComponent {
export class HostShellComponent implements OnInit {
sessionCode = '';
categorySlug = 'general';
roundQuestionId = '';
@@ -87,6 +87,22 @@ export class HostShellComponent {
private readonly controller = createVerticalSliceController(createApiClient());
ngOnInit(): void {
const hashRoute = window.location.hash.replace(/^#\/?/, '');
const match = hashRoute.match(/^host(?:\/[^/]+)?(?:\/([^/?#]+))?/i);
const codeFromRoute = match?.[1] ?? '';
const storedCode = window.sessionStorage.getItem('wpp.host-session-code') ?? '';
const candidate = codeFromRoute || storedCode;
if (!candidate) {
return;
}
this.sessionCode = this.normalizeCode(candidate);
window.sessionStorage.setItem('wpp.host-session-code', this.sessionCode);
void this.refreshSession();
}
private normalizeCode(value: string): string {
return value.trim().toUpperCase();
}
@@ -123,6 +139,7 @@ export class HostShellComponent {
}
this.session = state.session as SessionDetail;
this.sessionCode = this.session.session.code;
window.sessionStorage.setItem('wpp.host-session-code', this.sessionCode);
this.roundQuestionId = this.session.round_question?.id ? String(this.session.round_question.id) : '';
if (this.session.session.status !== 'finished') {
this.resetFinalLeaderboard();
@@ -142,6 +159,7 @@ export class HostShellComponent {
}
this.session = state.session as SessionDetail;
this.sessionCode = this.session.session.code;
window.sessionStorage.setItem('wpp.host-session-code', this.sessionCode);
this.roundQuestionId = this.session.round_question?.id ? String(this.session.round_question.id) : '';
this.scoreboardPayload = '';
this.resetFinalLeaderboard();