From efc8ed5c9431ff97be34cc44909b2103ff92090d Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Thu, 13 Jul 2023 16:33:56 +0200 Subject: [PATCH] Add condition selector for blueprint (#17278) --- .../ha-selector/ha-selector-condition.ts | 48 +++++++++++++++++++ src/components/ha-selector/ha-selector.ts | 5 +- src/data/selector.ts | 6 +++ 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/components/ha-selector/ha-selector-condition.ts diff --git a/src/components/ha-selector/ha-selector-condition.ts b/src/components/ha-selector/ha-selector-condition.ts new file mode 100644 index 0000000000..fe76180793 --- /dev/null +++ b/src/components/ha-selector/ha-selector-condition.ts @@ -0,0 +1,48 @@ +import { css, CSSResultGroup, html, LitElement } from "lit"; +import { customElement, property } from "lit/decorators"; +import { Condition } from "../../data/automation"; +import { ConditionSelector } from "../../data/selector"; +import "../../panels/config/automation/condition/ha-automation-condition"; +import { HomeAssistant } from "../../types"; + +@customElement("ha-selector-condition") +export class HaConditionSelector extends LitElement { + @property() public hass!: HomeAssistant; + + @property() public selector!: ConditionSelector; + + @property() public value?: Condition; + + @property() public label?: string; + + @property({ type: Boolean, reflect: true }) public disabled = false; + + protected render() { + return html` + + `; + } + + static get styles(): CSSResultGroup { + return css` + ha-automation-condition { + display: block; + margin-bottom: 16px; + } + :host([disabled]) ha-automation-condition { + opacity: var(--light-disabled-opacity); + pointer-events: none; + } + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-selector-condition": HaConditionSelector; + } +} diff --git a/src/components/ha-selector/ha-selector.ts b/src/components/ha-selector/ha-selector.ts index 2e7e5143d8..9c831c0a10 100644 --- a/src/components/ha-selector/ha-selector.ts +++ b/src/components/ha-selector/ha-selector.ts @@ -3,9 +3,9 @@ import { customElement, property } from "lit/decorators"; import memoizeOne from "memoize-one"; import { dynamicElement } from "../../common/dom/dynamic-element-directive"; import { - Selector, - handleLegacyEntitySelector, handleLegacyDeviceSelector, + handleLegacyEntitySelector, + Selector, } from "../../data/selector"; import type { HomeAssistant } from "../../types"; @@ -17,6 +17,7 @@ const LOAD_ELEMENTS = { assist_pipeline: () => import("./ha-selector-assist-pipeline"), boolean: () => import("./ha-selector-boolean"), color_rgb: () => import("./ha-selector-color-rgb"), + condition: () => import("./ha-selector-condition"), config_entry: () => import("./ha-selector-config-entry"), conversation_agent: () => import("./ha-selector-conversation-agent"), constant: () => import("./ha-selector-constant"), diff --git a/src/data/selector.ts b/src/data/selector.ts index acbac41a43..f046a5a1fd 100644 --- a/src/data/selector.ts +++ b/src/data/selector.ts @@ -19,6 +19,7 @@ export type Selector = | BooleanSelector | ColorRGBSelector | ColorTempSelector + | ConditionSelector | ConversationAgentSelector | ConfigEntrySelector | ConstantSelector @@ -96,6 +97,11 @@ export interface ColorTempSelector { } | null; } +export interface ConditionSelector { + // eslint-disable-next-line @typescript-eslint/ban-types + condition: {} | null; +} + export interface ConversationAgentSelector { conversation_agent: { language?: string } | null; }