From 9bafbdd989732373691e5ef940d635f89a6c9e18 Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Mon, 23 Oct 2023 15:49:43 +0200 Subject: [PATCH] Allow multiple states in conditional card (#18273) * Allow multiple states in conditional card * Update src/panels/lovelace/editor/conditions/types/ha-card-condition-state.ts Co-authored-by: Bram Kragten --------- Co-authored-by: Bram Kragten --- src/panels/lovelace/common/validate-condition.ts | 13 +++++++------ .../conditions/types/ha-card-condition-state.ts | 7 +++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/panels/lovelace/common/validate-condition.ts b/src/panels/lovelace/common/validate-condition.ts index 442e40921b..b4912788b0 100644 --- a/src/panels/lovelace/common/validate-condition.ts +++ b/src/panels/lovelace/common/validate-condition.ts @@ -1,3 +1,4 @@ +import { ensureArray } from "../../../common/array/ensure-array"; import { UNAVAILABLE } from "../../../data/entity"; import { HomeAssistant } from "../../../types"; @@ -5,15 +6,15 @@ export type Condition = StateCondition | ScreenCondition | UserCondition; export type LegacyCondition = { entity?: string; - state?: string; - state_not?: string; + state?: string | string[]; + state_not?: string | string[]; }; export type StateCondition = { condition: "state"; entity?: string; - state?: string; - state_not?: string; + state?: string | string[]; + state_not?: string | string[]; }; export type ScreenCondition = { @@ -36,8 +37,8 @@ function checkStateCondition( : UNAVAILABLE; return condition.state != null - ? state === condition.state - : state !== condition.state_not; + ? ensureArray(condition.state).includes(state) + : ensureArray(condition.state_not).includes(state); } function checkScreenCondition(condition: ScreenCondition, _: HomeAssistant) { diff --git a/src/panels/lovelace/editor/conditions/types/ha-card-condition-state.ts b/src/panels/lovelace/editor/conditions/types/ha-card-condition-state.ts index ed4d4718ec..8c9234d221 100644 --- a/src/panels/lovelace/editor/conditions/types/ha-card-condition-state.ts +++ b/src/panels/lovelace/editor/conditions/types/ha-card-condition-state.ts @@ -21,7 +21,7 @@ type StateConditionData = { condition: "state"; entity: string; invert: "true" | "false"; - state?: string; + state?: string | string[]; }; @customElement("ha-card-condition-state") @@ -103,7 +103,10 @@ export class HaCardConditionState extends LitElement { ...content, entity: this.condition.entity ?? "", invert: this.condition.state_not ? "true" : "false", - state: this.condition.state_not ?? this.condition.state ?? "", + state: + (this.condition.state_not as string | string[] | undefined) ?? + (this.condition.state as string | string[] | undefined) ?? + "", }; return html`