Don't collect infinite previous views.

This commit is contained in:
Dermot Duffy
2022-10-07 17:53:49 -07:00
parent 535069d68e
commit 3aadfd2252
3 changed files with 26 additions and 15 deletions
+22 -6
View File
@@ -30,6 +30,17 @@ import { renderProgressIndicator } from './message.js';
import './thumbnail.js';
import { THUMBNAIL_DETAILS_WIDTH_MIN } from './thumbnail.js';
interface GalleryViewContext {
// Keep track of the previous view to allow returning to a higher-level folder.
previous?: View;
}
declare module 'view' {
interface ViewContext {
gallery?: GalleryViewContext;
}
}
@customElement('frigate-card-gallery')
export class FrigateCardGallery extends LitElement {
@property({ attribute: false })
@@ -100,7 +111,7 @@ export class FrigateCardGallery extends LitElement {
browseMediaQueryParameters,
);
}
return renderProgressIndicator({cardWideConfig: this.cardWideConfig});
return renderProgressIndicator({ cardWideConfig: this.cardWideConfig });
}
return html`
@@ -196,9 +207,9 @@ export class FrigateCardGalleryCore extends LitElement {
*/
protected _showBackArrow(): boolean {
return (
!!this.view?.previous &&
!!this.view.previous.target &&
this.view.previous.view === this.view.view
!!this.view?.context?.gallery?.previous &&
!!this.view.context.gallery.previous.target &&
this.view.context.gallery.previous.view === this.view.view
);
}
@@ -243,8 +254,8 @@ export class FrigateCardGalleryCore extends LitElement {
${this._showBackArrow()
? html` <ha-card
@click=${(ev) => {
if (this.view && this.view.previous) {
this.view.previous.dispatchChangeEvent(this);
if (this.view && this.view.context?.gallery?.previous) {
this.view.context.gallery.previous.dispatchChangeEvent(this);
}
stopEventFromActivatingCardWideActions(ev);
}}
@@ -266,6 +277,11 @@ export class FrigateCardGalleryCore extends LitElement {
this.hass,
this.view,
child,
{
gallery: {
previous: this.view,
},
},
);
}
stopEventFromActivatingCardWideActions(ev);