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 <paul.bottein@gmail.com>

* Update src/dialogs/more-info/controls/more-info-alarm_control_panel.ts

Co-authored-by: Paul Bottein <paul.bottein@gmail.com>

---------

Co-authored-by: Paul Bottein <paul.bottein@gmail.com>
This commit is contained in:
karwosts 2023-02-15 13:18:52 -08:00 committed by GitHub
parent cb85bc054a
commit 3b1bc37f53
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 57 additions and 4 deletions

View File

@ -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,

View File

@ -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<this>) {
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 {
`}
<div class="actions">
${(this.stateObj.state === "disarmed"
? ARM_ACTIONS
? this._armActions
: DISARM_ACTIONS
).map(
(stateAction) => html`