diff --git a/src/components/entity/ha-entities-picker.ts b/src/components/entity/ha-entities-picker.ts index 039eaa8261..e0a8b5ae41 100644 --- a/src/components/entity/ha-entities-picker.ts +++ b/src/components/entity/ha-entities-picker.ts @@ -1,6 +1,7 @@ import type { HassEntity } from "home-assistant-js-websocket"; import { css, html, LitElement, TemplateResult } from "lit"; import { customElement, property } from "lit/decorators"; +import memoizeOne from "memoize-one"; import { fireEvent } from "../../common/dom/fire_event"; import { isValidEntityId } from "../../common/entity/valid_entity_id"; import type { PolymerChangedEvent } from "../../polymer-types"; @@ -95,7 +96,10 @@ class HaEntitiesPickerLight extends LitElement { .excludeEntities=${this.excludeEntities} .includeDeviceClasses=${this.includeDeviceClasses} .includeUnitOfMeasurement=${this.includeUnitOfMeasurement} - .entityFilter=${this._entityFilter} + .entityFilter=${this._getEntityFilter( + this.value, + this.entityFilter + )} .value=${entityId} .label=${this.pickedEntityLabel} .disabled=${this.disabled} @@ -114,7 +118,7 @@ class HaEntitiesPickerLight extends LitElement { .excludeEntities=${this.excludeEntities} .includeDeviceClasses=${this.includeDeviceClasses} .includeUnitOfMeasurement=${this.includeUnitOfMeasurement} - .entityFilter=${this._entityFilter} + .entityFilter=${this._getEntityFilter(this.value, this.entityFilter)} .label=${this.pickEntityLabel} .helper=${this.helper} .disabled=${this.disabled} @@ -125,11 +129,15 @@ class HaEntitiesPickerLight extends LitElement { `; } - private _entityFilter: HaEntityPickerEntityFilterFunc = ( - stateObj: HassEntity - ) => - (!this.value || !this.value.includes(stateObj.entity_id)) && - (!this.entityFilter || this.entityFilter(stateObj)); + private _getEntityFilter = memoizeOne( + ( + value: string[] | undefined, + entityFilter: HaEntityPickerEntityFilterFunc | undefined + ): HaEntityPickerEntityFilterFunc => + (stateObj: HassEntity) => + (!value || !value.includes(stateObj.entity_id)) && + (!entityFilter || entityFilter(stateObj)) + ); private get _currentEntities() { return this.value || [];