From 273904a6eb43840dee30406bbd1bbeb5b71805ab Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Fri, 31 Mar 2023 21:07:41 +0200 Subject: [PATCH] Add support for `supported_features` for entity selector (#16003) --- src/data/selector.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/data/selector.ts b/src/data/selector.ts index 12168d435e..91119bc2ec 100644 --- a/src/data/selector.ts +++ b/src/data/selector.ts @@ -1,5 +1,7 @@ import type { HassEntity } from "home-assistant-js-websocket"; +import { ensureArray } from "../common/array/ensure-array"; import { computeStateDomain } from "../common/entity/compute_state_domain"; +import { supportsFeature } from "../common/entity/supports-feature"; import { UiAction } from "../panels/lovelace/components/hui-action-editor"; import type { DeviceRegistryEntry } from "./device_registry"; import type { EntitySources } from "./entity_sources"; @@ -149,6 +151,7 @@ interface EntitySelectorFilter { integration?: string; domain?: string | readonly string[]; device_class?: string | readonly string[]; + supported_features?: number | [number]; } export interface EntitySelector { @@ -358,6 +361,7 @@ export const filterSelectorEntities = ( const { domain: filterDomain, device_class: filterDeviceClass, + supported_features: filterSupportedFeature, integration: filterIntegration, } = filterEntity; @@ -383,6 +387,16 @@ export const filterSelectorEntities = ( } } + if (filterSupportedFeature) { + if ( + ensureArray(filterSupportedFeature).some( + (feature) => !supportsFeature(entity, feature) + ) + ) { + return false; + } + } + if ( filterIntegration && entitySources?.[entity.entity_id]?.domain !== filterIntegration