Make "Not Logged In" button open Account modal & fix Account loading state (#3247)

## Description:

**TerritoryPatternsModal.ts**
- Changed the "Not Logged In" indicator from a static `div` to a
clickable `button`
- Clicking it now closes the skins modal and navigates to the Account
page via `window.showPage("page-account")`
- Added hover effect (`hover:bg-red-500/30`) for visual feedback

**AccountModal.ts**
- Fixed the inline Account modal's loading state ("Fetching account
information...") rendering without a background or header (white text on
light background 💀)
- The loading spinner is now wrapped in `modalContainerClass` (dark
glassmorphic background) with a proper `modalHeader` including the title
and back button, matching the loaded state's appearance

**SinglePlayerModal.ts**
- Changed the "Sign in for achievements" banner from a static `div` to a
clickable `button` that closes the modal and navigates to the Account
page
- Added hover effect for visual feedback

**Matchmaking.ts**
- When the "You must be logged in to play ranked matchmaking" toast
appears, the user is now also navigated to the Account page so they can
log in immediately

## Please complete the following:

- [X] I have added screenshots for all UI updates
- [X] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [X] I have added relevant tests to the test directory
- [X] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced

## Please put your Discord username so you can be contacted if a bug or
regression is found:

FloPinguin
This commit is contained in:
FloPinguin
2026-02-19 19:01:27 +01:00
committed by GitHub
parent 70f2abb181
commit bb1ddfbcaa
4 changed files with 25 additions and 7 deletions
+10 -1
View File
@@ -67,7 +67,16 @@ export class AccountModal extends BaseModal {
: this.renderInner();
if (this.inline) {
return content;
return this.isLoadingUser
? html`<div class="${this.modalContainerClass}">
${modalHeader({
title: translateText("account_modal.title"),
onBack: () => this.close(),
ariaLabel: translateText("common.back"),
})}
${content}
</div>`
: content;
}
return html`
+1
View File
@@ -152,6 +152,7 @@ export class MatchmakingModal extends BaseModal {
}),
);
this.close();
window.showPage?.("page-account");
return;
}
+7 -3
View File
@@ -119,11 +119,15 @@ export class SinglePlayerModal extends BaseModal {
if (crazyGamesSDK.isOnCrazyGames()) {
return html``;
}
return html`<div
class="px-3 py-2 text-xs font-bold uppercase tracking-wider transition-colors duration-200 rounded-lg bg-yellow-500/20 text-yellow-400 border border-yellow-500/30 whitespace-nowrap shrink-0"
return html`<button
class="px-3 py-2 text-xs font-bold uppercase tracking-wider transition-colors duration-200 rounded-lg bg-yellow-500/20 text-yellow-400 border border-yellow-500/30 whitespace-nowrap shrink-0 cursor-pointer hover:bg-yellow-500/30"
@click=${() => {
this.close();
window.showPage?.("page-account");
}}
>
${translateText("single_modal.sign_in_for_achievements")}
</div>`;
</button>`;
}
private applyAchievements(userMe: UserMeResponse | false) {
+7 -3
View File
@@ -220,11 +220,15 @@ export class TerritoryPatternsModal extends BaseModal {
}
private renderNotLoggedInWarning(): TemplateResult {
return html`<div
class="px-4 py-2 text-xs font-bold uppercase tracking-wider transition-colors duration-200 rounded-lg bg-red-500/20 text-red-400 border border-red-500/30"
return html`<button
class="px-4 py-2 text-xs font-bold uppercase tracking-wider transition-colors duration-200 rounded-lg bg-red-500/20 text-red-400 border border-red-500/30 cursor-pointer hover:bg-red-500/30"
@click=${() => {
this.close();
window.showPage?.("page-account");
}}
>
${translateText("territory_patterns.not_logged_in")}
</div>`;
</button>`;
}
private renderColorSwatchGrid(): TemplateResult {