import { AbstractStateSubscriberWebComponent } from "../util/AbstractStateSubscriberWebComponent.js";
import { registerElement } from "../../renderer/registerElement.js";
export class AircraftInfoWebComponent extends AbstractStateSubscriberWebComponent {
private isInitialized = false;
private elements!: {
aircraftName: HTMLSpanElement;
aircraftIcaoCode: HTMLOutputElement;
aircraftCruiseSpeed: HTMLOutputElement;
aircraftCruiseAltitude: HTMLOutputElement;
};
private initialize() {
this.setAttribute("aria-role", "region");
this.innerHTML = `\
Aircraft
kts
ft
`;
this.elements = {
aircraftName: this.querySelector("h3 span") as HTMLSpanElement,
aircraftIcaoCode: this.querySelector("#aircraft-icao") as HTMLOutputElement,
aircraftCruiseSpeed: this.querySelector("#aircraft-cruise-speed") as HTMLOutputElement,
aircraftCruiseAltitude: this.querySelector("#aircraft-cruise-altitude") as HTMLOutputElement,
};
}
connectedCallback() {
if (!this.isInitialized) {
this.initialize();
this.isInitialized = true;
}
this.subscribeToStateUpdates((state) => {
this.elements.aircraftName.innerText = state.aircraftData?.nameFull ?? "Aircraft data";
this.elements.aircraftIcaoCode.value = state.aircraftData?.icaoCode ?? "---";
this.elements.aircraftCruiseSpeed.value = this.numberFormat(state.aircraftData?.cruiseSpeedKts);
this.elements.aircraftCruiseAltitude.value = this.numberFormat(state.aircraftData?.cruiseAltitudeFt);
});
}
static registerElement() {
registerElement("startgeraet-aircraft-info", AircraftInfoWebComponent);
}
private numberFormat(value: number | undefined): string {
if (value === undefined) {
return "---";
}
return new Intl.NumberFormat(document.documentElement.lang, {
minimumFractionDigits: 0,
maximumFractionDigits: 0,
}).format(value);
}
}