diff --git a/README.md b/README.md index 66448578..aa0017b5 100644 --- a/README.md +++ b/README.md @@ -156,6 +156,7 @@ view: | `update_force` | `false` | :heavy_multiplication_x: | Whether automated card updates/refreshes should ignore user interaction. See [card updates](#card-updates) below for behavior and usecases.| | `update_entities` | | :heavy_multiplication_x: | **YAML only**: A list of entity ids that should cause the view to reset to the default. See [card updates](#card-updates) below for behavior and usecases.| | `update_cycle_camera` | `false` | :heavy_multiplication_x: | When set to `true` the selected camera is cycled on each default view change. | +| `render_entities` | | :heavy_multiplication_x: | **YAML only**: A list of entity ids that should cause the card to re-render 'in-place'. The view/camera is not changed. `update_*` flags to not pertain/relate to the behavior of this flag. This should **very** rarely be needed, but could be useful if the card is both setting and changing HA state of the same object as could be the case for some complex `card_mod` scenarios ([example](https://github.com/dermotduffy/frigate-hass-card/issues/343)). | | `actions` | | :heavy_multiplication_x: | Actions to use for all views, individual actions may be overriden by view-specific actions. See [actions](#actions) below.| ### Menu Options diff --git a/src/card.ts b/src/card.ts index 3ddb4152..fe0b9069 100644 --- a/src/card.ts +++ b/src/card.ts @@ -436,7 +436,10 @@ export class FrigateCard extends LitElement { } const id = - config.id || config.camera_entity || config.webrtc_card?.entity || config.camera_name; + config.id || + config.camera_entity || + config.webrtc_card?.entity || + config.camera_name; if (!id) { this._setMessageAndUpdate({ @@ -680,10 +683,6 @@ export class FrigateCard extends LitElement { * @returns True if the card should be updated. */ protected shouldUpdate(changedProps: PropertyValues): boolean { - if (changedProps.size > 1) { - return true; - } - const oldHass = changedProps.get('_hass') as HomeAssistant | undefined; if (oldHass) { // Home Assistant pumps a lot of updates through. Re-rendering the card is @@ -705,6 +704,14 @@ export class FrigateCard extends LitElement { // itself will not trigger an *additional* re-render here. this._changeView(); return true; + } else if ( + shouldUpdateBasedOnHass( + this._hass, + oldHass, + this._getConfig().view.render_entities || [], + ) + ) { + return true; } return false; } @@ -1121,6 +1128,10 @@ export class FrigateCard extends LitElement { * Master render method for the card. */ protected render(): TemplateResult | void { + if (!this._hass) { + return; + } + const padding = this._getAspectRatioPadding(); const outerStyle = {}; @@ -1146,6 +1157,7 @@ export class FrigateCard extends LitElement { @frigate-card:message=${this._messageHandler} @frigate-card:change-view=${this._changeViewHandler} @frigate-card:media-show=${this._mediaShowHandler} + @frigate-card:render=${() => this.requestUpdate()} > ${this._getConfig().menu.mode == 'above' ? this._renderMenu() : ''}