diff --git a/src/layouts/hass-subpage.ts b/src/layouts/hass-subpage.ts index 33613bb5f0..cafb96bfd1 100644 --- a/src/layouts/hass-subpage.ts +++ b/src/layouts/hass-subpage.ts @@ -6,6 +6,7 @@ import { LitElement, property, TemplateResult, + eventOptions, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; import "../components/ha-menu-button"; @@ -22,6 +23,17 @@ class HassSubpage extends LitElement { @property({ type: Boolean }) public hassio = false; + @property() private _savedScrollPos?: number; + + public connectedCallback() { + super.connectedCallback(); + if (this._savedScrollPos) { + (this.shadowRoot!.querySelector( + ".content" + ) as HTMLDivElement).scrollTop = this._savedScrollPos; + } + } + protected render(): TemplateResult { return html`
@@ -34,10 +46,15 @@ class HassSubpage extends LitElement {
${this.header}
-
+
`; } + @eventOptions({ passive: true }) + private _saveScrollPos(e: Event) { + this._savedScrollPos = (e.target as HTMLDivElement).scrollTop; + } + private _backTapped(): void { history.back(); } diff --git a/src/layouts/hass-tabs-subpage.ts b/src/layouts/hass-tabs-subpage.ts index 454898f824..3522fe27ad 100644 --- a/src/layouts/hass-tabs-subpage.ts +++ b/src/layouts/hass-tabs-subpage.ts @@ -8,6 +8,7 @@ import { property, PropertyValues, TemplateResult, + eventOptions, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; import memoizeOne from "memoize-one"; @@ -52,6 +53,17 @@ class HassTabsSubpage extends LitElement { @property() private _activeTab?: PageNavigation; + @property() private _savedScrollPos?: number; + + public connectedCallback() { + super.connectedCallback(); + if (this._savedScrollPos) { + (this.shadowRoot!.querySelector( + ".content" + ) as HTMLDivElement).scrollTop = this._savedScrollPos; + } + } + private _getTabs = memoizeOne( ( tabs: PageNavigation[], @@ -143,12 +155,17 @@ class HassTabsSubpage extends LitElement { -
+
`; } + @eventOptions({ passive: true }) + private _saveScrollPos(e: Event) { + this._savedScrollPos = (e.target as HTMLDivElement).scrollTop; + } + private _tabTapped(ev: Event): void { navigate(this, (ev.currentTarget as any).path, true); }