mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-22 16:56:35 +00:00
MIgrate entity-filter-badge to updating element (#6050)
This commit is contained in:
parent
b75792a3bf
commit
70f59eeec6
@ -5,16 +5,17 @@ import { createBadgeElement } from "../create-element/create-badge-element";
|
|||||||
import { EntityFilterEntityConfig } from "../entity-rows/types";
|
import { EntityFilterEntityConfig } from "../entity-rows/types";
|
||||||
import { LovelaceBadge } from "../types";
|
import { LovelaceBadge } from "../types";
|
||||||
import { EntityFilterBadgeConfig } from "./types";
|
import { EntityFilterBadgeConfig } from "./types";
|
||||||
|
import { UpdatingElement, property, PropertyValues } from "lit-element";
|
||||||
|
|
||||||
|
class EntityFilterBadge extends UpdatingElement implements LovelaceBadge {
|
||||||
|
@property() public hass!: HomeAssistant;
|
||||||
|
|
||||||
|
@property() private _config?: EntityFilterBadgeConfig;
|
||||||
|
|
||||||
class EntityFilterBadge extends HTMLElement implements LovelaceBadge {
|
|
||||||
private _elements?: LovelaceBadge[];
|
private _elements?: LovelaceBadge[];
|
||||||
|
|
||||||
private _config?: EntityFilterBadgeConfig;
|
|
||||||
|
|
||||||
private _configEntities?: EntityFilterEntityConfig[];
|
private _configEntities?: EntityFilterEntityConfig[];
|
||||||
|
|
||||||
private _hass?: HomeAssistant;
|
|
||||||
|
|
||||||
private _oldEntities?: EntityFilterEntityConfig[];
|
private _oldEntities?: EntityFilterEntityConfig[];
|
||||||
|
|
||||||
public setConfig(config: EntityFilterBadgeConfig): void {
|
public setConfig(config: EntityFilterBadgeConfig): void {
|
||||||
@ -34,39 +35,43 @@ class EntityFilterBadge extends HTMLElement implements LovelaceBadge {
|
|||||||
throw new Error("Incorrect filter config.");
|
throw new Error("Incorrect filter config.");
|
||||||
}
|
}
|
||||||
|
|
||||||
this._config = config;
|
while (this.lastChild) {
|
||||||
this._configEntities = undefined;
|
|
||||||
|
|
||||||
if (this.lastChild) {
|
|
||||||
this.removeChild(this.lastChild);
|
this.removeChild(this.lastChild);
|
||||||
this._elements = undefined;
|
|
||||||
}
|
}
|
||||||
|
this._elements = undefined;
|
||||||
|
|
||||||
|
this._configEntities = processConfigEntities(config.entities);
|
||||||
|
this._oldEntities = undefined;
|
||||||
|
this._config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
set hass(hass: HomeAssistant) {
|
protected shouldUpdate(changedProperties: PropertyValues): boolean {
|
||||||
if (!hass || !this._config) {
|
if (
|
||||||
|
changedProperties.has("_config") ||
|
||||||
|
(changedProperties.has("hass") &&
|
||||||
|
this.haveEntitiesChanged(
|
||||||
|
changedProperties.get("hass") as HomeAssistant | undefined
|
||||||
|
))
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected update(changedProperties: PropertyValues) {
|
||||||
|
super.update(changedProperties);
|
||||||
|
if (!this.hass || !this._configEntities) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._elements) {
|
if (this._elements) {
|
||||||
for (const element of this._elements) {
|
for (const element of this._elements) {
|
||||||
element.hass = hass;
|
element.hass = this.hass;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.haveEntitiesChanged(hass)) {
|
|
||||||
this._hass = hass;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._hass = hass;
|
|
||||||
|
|
||||||
if (!this._configEntities) {
|
|
||||||
this._configEntities = processConfigEntities(this._config.entities);
|
|
||||||
}
|
|
||||||
|
|
||||||
const entitiesList = this._configEntities.filter((entityConf) => {
|
const entitiesList = this._configEntities.filter((entityConf) => {
|
||||||
const stateObj = hass.states[entityConf.entity];
|
const stateObj = this.hass.states[entityConf.entity];
|
||||||
|
|
||||||
if (!stateObj) {
|
if (!stateObj) {
|
||||||
return false;
|
return false;
|
||||||
@ -91,6 +96,7 @@ class EntityFilterBadge extends HTMLElement implements LovelaceBadge {
|
|||||||
|
|
||||||
if (entitiesList.length === 0) {
|
if (entitiesList.length === 0) {
|
||||||
this.style.display = "none";
|
this.style.display = "none";
|
||||||
|
this._oldEntities = entitiesList;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,7 +109,7 @@ class EntityFilterBadge extends HTMLElement implements LovelaceBadge {
|
|||||||
this._elements = [];
|
this._elements = [];
|
||||||
for (const badgeConfig of entitiesList) {
|
for (const badgeConfig of entitiesList) {
|
||||||
const element = createBadgeElement(badgeConfig);
|
const element = createBadgeElement(badgeConfig);
|
||||||
element.hass = hass;
|
element.hass = this.hass;
|
||||||
this._elements.push(element);
|
this._elements.push(element);
|
||||||
}
|
}
|
||||||
this._oldEntities = entitiesList;
|
this._oldEntities = entitiesList;
|
||||||
@ -124,17 +130,17 @@ class EntityFilterBadge extends HTMLElement implements LovelaceBadge {
|
|||||||
this.style.display = "inline";
|
this.style.display = "inline";
|
||||||
}
|
}
|
||||||
|
|
||||||
private haveEntitiesChanged(hass: HomeAssistant): boolean {
|
private haveEntitiesChanged(oldHass?: HomeAssistant): boolean {
|
||||||
if (!this._hass) {
|
if (!oldHass) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this._configEntities || this._hass.localize !== hass.localize) {
|
if (!this._oldEntities || this.hass.localize !== oldHass.localize) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const config of this._configEntities) {
|
for (const config of this._configEntities!) {
|
||||||
if (this._hass.states[config.entity] !== hass.states[config.entity]) {
|
if (this.hass.states[config.entity] !== oldHass.states[config.entity]) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,7 +162,7 @@ export class HUIView extends LitElement {
|
|||||||
|
|
||||||
if (hassChanged && !configChanged) {
|
if (hassChanged && !configChanged) {
|
||||||
this._cards.forEach((element) => {
|
this._cards.forEach((element) => {
|
||||||
element.hass = this.hass;
|
element.hass = hass;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user