From dec1f99a5fbfdafb348d30fa0f7a03f84b0d5d9e Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 10 Aug 2020 09:36:01 +0200 Subject: [PATCH] Fix hassio panel dark mode (#6569) --- hassio/src/hassio-main.ts | 51 ++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/hassio/src/hassio-main.ts b/hassio/src/hassio-main.ts index d20c690e30..7d55a23378 100644 --- a/hassio/src/hassio-main.ts +++ b/hassio/src/hassio-main.ts @@ -28,15 +28,7 @@ export class HassioMain extends urlSyncMixin(ProvideHassLitMixin(LitElement)) { protected firstUpdated(changedProps: PropertyValues) { super.firstUpdated(changedProps); - applyThemesOnElement( - this.parentElement, - this.hass.themes, - (atLeastVersion(this.hass.config.version, 0, 114) - ? this.hass.selectedTheme?.theme - : ((this.hass.selectedTheme as unknown) as string)) || - this.hass.themes.default_theme, - this.hass.selectedTheme - ); + this._applyTheme(); // Paulus - March 17, 2019 // We went to a single hass-toggle-menu event in HA 0.90. However, the @@ -73,6 +65,17 @@ export class HassioMain extends urlSyncMixin(ProvideHassLitMixin(LitElement)) { makeDialogManager(this, this.shadowRoot!); } + protected updated(changedProps: PropertyValues) { + super.updated(changedProps); + const oldHass = changedProps.get("hass") as HomeAssistant | undefined; + if (!oldHass) { + return; + } + if (oldHass.themes !== this.hass.themes) { + this._applyTheme(); + } + } + protected render() { return html` `; } + + private _applyTheme() { + let themeName: string; + let options: Partial | undefined; + + if (atLeastVersion(this.hass.config.version, 0, 114)) { + themeName = + this.hass.selectedTheme?.theme || + (this.hass.themes.darkMode && this.hass.themes.default_dark_theme + ? this.hass.themes.default_dark_theme! + : this.hass.themes.default_theme); + + options = this.hass.selectedTheme; + if (themeName === "default" && options?.dark === undefined) { + options = { + ...this.hass.selectedTheme, + dark: this.hass.themes.darkMode, + }; + } + } else { + themeName = (this.hass.selectedTheme as unknown) as string; + } + + applyThemesOnElement( + this.parentElement, + this.hass.themes, + themeName, + options + ); + } } declare global {