From 3b1bc37f5394f29f515e4e647c182187d32f9e34 Mon Sep 17 00:00:00 2001 From: karwosts <32912880+karwosts@users.noreply.github.com> Date: Wed, 15 Feb 2023 13:18:52 -0800 Subject: [PATCH] More alarm arming options in more-info dialog (#15452) * More alarm arming options in more-info dialog * minor change to null handling * Update src/dialogs/more-info/controls/more-info-alarm_control_panel.ts Co-authored-by: Paul Bottein * Update src/dialogs/more-info/controls/more-info-alarm_control_panel.ts Co-authored-by: Paul Bottein --------- Co-authored-by: Paul Bottein --- src/data/alarm_control_panel.ts | 9 ++++ .../controls/more-info-alarm_control_panel.ts | 52 +++++++++++++++++-- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/src/data/alarm_control_panel.ts b/src/data/alarm_control_panel.ts index 31bb8de9c7..20ecbaa8ce 100644 --- a/src/data/alarm_control_panel.ts +++ b/src/data/alarm_control_panel.ts @@ -3,6 +3,15 @@ import { HomeAssistant } from "../types"; export const FORMAT_TEXT = "text"; export const FORMAT_NUMBER = "number"; +export const enum AlarmControlPanelEntityFeature { + ARM_HOME = 1, + ARM_AWAY = 2, + ARM_NIGHT = 4, + TRIGGER = 8, + ARM_CUSTOM_BYPASS = 16, + ARM_VACATION = 32, +} + export const callAlarmAction = ( hass: HomeAssistant, entity: string, diff --git a/src/dialogs/more-info/controls/more-info-alarm_control_panel.ts b/src/dialogs/more-info/controls/more-info-alarm_control_panel.ts index 0fb7401959..2f4441ee15 100644 --- a/src/dialogs/more-info/controls/more-info-alarm_control_panel.ts +++ b/src/dialogs/more-info/controls/more-info-alarm_control_panel.ts @@ -1,18 +1,19 @@ import "@material/mwc-button"; import type { HassEntity } from "home-assistant-js-websocket"; -import { css, html, LitElement, TemplateResult } from "lit"; -import { customElement, property, query } from "lit/decorators"; +import { css, html, LitElement, PropertyValues, TemplateResult } from "lit"; +import { customElement, property, state, query } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; import "../../../components/ha-textfield"; +import { supportsFeature } from "../../../common/entity/supports-feature"; import type { HaTextField } from "../../../components/ha-textfield"; import { callAlarmAction, FORMAT_NUMBER, + AlarmControlPanelEntityFeature, } from "../../../data/alarm_control_panel"; import type { HomeAssistant } from "../../../types"; const BUTTONS = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "", "0", "clear"]; -const ARM_ACTIONS = ["arm_home", "arm_away"]; const DISARM_ACTIONS = ["disarm"]; @customElement("more-info-alarm_control_panel") @@ -21,8 +22,51 @@ export class MoreInfoAlarmControlPanel extends LitElement { @property({ attribute: false }) public stateObj?: HassEntity; + @state() private _armActions: string[] = []; + @query("#alarmCode") private _input?: HaTextField; + public willUpdate(changedProps: PropertyValues) { + super.willUpdate(changedProps); + + if (!this.stateObj || !changedProps.has("stateObj")) { + return; + } + + this._armActions = []; + if ( + supportsFeature(this.stateObj, AlarmControlPanelEntityFeature.ARM_HOME) + ) { + this._armActions.push("arm_home"); + } + if ( + supportsFeature(this.stateObj, AlarmControlPanelEntityFeature.ARM_AWAY) + ) { + this._armActions.push("arm_away"); + } + if ( + supportsFeature(this.stateObj, AlarmControlPanelEntityFeature.ARM_NIGHT) + ) { + this._armActions.push("arm_night"); + } + if ( + supportsFeature( + this.stateObj, + AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS + ) + ) { + this._armActions.push("arm_custom_bypass"); + } + if ( + supportsFeature( + this.stateObj, + AlarmControlPanelEntityFeature.ARM_VACATION + ) + ) { + this._armActions.push("arm_vacation"); + } + } + protected render(): TemplateResult { if (!this.hass || !this.stateObj) { return html``; @@ -72,7 +116,7 @@ export class MoreInfoAlarmControlPanel extends LitElement { `}
${(this.stateObj.state === "disarmed" - ? ARM_ACTIONS + ? this._armActions : DISARM_ACTIONS ).map( (stateAction) => html`