From 6e336dd207310368f767fb84e1846e18e9b1d884 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Mon, 9 Nov 2020 11:26:05 -0600 Subject: [PATCH] convert ha-cover-tilt-controls to TypeScript/LitElement (#7542) --- src/components/ha-cover-tilt-controls.js | 106 -------------------- src/components/ha-cover-tilt-controls.ts | 122 +++++++++++++++++++++++ src/translations/en.json | 5 + 3 files changed, 127 insertions(+), 106 deletions(-) delete mode 100644 src/components/ha-cover-tilt-controls.js create mode 100644 src/components/ha-cover-tilt-controls.ts diff --git a/src/components/ha-cover-tilt-controls.js b/src/components/ha-cover-tilt-controls.js deleted file mode 100644 index 08f992380a..0000000000 --- a/src/components/ha-cover-tilt-controls.js +++ /dev/null @@ -1,106 +0,0 @@ -import "@polymer/iron-flex-layout/iron-flex-layout-classes"; -import "./ha-icon-button"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { UNAVAILABLE } from "../data/entity"; -import CoverEntity from "../util/cover-model"; - -class HaCoverTiltControls extends PolymerElement { - static get template() { - return html` - - - - - - `; - } - - static get properties() { - return { - hass: { - type: Object, - }, - stateObj: { - type: Object, - }, - entityObj: { - type: Object, - computed: "computeEntityObj(hass, stateObj)", - }, - }; - } - - computeEntityObj(hass, stateObj) { - return new CoverEntity(hass, stateObj); - } - - computeStopDisabled(stateObj) { - if (stateObj.state === UNAVAILABLE) { - return true; - } - return false; - } - - computeOpenDisabled(stateObj, entityObj) { - if (stateObj.state === UNAVAILABLE) { - return true; - } - const assumedState = stateObj.attributes.assumed_state === true; - return entityObj.isFullyOpenTilt && !assumedState; - } - - computeClosedDisabled(stateObj, entityObj) { - if (stateObj.state === UNAVAILABLE) { - return true; - } - const assumedState = stateObj.attributes.assumed_state === true; - return entityObj.isFullyClosedTilt && !assumedState; - } - - onOpenTiltTap(ev) { - ev.stopPropagation(); - this.entityObj.openCoverTilt(); - } - - onCloseTiltTap(ev) { - ev.stopPropagation(); - this.entityObj.closeCoverTilt(); - } - - onStopTiltTap(ev) { - ev.stopPropagation(); - this.entityObj.stopCoverTilt(); - } -} - -customElements.define("ha-cover-tilt-controls", HaCoverTiltControls); diff --git a/src/components/ha-cover-tilt-controls.ts b/src/components/ha-cover-tilt-controls.ts new file mode 100644 index 0000000000..843eaa6598 --- /dev/null +++ b/src/components/ha-cover-tilt-controls.ts @@ -0,0 +1,122 @@ +import { HassEntity } from "home-assistant-js-websocket"; +import { + LitElement, + property, + internalProperty, + CSSResult, + css, + customElement, + TemplateResult, + html, + PropertyValues, +} from "lit-element"; +import { classMap } from "lit-html/directives/class-map"; + +import { UNAVAILABLE } from "../data/entity"; +import { HomeAssistant } from "../types"; +import CoverEntity from "../util/cover-model"; + +import "./ha-icon-button"; + +@customElement("ha-cover-tilt-controls") +class HaCoverTiltControls extends LitElement { + @property({ attribute: false }) public hass!: HomeAssistant; + + @property({ attribute: false }) stateObj!: HassEntity; + + @internalProperty() private _entityObj?: CoverEntity; + + protected updated(changedProperties: PropertyValues): void { + super.updated(changedProperties); + + if (changedProperties.has("stateObj")) { + this._entityObj = new CoverEntity(this.hass, this.stateObj); + } + } + + protected render(): TemplateResult { + if (!this._entityObj) { + return html``; + } + + return html` + + `; + } + + private _computeOpenDisabled(): boolean { + if (this.stateObj.state === UNAVAILABLE) { + return true; + } + const assumedState = this.stateObj.attributes.assumed_state === true; + return this._entityObj.isFullyOpenTilt && !assumedState; + } + + private _computeClosedDisabled(): boolean { + if (this.stateObj.state === UNAVAILABLE) { + return true; + } + const assumedState = this.stateObj.attributes.assumed_state === true; + return this._entityObj.isFullyClosedTilt && !assumedState; + } + + private _onOpenTiltTap(ev): void { + ev.stopPropagation(); + this._entityObj.openCoverTilt(); + } + + private _onCloseTiltTap(ev): void { + ev.stopPropagation(); + this._entityObj.closeCoverTilt(); + } + + private _onStopTiltTap(ev): void { + ev.stopPropagation(); + this._entityObj.stopCoverTilt(); + } + + static get styles(): CSSResult { + return css` + :host { + white-space: nowrap; + } + .invisible { + visibility: hidden !important; + } + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-cover-tilt-controls": HaCoverTiltControls; + } +} diff --git a/src/translations/en.json b/src/translations/en.json index 30c4e91891..98e7eabaa0 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -554,6 +554,11 @@ }, "person": { "create_zone": "Create zone from current location" + }, + "cover": { + "open_tilt_cover": "Open cover tilt", + "close_tile_cover": "Close cover tilt", + "stop_cover": "Stop cover from moving" } }, "entity_registry": {