diff --git a/src/components/entity/ha-entities-picker.ts b/src/components/entity/ha-entities-picker.ts index 44d9608967..6e8f18a08f 100644 --- a/src/components/entity/ha-entities-picker.ts +++ b/src/components/entity/ha-entities-picker.ts @@ -1,10 +1,9 @@ -import type { HassEntity } from "home-assistant-js-websocket"; import { css, html, LitElement, nothing } 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 { ValueChangedEvent, HomeAssistant } from "../../types"; +import type { HomeAssistant, ValueChangedEvent } from "../../types"; import "./ha-entity-picker"; import type { HaEntityPickerEntityFilterFunc } from "./ha-entity-picker"; @@ -98,10 +97,7 @@ class HaEntitiesPickerLight extends LitElement { .excludeEntities=${this.excludeEntities} .includeDeviceClasses=${this.includeDeviceClasses} .includeUnitOfMeasurement=${this.includeUnitOfMeasurement} - .entityFilter=${this._getEntityFilter( - this.value, - this.entityFilter - )} + .entityFilter=${this.entityFilter} .value=${entityId} .label=${this.pickedEntityLabel} .disabled=${this.disabled} @@ -118,10 +114,13 @@ class HaEntitiesPickerLight extends LitElement { .includeDomains=${this.includeDomains} .excludeDomains=${this.excludeDomains} .includeEntities=${this.includeEntities} - .excludeEntities=${this.excludeEntities} + .excludeEntities=${this._excludeEntities( + this.value, + this.excludeEntities + )} .includeDeviceClasses=${this.includeDeviceClasses} .includeUnitOfMeasurement=${this.includeUnitOfMeasurement} - .entityFilter=${this._getEntityFilter(this.value, this.entityFilter)} + .entityFilter=${this.entityFilter} .label=${this.pickEntityLabel} .helper=${this.helper} .disabled=${this.disabled} @@ -133,14 +132,16 @@ class HaEntitiesPickerLight extends LitElement { `; } - private _getEntityFilter = memoizeOne( + private _excludeEntities = memoizeOne( ( value: string[] | undefined, - entityFilter: HaEntityPickerEntityFilterFunc | undefined - ): HaEntityPickerEntityFilterFunc => - (stateObj: HassEntity) => - (!value || !value.includes(stateObj.entity_id)) && - (!entityFilter || entityFilter(stateObj)) + excludeEntities: string[] | undefined + ): string[] | undefined => { + if (value === undefined) { + return excludeEntities; + } + return [...(excludeEntities || []), ...value]; + } ); private get _currentEntities() { diff --git a/src/components/entity/ha-entity-picker.ts b/src/components/entity/ha-entity-picker.ts index 6401b6cd21..b169b7b605 100644 --- a/src/components/entity/ha-entity-picker.ts +++ b/src/components/entity/ha-entity-picker.ts @@ -87,7 +87,7 @@ export class HaEntityPicker extends LitElement { public includeUnitOfMeasurement?: string[]; /** - * List of allowed entities to show. Will ignore all other filters. + * List of allowed entities to show. * @type {Array} * @attr include-entities */ @@ -220,30 +220,13 @@ export class HaEntityPicker extends LitElement { if (includeEntities) { entityIds = entityIds.filter((entityId) => - this.includeEntities!.includes(entityId) + includeEntities.includes(entityId) ); - - return entityIds - .map((key) => { - const friendly_name = computeStateName(hass!.states[key]) || key; - return { - ...hass!.states[key], - friendly_name, - strings: [key, friendly_name], - }; - }) - .sort((entityA, entityB) => - caseInsensitiveStringCompare( - entityA.friendly_name, - entityB.friendly_name, - this.hass.locale.language - ) - ); } if (excludeEntities) { entityIds = entityIds.filter( - (entityId) => !excludeEntities!.includes(entityId) + (entityId) => !excludeEntities.includes(entityId) ); }