From 06f653117a0c591b99bc38c7140530680d181a3c Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Thu, 17 Jul 2025 17:34:06 +0200 Subject: [PATCH] Don't use combine mode --- .../entity/ha-entity-state-picker.ts | 51 +++++-------------- .../ha-selector/ha-selector-state.ts | 1 - src/components/ha-service-control.ts | 18 +------ src/data/selector.ts | 1 - 4 files changed, 13 insertions(+), 58 deletions(-) diff --git a/src/components/entity/ha-entity-state-picker.ts b/src/components/entity/ha-entity-state-picker.ts index bfaf7f4173..bdd8f8d7cf 100644 --- a/src/components/entity/ha-entity-state-picker.ts +++ b/src/components/entity/ha-entity-state-picker.ts @@ -16,8 +16,6 @@ interface StateOption { label: string; } -const DEFAULT_COMBINE_MODE: "union" | "intersection" = "union"; - @customElement("ha-entity-state-picker") class HaEntityStatePicker extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; @@ -41,9 +39,6 @@ class HaEntityStatePicker extends LitElement { @property({ attribute: false }) public hideStates?: string[]; - @property({ attribute: "combine-mode" }) - public combineMode?: "union" | "intersection"; - @property() public label?: string; @property() public value?: string; @@ -74,47 +69,25 @@ class HaEntityStatePicker extends LitElement { } const states = getStates(this.hass, stateObj, this.attribute).filter( - (s) => !this.hideStates || !this.hideStates.includes(s) + (s) => !this.hideStates?.includes(s) ); return states.map((s) => ({ value: s, - label: !this.attribute - ? this.hass.formatEntityState(stateObj, s) - : this.hass.formatEntityAttributeValue(stateObj, this.attribute, s), + label: this.attribute + ? this.hass.formatEntityAttributeValue(stateObj, this.attribute, s) + : this.hass.formatEntityState(stateObj, s), })); }); - const mode: "union" | "intersection" = - this.combineMode || DEFAULT_COMBINE_MODE; - - let options: StateOption[] = []; - - if (mode === "union") { - // Union: combine all unique states from all entities - options = entitiesOptions.reduce( - (acc, curr) => [ - ...acc, - ...curr.filter( - (item) => !acc.some((existing) => existing.value === item.value) - ), - ], - [] as StateOption[] - ); - } else if (mode === "intersection") { - // Intersection: only states that exist in ALL entities - if (entitiesOptions.length === 0) { - options = []; - } else if (entitiesOptions.length === 1) { - options = entitiesOptions[0]; - } else { - options = entitiesOptions[0].filter((item) => - entitiesOptions - .slice(1) - .every((entityOptions) => - entityOptions.some((option) => option.value === item.value) - ) - ); + const options: StateOption[] = []; + const optionsSet = new Set(); + for (const entityOptions of entitiesOptions) { + for (const option of entityOptions) { + if (!optionsSet.has(option.value)) { + optionsSet.add(option.value); + options.push(option); + } } } diff --git a/src/components/ha-selector/ha-selector-state.ts b/src/components/ha-selector/ha-selector-state.ts index 8f03a92658..fac976e879 100644 --- a/src/components/ha-selector/ha-selector-state.ts +++ b/src/components/ha-selector/ha-selector-state.ts @@ -42,7 +42,6 @@ export class HaSelectorState extends SubscribeMixin(LitElement) { .required=${this.required} allow-custom-value .hideStates=${this.selector.state?.hide_states} - .combineMode=${this.selector.state?.combine_mode} > `; } diff --git a/src/components/ha-service-control.ts b/src/components/ha-service-control.ts index ba6c0f4615..e69192f361 100644 --- a/src/components/ha-service-control.ts +++ b/src/components/ha-service-control.ts @@ -55,20 +55,6 @@ const showOptionalToggle = (field) => !field.required && !("boolean" in field.selector && field.default); -const enrichSelector = (selector: Selector): Selector => { - // Default combine_mode to intersection for state selectors - if ("state" in selector) { - return { - ...selector, - state: { - ...selector.state, - combine_mode: selector.state?.combine_mode || "intersection", - }, - }; - } - return selector; -}; - interface Field extends Omit { key: string; selector?: Selector; @@ -258,9 +244,7 @@ export class HaServiceControl extends LitElement { ).map(([key, value]) => ({ key, ...value, - selector: (value.selector - ? enrichSelector(value.selector) - : undefined) as Selector | undefined, + selector: (value.selector || undefined) as Selector | undefined, })); const flatFields: Field[] = []; diff --git a/src/data/selector.ts b/src/data/selector.ts index 8fdb04589d..3dfba90532 100644 --- a/src/data/selector.ts +++ b/src/data/selector.ts @@ -396,7 +396,6 @@ export interface StateSelector { entity_id?: string | string[]; attribute?: string; hide_states?: string[]; - combine_mode?: "union" | "intersection"; } | null; }