import { LitElement, css, html } from "lit"; import { customElement, state } from "lit/decorators.js"; import Countries from "./data/countries.json"; const flagKey: string = "flag"; @customElement("flag-input") export class FlagInput extends LitElement { @state() private flag: string = ""; @state() private search: string = ""; @state() private showModal: boolean = false; static styles = css` @media (max-width: 768px) { .flag-modal { width: 80vw; } .dropdown-item { width: calc(100% / 3 - 15px); } } `; private handleSearch(e: Event) { this.search = String((e.target as HTMLInputElement).value); } private setFlag(flag: string) { if (flag === "xx") { flag = ""; } this.flag = flag; this.showModal = false; this.storeFlag(flag); } public getCurrentFlag(): string { return this.flag; } private getStoredFlag(): string { const storedFlag = localStorage.getItem(flagKey); if (storedFlag) { return storedFlag; } return ""; } private storeFlag(flag: string) { if (flag) { localStorage.setItem(flagKey, flag); } else if (flag === "") { localStorage.removeItem(flagKey); } } private dispatchFlagEvent() { this.dispatchEvent( new CustomEvent("flag-change", { detail: { flag: this.flag }, bubbles: true, composed: true, }), ); } connectedCallback() { super.connectedCallback(); this.flag = this.getStoredFlag(); this.dispatchFlagEvent(); } createRenderRoot() { return this; } render() { return html`