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`
+
+
`;
+ }
+}