import { sendToMain } from "../../renderer/sendToMain.js"; import { AbstractStateSubscriberWebComponent } from "../util/AbstractStateSubscriberWebComponent.js"; import { registerElement } from "../../renderer/registerElement.js"; export type MetarInputWebComponentState = { metar: string; }; export class MetarInputWebComponent extends AbstractStateSubscriberWebComponent { private isInitialized = false; private elements!: { metar: HTMLTextAreaElement; }; get state(): MetarInputWebComponentState { return { metar: this.elements.metar.value, }; } intialize() { this.setAttribute("aria-role", "region"); this.innerHTML = `\
`; this.elements = { metar: this.querySelector("#metar-input") as HTMLTextAreaElement, }; } connectedCallback() { if (!this.isInitialized) { this.intialize(); this.isInitialized = true; } this.elements.metar.addEventListener("input", this.handleChange); this.subscribeToStateUpdates((state) => { this.elements.metar.placeholder = state.metar ?? "Enter METAR / TAF string here…"; }); } disconnectedCallback(): void { super.disconnectedCallback(); this.elements.metar.removeEventListener("input", this.handleChange); } handleChange: () => void = () => { sendToMain("metar:set", this.state); }; static registerElement() { registerElement("startgeraet-metar-input", MetarInputWebComponent); } }