From 8ecfd9780f6d21ca1e9f13033d7595b4c136c624 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Thu, 29 Nov 2018 04:52:22 -0600 Subject: [PATCH] Convert hui-entities-toggle to TypeScript/LitElement (#2144) * Convert hui-entities-toggle to TypeScript/LitElement * Assign types to _callService --- .../components/hui-entities-toggle.js | 60 ------------- .../components/hui-entities-toggle.ts | 84 +++++++++++++++++++ 2 files changed, 84 insertions(+), 60 deletions(-) delete mode 100644 src/panels/lovelace/components/hui-entities-toggle.js create mode 100644 src/panels/lovelace/components/hui-entities-toggle.ts diff --git a/src/panels/lovelace/components/hui-entities-toggle.js b/src/panels/lovelace/components/hui-entities-toggle.js deleted file mode 100644 index 9b52a8bc1d..0000000000 --- a/src/panels/lovelace/components/hui-entities-toggle.js +++ /dev/null @@ -1,60 +0,0 @@ -import { html } from "@polymer/polymer/lib/utils/html-tag"; -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import "@polymer/paper-toggle-button/paper-toggle-button"; - -import { DOMAINS_TOGGLE } from "../../../common/const"; -import { turnOnOffEntities } from "../common/entity/turn-on-off-entities"; - -class HuiEntitiesToggle extends PolymerElement { - static get template() { - return html` - - - `; - } - - static get properties() { - return { - hass: Object, - entities: Array, - _toggleEntities: { - type: Array, - computed: "_computeToggleEntities(hass, entities)", - }, - }; - } - - _computeToggleEntities(hass, entityIds) { - return entityIds.filter( - (entityId) => - entityId in hass.states && DOMAINS_TOGGLE.has(entityId.split(".", 1)[0]) - ); - } - - _computeIsChecked(hass, entityIds) { - return entityIds.some((entityId) => hass.states[entityId].state === "on"); - } - - _callService(ev) { - const turnOn = ev.target.checked; - turnOnOffEntities(this.hass, this._toggleEntities, turnOn); - } -} - -customElements.define("hui-entities-toggle", HuiEntitiesToggle); diff --git a/src/panels/lovelace/components/hui-entities-toggle.ts b/src/panels/lovelace/components/hui-entities-toggle.ts new file mode 100644 index 0000000000..95d1559766 --- /dev/null +++ b/src/panels/lovelace/components/hui-entities-toggle.ts @@ -0,0 +1,84 @@ +import { + html, + LitElement, + PropertyDeclarations, + PropertyValues, +} from "@polymer/lit-element"; +import { TemplateResult } from "lit-html"; +import { PaperToggleButtonElement } from "@polymer/paper-toggle-button/paper-toggle-button"; + +import { DOMAINS_TOGGLE } from "../../../common/const"; +import { turnOnOffEntities } from "../common/entity/turn-on-off-entities"; +import { HomeAssistant } from "../../../types"; + +class HuiEntitiesToggle extends LitElement { + public entities?: string[]; + protected hass?: HomeAssistant; + private _toggleEntities?: string[]; + + static get properties(): PropertyDeclarations { + return { + hass: {}, + entities: {}, + _toggleEntities: {}, + }; + } + + public updated(changedProperties: PropertyValues) { + if (changedProperties.has("entities")) { + this._toggleEntities = this.entities!.filter( + (entityId) => + entityId in this.hass!.states && + DOMAINS_TOGGLE.has(entityId.split(".", 1)[0]) + ); + } + } + + protected render(): TemplateResult { + if (!this._toggleEntities) { + return html``; + } + + return html` + ${this.renderStyle()} + + `; + } + + private renderStyle(): TemplateResult { + return html` + + `; + } + + private _callService(ev: MouseEvent): void { + const turnOn = (ev.target as PaperToggleButtonElement).checked; + turnOnOffEntities(this.hass!, this._toggleEntities!, turnOn!); + } +} + +declare global { + interface HTMLElementTagNameMap { + "hui-entities-toggle": HuiEntitiesToggle; + } +} + +customElements.define("hui-entities-toggle", HuiEntitiesToggle);