diff --git a/resources/lang/en.json b/resources/lang/en.json index 931304a3e..341dfaf6e 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -6,6 +6,7 @@ "lang_code": "en" }, "common": { + "not_logged_in": "Not logged in", "close": "Close", "copy": "Copy", "paste": "Paste", @@ -912,7 +913,6 @@ "territory_patterns": { "title": "Skins", "purchase": "Purchase", - "not_logged_in": "Not logged in", "pattern": { "default": "Default" }, diff --git a/src/client/FlagInputModal.ts b/src/client/FlagInputModal.ts index 03a19b69a..ff27763f8 100644 --- a/src/client/FlagInputModal.ts +++ b/src/client/FlagInputModal.ts @@ -9,6 +9,7 @@ import { fetchCosmetics, flagRelationship } from "./Cosmetics"; import { translateText } from "./Utils"; import { BaseModal } from "./components/BaseModal"; import "./components/FlagButton"; +import "./components/NotLoggedInWarning"; import { modalHeader } from "./components/ui/ModalHeader"; @customElement("flag-input-modal") @@ -103,6 +104,7 @@ export class FlagInputModal extends BaseModal { title: translateText("flag_input.title"), onBack: () => this.close(), ariaLabel: translateText("common.back"), + rightContent: html``, })}
diff --git a/src/client/Store.ts b/src/client/Store.ts index 5cf67cdc8..d6d469518 100644 --- a/src/client/Store.ts +++ b/src/client/Store.ts @@ -5,9 +5,9 @@ import { UserMeResponse } from "../core/ApiSchemas"; import { ColorPalette, Cosmetics, Pattern } from "../core/CosmeticSchemas"; import { UserSettings } from "../core/game/UserSettings"; import { PlayerPattern } from "../core/Schemas"; -import { hasLinkedAccount } from "./Api"; import { BaseModal } from "./components/BaseModal"; import "./components/FlagButton"; +import "./components/NotLoggedInWarning"; import "./components/PatternButton"; import { modalHeader } from "./components/ui/ModalHeader"; import { @@ -77,11 +77,7 @@ export class StoreModal extends BaseModal { title: translateText("store.title"), onBack: () => this.close(), ariaLabel: translateText("common.back"), - rightContent: !hasLinkedAccount(this.userMeResponse) - ? html`
- ${this.renderNotLoggedInWarning()} -
` - : undefined, + rightContent: html``, })}
`; - } - render() { if (!this.isActive && !this.inline) return html``; diff --git a/src/client/TerritoryPatternsModal.ts b/src/client/TerritoryPatternsModal.ts index 5a13266b0..9d9c995ed 100644 --- a/src/client/TerritoryPatternsModal.ts +++ b/src/client/TerritoryPatternsModal.ts @@ -5,8 +5,8 @@ import { UserMeResponse } from "../core/ApiSchemas"; import { Cosmetics, Pattern } from "../core/CosmeticSchemas"; import { UserSettings } from "../core/game/UserSettings"; import { PlayerPattern } from "../core/Schemas"; -import { hasLinkedAccount } from "./Api"; import { BaseModal } from "./components/BaseModal"; +import "./components/NotLoggedInWarning"; import "./components/PatternButton"; import { modalHeader } from "./components/ui/ModalHeader"; import { @@ -123,18 +123,6 @@ export class TerritoryPatternsModal extends BaseModal { `; } - private renderNotLoggedInWarning(): TemplateResult { - return html``; - } - render() { const content = html`
@@ -145,11 +133,7 @@ export class TerritoryPatternsModal extends BaseModal { title: translateText("territory_patterns.title"), onBack: () => this.close(), ariaLabel: translateText("common.back"), - rightContent: !hasLinkedAccount(this.userMeResponse) - ? html`
- ${this.renderNotLoggedInWarning()} -
` - : undefined, + rightContent: html``, })}
diff --git a/src/client/components/NotLoggedInWarning.ts b/src/client/components/NotLoggedInWarning.ts new file mode 100644 index 000000000..6b972b8f0 --- /dev/null +++ b/src/client/components/NotLoggedInWarning.ts @@ -0,0 +1,49 @@ +import { LitElement, html } from "lit"; +import { customElement, state } from "lit/decorators.js"; +import { UserMeResponse } from "../../core/ApiSchemas"; +import { hasLinkedAccount } from "../Api"; + +@customElement("not-logged-in-warning") +export class NotLoggedInWarning extends LitElement { + @state() private linked = false; + + private _onUserMe = (event: CustomEvent) => { + this.linked = hasLinkedAccount(event.detail); + }; + + createRenderRoot() { + return this; + } + + connectedCallback() { + super.connectedCallback(); + document.addEventListener( + "userMeResponse", + this._onUserMe as EventListener, + ); + } + + disconnectedCallback() { + super.disconnectedCallback(); + document.removeEventListener( + "userMeResponse", + this._onUserMe as EventListener, + ); + } + + render() { + if (this.linked) return html``; + + return html`
+ +
`; + } +}