import { sendToMain } from "../../renderer/sendToMain.js"; import { AbstractStateSubscriberWebComponent } from "../util/AbstractStateSubscriberWebComponent.js"; import { registerElement } from "../../renderer/registerElement.js"; export type WindWebComponentState = { speed_kts: number; gust_kts: number; directionInDegree: number; }; export class WindWebComponent extends AbstractStateSubscriberWebComponent { private isInitialized = false; private elements!: { windSpeed: HTMLInputElement; windGust: HTMLInputElement; windDirection: HTMLInputElement; }; private initialize() { this.setAttribute("aria-role", "region"); this.innerHTML = `\
kts
kts
°
`; this.elements = { windSpeed: this.querySelector("#wind-speed") as HTMLInputElement, windGust: this.querySelector("#wind-gust") as HTMLInputElement, windDirection: this.querySelector("#wind-direction") as HTMLInputElement, }; } get state(): WindWebComponentState { return { speed_kts: this.elements.windSpeed.valueAsNumber || 0, gust_kts: this.elements.windGust.valueAsNumber || 0, directionInDegree: this.elements.windDirection.valueAsNumber || 0, }; } connectedCallback() { if (!this.isInitialized) { this.initialize(); this.isInitialized = true; } this.subscribeToStateUpdates((state) => { this.elements.windSpeed.valueAsNumber = Math.round(state.aeroflyFlight.wind.speed_kts); this.elements.windGust.valueAsNumber = Math.round(state.aeroflyFlight.wind.gust_kts); this.elements.windDirection.valueAsNumber = Math.round(state.aeroflyFlight.wind.directionInDegree); this.elements.windGust.classList.toggle( "input-warning", state.aeroflyFlight.wind.gust_kts !== 0 && state.aeroflyFlight.wind.gust_kts <= state.aeroflyFlight.wind.speed_kts, ); }); this.addEventListener("input", this.handleChange); } disconnectedCallback(): void { super.disconnectedCallback(); this.removeEventListener("input", this.handleChange); } private handleChange = () => { this.elements.windDirection.valueAsNumber = (this.elements.windDirection.valueAsNumber + 360) % 360; sendToMain("wind:set", this.state); }; static registerElement() { registerElement("startgeraet-wind", WindWebComponent); } }