From dd1bf7b49d2ba6b9aa2635b6070063168e1cd009 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Fri, 11 Sep 2020 15:10:36 -0500 Subject: [PATCH] show first visible view on default (#6567) Co-authored-by: Bram Kragten --- src/panels/lovelace/hui-root.ts | 44 ++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/src/panels/lovelace/hui-root.ts b/src/panels/lovelace/hui-root.ts index a720fde6bb..56815d7131 100644 --- a/src/panels/lovelace/hui-root.ts +++ b/src/panels/lovelace/hui-root.ts @@ -1,12 +1,13 @@ import "@material/mwc-button"; import "@material/mwc-list/mwc-list-item"; +import type { RequestSelectedDetail } from "@material/mwc-list/mwc-list-item"; import { - mdiDotsVertical, - mdiMicrophone, - mdiPlus, mdiClose, - mdiPencil, + mdiDotsVertical, mdiHelpCircle, + mdiMicrophone, + mdiPencil, + mdiPlus, } from "@mdi/js"; import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-scroll-effects/effects/waterfall"; @@ -17,9 +18,9 @@ import { css, CSSResult, html, + internalProperty, LitElement, property, - internalProperty, PropertyValues, TemplateResult, } from "lit-element"; @@ -28,16 +29,17 @@ import memoizeOne from "memoize-one"; import { isComponentLoaded } from "../../common/config/is_component_loaded"; import { fireEvent } from "../../common/dom/fire_event"; import scrollToTarget from "../../common/dom/scroll-to-target"; +import { shouldHandleRequestSelectedEvent } from "../../common/mwc/handle-request-selected-event"; import { navigate } from "../../common/navigate"; import { computeRTLDirection } from "../../common/util/compute_rtl"; import { debounce } from "../../common/util/debounce"; import { afterNextRender } from "../../common/util/render-status"; import "../../components/ha-button-menu"; import "../../components/ha-icon"; -import "../../components/ha-svg-icon"; import "../../components/ha-icon-button-arrow-next"; import "../../components/ha-icon-button-arrow-prev"; import "../../components/ha-menu-button"; +import "../../components/ha-svg-icon"; import type { LovelaceConfig, LovelacePanelConfig, @@ -58,8 +60,6 @@ import type { Lovelace } from "./types"; import "./views/hui-panel-view"; import type { HUIPanelView } from "./views/hui-panel-view"; import { HUIView } from "./views/hui-view"; -import type { RequestSelectedDetail } from "@material/mwc-list/mwc-list-item"; -import { shouldHandleRequestSelectedEvent } from "../../common/mwc/handle-request-selected-event"; class HUIRoot extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; @@ -382,6 +382,15 @@ class HUIRoot extends LitElement { `; } + private _isVisible = (view: LovelaceViewConfig) => + Boolean( + this._editMode || + view.visible === undefined || + view.visible === true || + (Array.isArray(view.visible) && + view.visible.some((show) => show.user === this.hass!.user?.id)) + ); + protected updated(changedProperties: PropertyValues): void { super.updated(changedProperties); @@ -407,9 +416,14 @@ class HUIRoot extends LitElement { if (changedProperties.has("route")) { const views = this.config.views; + if (!viewPath && views.length) { - navigate(this, `${this.route!.prefix}/${views[0].path || 0}`, true); - newSelectView = 0; + newSelectView = views.findIndex(this._isVisible); + navigate( + this, + `${this.route!.prefix}/${views[newSelectView].path || newSelectView}`, + true + ); } else if (viewPath === "hass-unused-entities") { newSelectView = "hass-unused-entities"; } else if (viewPath) { @@ -449,8 +463,14 @@ class HUIRoot extends LitElement { this.lovelace!.mode === "storage" && viewPath === "hass-unused-entities" ) { - navigate(this, `${this.route?.prefix}/${views[0]?.path || 0}`); - newSelectView = 0; + newSelectView = views.findIndex(this._isVisible); + navigate( + this, + `${this.route!.prefix}/${ + views[newSelectView].path || newSelectView + }`, + true + ); } }