From 2e76b306c4ad2c198797c24ed7d10c650ba1f87e Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 9 Mar 2021 11:56:26 +0100 Subject: [PATCH] Add guard for when default url is not available (#8593) --- src/layouts/hass-error-screen.ts | 24 +++++++++++--- src/layouts/hass-loading-screen.ts | 4 +-- src/layouts/partial-panel-resolver.ts | 47 +++++++++++++++------------ 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/src/layouts/hass-error-screen.ts b/src/layouts/hass-error-screen.ts index 75642c5e0b..d7b9f5ea4c 100644 --- a/src/layouts/hass-error-screen.ts +++ b/src/layouts/hass-error-screen.ts @@ -9,7 +9,8 @@ import { TemplateResult, } from "lit-element"; import { HomeAssistant } from "../types"; -import "./hass-subpage"; +import "../components/ha-menu-button"; +import "../components/ha-icon-button-arrow-prev"; @customElement("hass-error-screen") class HassErrorScreen extends LitElement { @@ -17,16 +18,29 @@ class HassErrorScreen extends LitElement { @property({ type: Boolean }) public toolbar = true; + @property({ type: Boolean }) public rootnav = false; + + @property() public narrow?: boolean; + @property() public error?: string; protected render(): TemplateResult { return html` ${this.toolbar ? html`
- + ${this.rootnav + ? html` + + ` + : html` + + `}
` : ""}
diff --git a/src/layouts/hass-loading-screen.ts b/src/layouts/hass-loading-screen.ts index ae7d41e8ea..40582f15b4 100644 --- a/src/layouts/hass-loading-screen.ts +++ b/src/layouts/hass-loading-screen.ts @@ -16,13 +16,13 @@ import { HomeAssistant } from "../types"; @customElement("hass-loading-screen") class HassLoadingScreen extends LitElement { + @property({ attribute: false }) public hass?: HomeAssistant; + @property({ type: Boolean, attribute: "no-toolbar" }) public noToolbar = false; @property({ type: Boolean }) public rootnav = false; - @property({ attribute: false }) public hass?: HomeAssistant; - @property() public narrow?: boolean; protected render(): TemplateResult { diff --git a/src/layouts/partial-panel-resolver.ts b/src/layouts/partial-panel-resolver.ts index 0c37a91b6d..cbc3cdfefb 100644 --- a/src/layouts/partial-panel-resolver.ts +++ b/src/layouts/partial-panel-resolver.ts @@ -7,6 +7,7 @@ import { import { customElement, property, PropertyValues } from "lit-element"; import { deepActiveElement } from "../common/dom/deep-active-element"; import { deepEqual } from "../common/util/deep-equal"; +import { getDefaultPanel } from "../data/panel"; import { CustomPanelInfo } from "../data/panel_custom"; import { HomeAssistant, Panels } from "../types"; import { removeInitSkeleton } from "../util/init-skeleton"; @@ -37,25 +38,6 @@ const COMPONENTS = { import("../panels/media-browser/ha-panel-media-browser"), }; -const getRoutes = (panels: Panels): RouterOptions => { - const routes: RouterOptions["routes"] = {}; - Object.values(panels).forEach((panel) => { - const data: RouteOptions = { - tag: `ha-panel-${panel.component_name}`, - cache: CACHE_URL_PATHS.includes(panel.url_path), - }; - if (panel.component_name in COMPONENTS) { - data.load = COMPONENTS[panel.component_name]; - } - routes[panel.url_path] = data; - }); - - return { - showLoading: true, - routes, - }; -}; - @customElement("partial-panel-resolver") class PartialPanelResolver extends HassRouterPage { @property({ attribute: false }) public hass!: HomeAssistant; @@ -144,6 +126,31 @@ class PartialPanelResolver extends HassRouterPage { } } + private getRoutes(panels: Panels): RouterOptions { + const routes: RouterOptions["routes"] = {}; + Object.values(panels).forEach((panel) => { + const data: RouteOptions = { + tag: `ha-panel-${panel.component_name}`, + cache: CACHE_URL_PATHS.includes(panel.url_path), + }; + if (panel.component_name in COMPONENTS) { + data.load = COMPONENTS[panel.component_name]; + } + routes[panel.url_path] = data; + }); + + return { + beforeRender: (page) => { + if (!page || !routes[page]) { + return getDefaultPanel(this.hass).url_path; + } + return undefined; + }, + showLoading: true, + routes, + }; + } + private _onHidden() { this._hiddenTimeout = window.setTimeout(() => { this._hiddenTimeout = undefined; @@ -191,7 +198,7 @@ class PartialPanelResolver extends HassRouterPage { } private async _updateRoutes(oldPanels?: HomeAssistant["panels"]) { - this.routerOptions = getRoutes(this.hass.panels); + this.routerOptions = this.getRoutes(this.hass.panels); if ( !this._waitForStart &&