diff --git a/hassio/src/ingress-view/hassio-ingress-view.ts b/hassio/src/ingress-view/hassio-ingress-view.ts index 417954398f21..12cde3d4a110 100644 --- a/hassio/src/ingress-view/hassio-ingress-view.ts +++ b/hassio/src/ingress-view/hassio-ingress-view.ts @@ -46,9 +46,22 @@ class HassioIngressView extends LitElement { private _fetchDataTimeout?: number; + private _messageListener = (ev: MessageEvent) => { + if (this._addon?.webui_ha_aware && ev.data?.type === "toggle-sidebar") { + this._toggleMenu(); + } + }; + + public connectedCallback() { + super.connectedCallback(); + window.addEventListener("message", this._messageListener); + } + public disconnectedCallback() { super.disconnectedCallback(); + window.removeEventListener("message", this._messageListener); + if (this._sessionKeepAlive) { clearInterval(this._sessionKeepAlive); this._sessionKeepAlive = undefined; @@ -83,17 +96,25 @@ class HassioIngressView extends LitElement { `; } - return html`${this.narrow || this.hass.dockedSidebar === "always_hidden" - ? html`
- -
${this._addon.name}
-
- ${iframe}` - : iframe}`; + // If webui_ha_aware is true, or if narrow or sidebar is always hidden, + // don't render the header and just render the iframe + if ( + this._addon.webui_ha_aware || + this.narrow || + this.hass.dockedSidebar === "always_hidden" + ) { + return iframe; + } + + return html`
+ +
${this._addon.name}
+
+ ${iframe}`; } protected async firstUpdated(): Promise { diff --git a/src/data/hassio/addon.ts b/src/data/hassio/addon.ts index 32192990f4a2..120e8664d0a6 100644 --- a/src/data/hassio/addon.ts +++ b/src/data/hassio/addon.ts @@ -112,6 +112,7 @@ export interface HassioAddonDetails extends HassioAddonInfo { translations: Record; watchdog: null | boolean; webui: null | string; + webui_ha_aware?: boolean; } export interface HassioAddonsInfo {