From fb16156f8df4903548c695e79779a95a62ac6557 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 16 Mar 2019 23:15:00 -0700 Subject: [PATCH] Fix routetail + config subrouting (#2951) * Fix routetail + config subrouting * Do not update panel when loading a new one * Fix init skeleton not removed during loading --- src/layouts/ha-init-page.ts | 5 +++++ src/layouts/hass-router-page.ts | 8 +++++--- src/layouts/partial-panel-resolver.ts | 7 ++----- src/panels/config/automation/ha-config-automation.js | 4 ++-- src/panels/config/cloud/ha-config-cloud.js | 12 +++--------- src/panels/config/ha-panel-config.ts | 2 +- .../config/integrations/ha-config-integrations.js | 2 +- src/panels/config/script/ha-config-script.js | 4 ++-- src/panels/config/users/ha-config-users.js | 8 +++----- src/panels/custom/ha-panel-custom.js | 4 ++-- src/util/init-skeleton.ts | 6 ++++++ 11 files changed, 32 insertions(+), 30 deletions(-) create mode 100644 src/util/init-skeleton.ts diff --git a/src/layouts/ha-init-page.ts b/src/layouts/ha-init-page.ts index 3fe02fa785..bca3480dfc 100644 --- a/src/layouts/ha-init-page.ts +++ b/src/layouts/ha-init-page.ts @@ -8,6 +8,7 @@ import { CSSResult, css, } from "lit-element"; +import { removeInitSkeleton } from "../util/init-skeleton"; class HaInitPage extends LitElement { public error?: boolean; @@ -35,6 +36,10 @@ class HaInitPage extends LitElement { `; } + protected firstUpdated() { + removeInitSkeleton(); + } + private _retry() { location.reload(); } diff --git a/src/layouts/hass-router-page.ts b/src/layouts/hass-router-page.ts index 3d5cab0d09..7806defb6a 100644 --- a/src/layouts/hass-router-page.ts +++ b/src/layouts/hass-router-page.ts @@ -52,7 +52,9 @@ export class HassRouterPage extends UpdatingElement { super.update(changedProps); if (!changedProps.has("route")) { - if (this.lastChild) { + // Do not update if we have a currentLoadProm, because that means + // that there is still an old panel shown and we're moving to a new one. + if (this.lastChild && !this._currentLoadProm) { this.updatePageEl(this.lastChild, changedProps); } return; @@ -214,11 +216,11 @@ export class HassRouterPage extends UpdatingElement { const dividerPos = route.path.indexOf("/", 1); return dividerPos === -1 ? { - prefix: route.path, + prefix: route.prefix + route.path, path: "", } : { - prefix: route.path.substr(0, dividerPos), + prefix: route.prefix + route.path.substr(0, dividerPos), path: route.path.substr(dividerPos), }; } diff --git a/src/layouts/partial-panel-resolver.ts b/src/layouts/partial-panel-resolver.ts index 0693e4b1f7..acb67d1982 100644 --- a/src/layouts/partial-panel-resolver.ts +++ b/src/layouts/partial-panel-resolver.ts @@ -7,6 +7,7 @@ import { RouterOptions, RouteOptions, } from "./hass-router-page"; +import { removeInitSkeleton } from "../util/init-skeleton"; const CACHE_COMPONENTS = ["lovelace", "states"]; const COMPONENTS = { @@ -113,11 +114,7 @@ class PartialPanelResolver extends HassRouterPage { this.routerOptions = getRoutes(this.hass!.panels); await this.rebuild(); await this.pageRendered; - - const initEl = document.getElementById("ha-init-skeleton"); - if (initEl) { - initEl.parentElement!.removeChild(initEl); - } + removeInitSkeleton(); } } diff --git a/src/panels/config/automation/ha-config-automation.js b/src/panels/config/automation/ha-config-automation.js index 679820e697..f0f4defdeb 100644 --- a/src/panels/config/automation/ha-config-automation.js +++ b/src/panels/config/automation/ha-config-automation.js @@ -18,13 +18,13 @@ class HaConfigAutomation extends PolymerElement { diff --git a/src/panels/config/cloud/ha-config-cloud.js b/src/panels/config/cloud/ha-config-cloud.js index 91de367e5a..e85d7c030b 100644 --- a/src/panels/config/cloud/ha-config-cloud.js +++ b/src/panels/config/cloud/ha-config-cloud.js @@ -11,12 +11,8 @@ import "./ha-config-cloud-login"; import "./ha-config-cloud-register"; import NavigateMixin from "../../../mixins/navigate-mixin"; -const LOGGED_IN_URLS = ["/cloud/account"]; -const NOT_LOGGED_IN_URLS = [ - "/cloud/login", - "/cloud/register", - "/cloud/forgot-password", -]; +const LOGGED_IN_URLS = ["/account"]; +const NOT_LOGGED_IN_URLS = ["/login", "/register", "/forgot-password"]; /* * @appliesMixin NavigateMixin @@ -26,7 +22,7 @@ class HaConfigCloud extends NavigateMixin(PolymerElement) { return html` @@ -121,8 +117,6 @@ class HaConfigCloud extends NavigateMixin(PolymerElement) { } _checkRoute(route) { - if (!route || route.path.substr(0, 6) !== "/cloud") return; - this._debouncer = Debouncer.debounce( this._debouncer, timeOut.after(0), diff --git a/src/panels/config/ha-panel-config.ts b/src/panels/config/ha-panel-config.ts index 8fbb0629b3..0d78f87168 100644 --- a/src/panels/config/ha-panel-config.ts +++ b/src/panels/config/ha-panel-config.ts @@ -121,7 +121,7 @@ class HaPanelConfig extends HassRouterPage { } protected updatePageEl(el) { - el.route = this.route; + el.route = this.routeTail; el.hass = this.hass; el.isWide = this.hass.dockedSidebar ? this._wideSidebar : this._wide; el.cloudStatus = this._cloudStatus; diff --git a/src/panels/config/integrations/ha-config-integrations.js b/src/panels/config/integrations/ha-config-integrations.js index 035ff0dbca..305dcfe4ca 100644 --- a/src/panels/config/integrations/ha-config-integrations.js +++ b/src/panels/config/integrations/ha-config-integrations.js @@ -15,7 +15,7 @@ class HaConfigIntegrations extends NavigateMixin(PolymerElement) { return html` diff --git a/src/panels/config/script/ha-config-script.js b/src/panels/config/script/ha-config-script.js index ee6f591825..88a1f0f1af 100644 --- a/src/panels/config/script/ha-config-script.js +++ b/src/panels/config/script/ha-config-script.js @@ -19,13 +19,13 @@ class HaConfigScript extends PolymerElement { diff --git a/src/panels/config/users/ha-config-users.js b/src/panels/config/users/ha-config-users.js index 6778f282cb..53e38bc746 100644 --- a/src/panels/config/users/ha-config-users.js +++ b/src/panels/config/users/ha-config-users.js @@ -19,7 +19,7 @@ class HaConfigUsers extends NavigateMixin(PolymerElement) { return html` @@ -72,8 +72,6 @@ class HaConfigUsers extends NavigateMixin(PolymerElement) { } _checkRoute(route) { - if (!route || route.path.substr(0, 6) !== "/users") return; - // prevent list getting under toolbar fireEvent(this, "iron-resize"); @@ -81,8 +79,8 @@ class HaConfigUsers extends NavigateMixin(PolymerElement) { this._debouncer, timeOut.after(0), () => { - if (route.path === "/users") { - this.navigate("/config/users/picker", true); + if (route.path === "") { + this.navigate(`${route.prefix}/picker`, true); } } ); diff --git a/src/panels/custom/ha-panel-custom.js b/src/panels/custom/ha-panel-custom.js index ad0c59dfc0..563f9d47f1 100644 --- a/src/panels/custom/ha-panel-custom.js +++ b/src/panels/custom/ha-panel-custom.js @@ -38,7 +38,7 @@ class HaPanelCustom extends NavigateMixin(EventsMixin(PolymerElement)) { delete window.customPanel; this._setProperties = null; while (this.lastChild) { - this.remove(this.lastChild); + this.removeChild(this.lastChild); } const config = panel.config._panel_custom; @@ -95,7 +95,7 @@ It will have access to all data in Home Assistant. } - `; + `.trim(); const iframeDoc = this.querySelector("iframe").contentWindow.document; iframeDoc.open(); iframeDoc.write(``); diff --git a/src/util/init-skeleton.ts b/src/util/init-skeleton.ts new file mode 100644 index 0000000000..f5912e70a0 --- /dev/null +++ b/src/util/init-skeleton.ts @@ -0,0 +1,6 @@ +export const removeInitSkeleton = () => { + const initEl = document.getElementById("ha-init-skeleton"); + if (initEl) { + initEl.parentElement!.removeChild(initEl); + } +};