diff --git a/src/components/entity/ha-entity-picker.ts b/src/components/entity/ha-entity-picker.ts index 9b13c75515..fe78bfe3cc 100644 --- a/src/components/entity/ha-entity-picker.ts +++ b/src/components/entity/ha-entity-picker.ts @@ -18,6 +18,7 @@ import "./state-badge"; interface HassEntityWithCachedName extends HassEntity { friendly_name: string; + id: string; } export type HaEntityPickerEntityFilterFunc = (entityId: HassEntity) => boolean; @@ -96,6 +97,9 @@ export class HaEntityPicker extends LitElement { @property() public entityFilter?: HaEntityPickerEntityFilterFunc; + @property({ attribute: "item-value-path" }) public itemValuePath = + "entity_id"; + @property({ type: Boolean }) public hideClearIcon = false; @state() private _opened = false; @@ -144,6 +148,7 @@ export class HaEntityPicker extends LitElement { state: "", last_changed: "", last_updated: "", + id: "", context: { id: "", user_id: null, parent_id: null }, friendly_name: this.hass!.localize( "ui.components.entity.entity-picker.no_entities" @@ -164,10 +169,15 @@ export class HaEntityPicker extends LitElement { ); return entityIds - .map((key) => ({ - ...hass!.states[key], - friendly_name: computeStateName(hass!.states[key]) || key, - })) + .map((key) => { + const stateObj = hass!.states[key]; + + return { + ...stateObj, + friendly_name: computeStateName(stateObj) || key, + id: stateObj.context.id, + }; + }) .sort((entityA, entityB) => caseInsensitiveStringCompare( entityA.friendly_name, @@ -195,10 +205,15 @@ export class HaEntityPicker extends LitElement { } states = entityIds - .map((key) => ({ - ...hass!.states[key], - friendly_name: computeStateName(hass!.states[key]) || key, - })) + .map((key) => { + const stateObj = hass!.states[key]; + + return { + ...stateObj, + friendly_name: computeStateName(stateObj) || key, + id: stateObj.context?.id, + }; + }) .sort((entityA, entityB) => caseInsensitiveStringCompare( entityA.friendly_name, @@ -243,6 +258,7 @@ export class HaEntityPicker extends LitElement { state: "", last_changed: "", last_updated: "", + id: "", context: { id: "", user_id: null, parent_id: null }, friendly_name: this.hass!.localize( "ui.components.entity.entity-picker.no_match" @@ -295,8 +311,8 @@ export class HaEntityPicker extends LitElement { protected render(): TemplateResult { return html` `; } diff --git a/src/data/selector.ts b/src/data/selector.ts index 427697d3cf..f824b82992 100644 --- a/src/data/selector.ts +++ b/src/data/selector.ts @@ -106,6 +106,7 @@ export interface EntitySelector { domain?: string | string[]; device_class?: string; multiple?: boolean; + use_uuid?: boolean; include_entities?: string[]; exclude_entities?: string[]; };