diff --git a/src/components/ha-selector/ha-selector-target.ts b/src/components/ha-selector/ha-selector-target.ts index 55f078f6bf..e4cf47278d 100644 --- a/src/components/ha-selector/ha-selector-target.ts +++ b/src/components/ha-selector/ha-selector-target.ts @@ -1,8 +1,4 @@ -import { - HassEntity, - HassServiceTarget, - UnsubscribeFunc, -} from "home-assistant-js-websocket"; +import { HassEntity, HassServiceTarget } from "home-assistant-js-websocket"; import { css, CSSResultGroup, @@ -17,8 +13,7 @@ import { DeviceRegistryEntry, getDeviceIntegrationLookup, } from "../../data/device_registry"; -import type { EntityRegistryEntry } from "../../data/entity_registry"; -import { subscribeEntityRegistry } from "../../data/entity_registry"; +import { EntityRegistryEntry } from "../../data/entity_registry"; import { EntitySources, fetchEntitySourcesWithCache, @@ -28,12 +23,11 @@ import { filterSelectorEntities, TargetSelector, } from "../../data/selector"; -import { SubscribeMixin } from "../../mixins/subscribe-mixin"; import type { HomeAssistant } from "../../types"; import "../ha-target-picker"; @customElement("ha-selector-target") -export class HaTargetSelector extends SubscribeMixin(LitElement) { +export class HaTargetSelector extends LitElement { @property() public hass!: HomeAssistant; @property() public selector!: TargetSelector; @@ -48,18 +42,8 @@ export class HaTargetSelector extends SubscribeMixin(LitElement) { @state() private _entitySources?: EntitySources; - @state() private _entities?: EntityRegistryEntry[]; - private _deviceIntegrationLookup = memoizeOne(getDeviceIntegrationLookup); - public hassSubscribe(): UnsubscribeFunc[] { - return [ - subscribeEntityRegistry(this.hass.connection!, (entities) => { - this._entities = entities.filter((entity) => entity.device_id !== null); - }), - ]; - } - protected updated(changedProperties: PropertyValues): void { super.updated(changedProperties); if ( @@ -88,12 +72,19 @@ export class HaTargetSelector extends SubscribeMixin(LitElement) { .value=${this.value} .helper=${this.helper} .deviceFilter=${this._filterDevices} - .entityFilter=${this._filterEntities} + .entityFilter=${this._filterStates} + .entityRegFilter=${this._filterRegEntities} + .includeDeviceClasses=${this.selector.target?.entity?.device_class + ? [this.selector.target?.entity.device_class] + : undefined} + .includeDomains=${this.selector.target?.entity?.domain + ? [this.selector.target?.entity.domain] + : undefined} .disabled=${this.disabled} >`; } - private _filterEntities = (entity: HassEntity): boolean => { + private _filterStates = (entity: HassEntity): boolean => { if (!this.selector.target?.entity) { return true; } @@ -105,15 +96,26 @@ export class HaTargetSelector extends SubscribeMixin(LitElement) { ); }; + private _filterRegEntities = (entity: EntityRegistryEntry): boolean => { + if (this.selector.target?.entity?.integration) { + if (entity.platform !== this.selector.target.entity.integration) { + return false; + } + } + return true; + }; + private _filterDevices = (device: DeviceRegistryEntry): boolean => { if (!this.selector.target?.device) { return true; } - const deviceIntegrations = - this._entitySources && this._entities - ? this._deviceIntegrationLookup(this._entitySources, this._entities) - : undefined; + const deviceIntegrations = this._entitySources + ? this._deviceIntegrationLookup( + this._entitySources, + Object.values(this.hass.entities) + ) + : undefined; return filterSelectorDevices( this.selector.target.device, diff --git a/src/components/ha-target-picker.ts b/src/components/ha-target-picker.ts index d5dd2c8630..09336afc65 100644 --- a/src/components/ha-target-picker.ts +++ b/src/components/ha-target-picker.ts @@ -358,7 +358,6 @@ export class HaTargetPicker extends SubscribeMixin(LitElement) { "ui.components.target-picker.add_device_id" )} .deviceFilter=${this.deviceFilter} - .entityFilter=${this.entityRegFilter} .includeDeviceClasses=${this.includeDeviceClasses} .includeDomains=${this.includeDomains} @value-changed=${this._targetPicked}