From 9807d0aede78f3c4a47dff8df308a2f84ea07692 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Fri, 19 Feb 2021 18:02:25 +0100 Subject: [PATCH] Move localizing to render (#8419) --- src/panels/my/ha-panel-my.ts | 68 +++++++++++++++++++++------------ src/state/translations-mixin.ts | 14 +++++-- 2 files changed, 54 insertions(+), 28 deletions(-) diff --git a/src/panels/my/ha-panel-my.ts b/src/panels/my/ha-panel-my.ts index 474c52880e..2a9887e6c3 100644 --- a/src/panels/my/ha-panel-my.ts +++ b/src/panels/my/ha-panel-my.ts @@ -127,7 +127,7 @@ class HaPanelMy extends LitElement { @property() public route!: Route; - @internalProperty() public _error = ""; + @internalProperty() public _error?: string; connectedCallback() { super.connectedCallback(); @@ -135,11 +135,7 @@ class HaPanelMy extends LitElement { if (path.startsWith("supervisor")) { if (!isComponentLoaded(this.hass, "hassio")) { - this._error = this.hass.localize( - "ui.panel.my.component_not_loaded", - "integration", - domainToName(this.hass.localize, "hassio") - ); + this._error = "no_supervisor"; return; } navigate( @@ -153,16 +149,7 @@ class HaPanelMy extends LitElement { const redirect = REDIRECTS[path]; if (!redirect) { - this._error = this.hass.localize( - "ui.panel.my.not_supported", - "link", - html`${this.hass.localize("ui.panel.my.faq_link")}` - ); + this._error = "not_supported"; return; } @@ -170,11 +157,7 @@ class HaPanelMy extends LitElement { redirect.component && !isComponentLoaded(this.hass, redirect.component) ) { - this._error = this.hass.localize( - "ui.panel.my.component_not_loaded", - "integration", - domainToName(this.hass.localize, redirect.component) - ); + this._error = "no_component"; return; } @@ -182,7 +165,7 @@ class HaPanelMy extends LitElement { try { url = this._createRedirectUrl(redirect); } catch (err) { - this._error = this.hass.localize("ui.panel.my.error"); + this._error = "url_error"; return; } @@ -191,9 +174,44 @@ class HaPanelMy extends LitElement { protected render() { if (this._error) { - return html``; + let error = "Unknown error"; + switch (this._error) { + case "not_supported": + error = + this.hass.localize( + "ui.panel.my.not_supported", + "link", + html`${this.hass.localize("ui.panel.my.faq_link")}` + ) || "This redirect is not supported."; + break; + case "no_component": + error = + this.hass.localize( + "ui.panel.my.component_not_loaded", + "integration", + domainToName( + this.hass.localize, + REDIRECTS[this.route.path.substr(1)].component! + ) + ) || "This redirect is not supported."; + break; + case "no_supervisor": + error = + this.hass.localize( + "ui.panel.my.component_not_loaded", + "integration", + "Home Assistant Supervisor" + ) || "This redirect requires Home Assistant Supervisor."; + break; + default: + error = this.hass.localize("ui.panel.my.error") || "Unknown error"; + } + return html``; } return html``; } diff --git a/src/state/translations-mixin.ts b/src/state/translations-mixin.ts index e0fb4ed00a..8be391e3a3 100644 --- a/src/state/translations-mixin.ts +++ b/src/state/translations-mixin.ts @@ -51,6 +51,17 @@ export default >(superClass: T) => this._loadCoreTranslations(getLocalLanguage()); } + protected updated(changedProps) { + super.updated(changedProps); + if (!changedProps.has("hass")) { + return; + } + const oldHass = changedProps.get("hass"); + if (this.hass?.panels && oldHass.panels !== this.hass.panels) { + this._loadFragmentTranslations(this.hass.language, this.hass.panelUrl); + } + } + protected hassConnected() { super.hassConnected(); getUserLanguage(this.hass!).then((language) => { @@ -204,13 +215,10 @@ export default >(superClass: T) => const panelComponent = this.hass?.panels?.[panelUrl]?.component_name; // If it's the first call we don't have panel info yet to check the component. - // If the url is not known it might be a custom lovelace dashboard, so we load lovelace translations const fragment = translationMetadata.fragments.includes( panelComponent || panelUrl ) ? panelComponent || panelUrl - : !panelComponent - ? "lovelace" : undefined; if (!fragment) {