From 0b504c7df2b0b5578fedaa66a4aba3e066a469d4 Mon Sep 17 00:00:00 2001 From: Zack Arnett Date: Sat, 27 Oct 2018 04:59:33 -0400 Subject: [PATCH 1/4] Thermostat fix (#1867) * Thermostat fix * Fix for unknown operation mode * No title for you * I suck at removing unnecessary things * Fixing pointless Ternary operator --- .../lovelace/cards/hui-thermostat-card.ts | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/panels/lovelace/cards/hui-thermostat-card.ts b/src/panels/lovelace/cards/hui-thermostat-card.ts index 748d48d8f2..bf066ed007 100644 --- a/src/panels/lovelace/cards/hui-thermostat-card.ts +++ b/src/panels/lovelace/cards/hui-thermostat-card.ts @@ -9,6 +9,7 @@ import { roundSliderStyle } from "../../../resources/jquery.roundslider"; import { HomeAssistant } from "../../../types.js"; import { hassLocalizeLitMixin } from "../../../mixins/lit-localize-mixin"; import { LovelaceCard, LovelaceConfig } from "../types.js"; +import computeStateName from "../../../common/entity/compute_state_name.js"; const thermostatConfig = { radius: 150, @@ -66,18 +67,21 @@ export class HuiThermostatCard extends hassLocalizeLitMixin(LitElement) } const stateObj = this.hass.states[this.config.entity]; const broadCard = this.clientWidth > 390; + const mode = modeIcons[stateObj.attributes.operation_mode] + ? stateObj.attributes.operation_mode + : "unknown-mode"; return html` ${this.renderStyle()}
-
Upstairs
+
${computeStateName(stateObj)}
${ stateObj.attributes.current_temperature @@ -94,7 +98,7 @@ export class HuiThermostatCard extends hassLocalizeLitMixin(LitElement) )}
${stateObj.attributes.operation_list.map((modeItem) => - this._renderIcon(modeItem, stateObj.attributes.operation_mode) + this._renderIcon(modeItem, mode) )}
@@ -105,10 +109,10 @@ export class HuiThermostatCard extends hassLocalizeLitMixin(LitElement) protected shouldUpdate(changedProps) { if (changedProps.get("hass")) { - return changedProps.get("hass").states[this.config!.entity] !== + return ( + changedProps.get("hass").states[this.config!.entity] !== this.hass!.states[this.config!.entity] - ? true - : false; + ); } return changedProps; } @@ -178,6 +182,12 @@ export class HuiThermostatCard extends hassLocalizeLitMixin(LitElement) .off { --mode-color: #8a8a8a; } + .unknown-mode { + --mode-color: #bac; + } + .no-title { + --title-margin-top: 33% !important; + } .large { --thermostat-padding-top: 25px; --thermostat-margin-bottom: 25px; @@ -324,6 +334,9 @@ export class HuiThermostatCard extends hassLocalizeLitMixin(LitElement) } private _renderIcon(mode, currentMode) { + if (!modeIcons[mode]) { + return html``; + } return html` Date: Sat, 27 Oct 2018 11:40:52 +0200 Subject: [PATCH 2/4] Add version bump script --- script/version_bump.js | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100755 script/version_bump.js diff --git a/script/version_bump.js b/script/version_bump.js new file mode 100755 index 0000000000..87cb4be368 --- /dev/null +++ b/script/version_bump.js @@ -0,0 +1,52 @@ +#!/usr/bin/env node +const fs = require("fs"); +const util = require("util"); +const exec = util.promisify(require("child_process").exec); + +function patch(version) { + const parts = version.split("."); + return `${parts[0]}.${Number(parts[1]) + 1}`; +} + +function today(version) { + const now = new Date(); + return `${now.getFullYear()}${now.getMonth() + 1}${now.getDate()}.0`; +} + +const methods = { + patch, + today, +}; + +async function main(args) { + const method = args.length > 0 && methods[args[0]]; + const commit = args.length > 1 && args[1] == "--commit"; + + if (!method) { + console.error( + "Missing required method. Choose from", + Object.keys(methods).join(", ") + ); + return; + } + + const setup = fs.readFileSync("setup.py", "utf8"); + const version = setup.match(/\d{8}\.\d+/)[0]; + const newVersion = method(version); + + console.log("Current version:", version); + console.log("New version:", newVersion); + + fs.writeFileSync("setup.py", setup.replace(version, newVersion), "utf-8"); + + if (!commit) { + return; + } + + const { stdout } = await exec( + `git commit -am "Bumped version to ${newVersion}"` + ); + console.log(stdout); +} + +main(process.argv.slice(2)); From d6a9d6829beafea2707c21598cae4be618648191 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 27 Oct 2018 12:00:40 +0200 Subject: [PATCH 3/4] Fix hass setting on stack (#1868) * Fix hass setting on stack * Don't set hass on pic elements if undefined * Don't set hass on entity rows if undefined * prefix config prop * Pic elements set hass yoooo * Remove interface * Make stack config private * Fix import * Lint --- .../lovelace/cards/hui-entities-card.ts | 26 ++++---- .../cards/hui-horizontal-stack-card.ts | 11 +--- src/panels/lovelace/cards/hui-stack-card.ts | 15 ++--- .../lovelace/cards/hui-vertical-stack-card.ts | 62 ++----------------- 4 files changed, 29 insertions(+), 85 deletions(-) diff --git a/src/panels/lovelace/cards/hui-entities-card.ts b/src/panels/lovelace/cards/hui-entities-card.ts index e8f052c076..32cc353d7d 100644 --- a/src/panels/lovelace/cards/hui-entities-card.ts +++ b/src/panels/lovelace/cards/hui-entities-card.ts @@ -31,8 +31,8 @@ interface Config extends LovelaceConfig { class HuiEntitiesCard extends hassLocalizeLitMixin(LitElement) implements LovelaceCard { protected _hass?: HomeAssistant; - protected config?: Config; - protected configEntities?: ConfigEntity[]; + protected _config?: Config; + protected _configEntities?: ConfigEntity[]; set hass(hass) { this._hass = hass; @@ -45,16 +45,16 @@ class HuiEntitiesCard extends hassLocalizeLitMixin(LitElement) static get properties(): PropertyDeclarations { return { - config: {}, + _config: {}, }; } public getCardSize() { - if (!this.config) { + if (!this._config) { return 0; } // +1 for the header - return (this.config.title ? 1 : 0) + this.config.entities.length; + return (this._config.title ? 1 : 0) + this._config.entities.length; } public setConfig(config: Config) { @@ -77,15 +77,15 @@ class HuiEntitiesCard extends hassLocalizeLitMixin(LitElement) } } - this.config = config; - this.configEntities = entities; + this._config = config; + this._configEntities = entities; } protected render() { - if (!this.config || !this._hass) { + if (!this._config || !this._hass) { return html``; } - const { show_header_toggle, title } = this.config; + const { show_header_toggle, title } = this._config; return html` ${this.renderStyle()} @@ -102,7 +102,7 @@ class HuiEntitiesCard extends hassLocalizeLitMixin(LitElement) : html` conf.entity )}" > @@ -111,7 +111,7 @@ class HuiEntitiesCard extends hassLocalizeLitMixin(LitElement)
` }
- ${this.configEntities!.map((entityConf) => + ${this._configEntities!.map((entityConf) => this.renderEntity(entityConf) )}
@@ -156,7 +156,9 @@ class HuiEntitiesCard extends hassLocalizeLitMixin(LitElement) private renderEntity(entityConf) { const element = createRowElement(entityConf); - element.hass = this._hass; + if (this._hass) { + element.hass = this._hass; + } if ( entityConf.entity && !DOMAINS_HIDE_MORE_INFO.includes(computeDomain(entityConf.entity)) diff --git a/src/panels/lovelace/cards/hui-horizontal-stack-card.ts b/src/panels/lovelace/cards/hui-horizontal-stack-card.ts index bd93a6c9e8..ba9d1dff0f 100644 --- a/src/panels/lovelace/cards/hui-horizontal-stack-card.ts +++ b/src/panels/lovelace/cards/hui-horizontal-stack-card.ts @@ -3,16 +3,9 @@ import { TemplateResult } from "lit-html"; import computeCardSize from "../common/compute-card-size.js"; -import { LovelaceCard, LovelaceConfig } from "../types"; -import HuiStackCard from "./hui-stack-card"; - -interface Config extends LovelaceConfig { - cards: LovelaceConfig[]; -} - -class HuiHorizontalStackCard extends HuiStackCard implements LovelaceCard { - protected config?: Config; +import { HuiStackCard } from "./hui-stack-card"; +class HuiHorizontalStackCard extends HuiStackCard { public getCardSize(): number { let totalSize = 0; diff --git a/src/panels/lovelace/cards/hui-stack-card.ts b/src/panels/lovelace/cards/hui-stack-card.ts index 0e8a0472b7..7c2e69651a 100644 --- a/src/panels/lovelace/cards/hui-stack-card.ts +++ b/src/panels/lovelace/cards/hui-stack-card.ts @@ -10,15 +10,14 @@ interface Config extends LovelaceConfig { cards: LovelaceConfig[]; } -export default abstract class HuiStackCard extends LitElement - implements LovelaceCard { - protected config?: Config; +export abstract class HuiStackCard extends LitElement implements LovelaceCard { protected _cards?: LovelaceCard[]; + private _config?: Config; private _hass?: HomeAssistant; static get properties() { return { - config: {}, + _config: {}, }; } @@ -40,16 +39,18 @@ export default abstract class HuiStackCard extends LitElement if (!config || !config.cards || !Array.isArray(config.cards)) { throw new Error("Card config incorrect"); } - this.config = config; + this._config = config; this._cards = config.cards.map((card) => { const element = createCardElement(card) as LovelaceCard; - element.hass = this._hass; + if (this._hass) { + element.hass = this._hass; + } return element; }); } protected render(): TemplateResult { - if (!this.config) { + if (!this._config) { return html``; } diff --git a/src/panels/lovelace/cards/hui-vertical-stack-card.ts b/src/panels/lovelace/cards/hui-vertical-stack-card.ts index 502655c827..863641cf1d 100644 --- a/src/panels/lovelace/cards/hui-vertical-stack-card.ts +++ b/src/panels/lovelace/cards/hui-vertical-stack-card.ts @@ -1,38 +1,11 @@ -import { html, LitElement } from "@polymer/lit-element"; +import { html } from "@polymer/lit-element"; import computeCardSize from "../common/compute-card-size.js"; -import createCardElement from "../common/create-card-element.js"; -import { LovelaceCard, LovelaceConfig } from "../types"; -import { HomeAssistant } from "../../../types"; - -interface Config extends LovelaceConfig { - cards: LovelaceConfig[]; -} - -class HuiVerticalStackCard extends LitElement implements LovelaceCard { - protected config?: Config; - private _cards?: LovelaceCard[]; - private _hass?: HomeAssistant; - - static get properties() { - return { - config: {}, - }; - } - - set hass(hass: HomeAssistant) { - this._hass = hass; - - if (!this._cards) { - return; - } - - for (const element of this._cards) { - element.hass = this._hass; - } - } +import { HuiStackCard } from "./hui-stack-card"; +import { TemplateResult } from "lit-html"; +class HuiVerticalStackCard extends HuiStackCard { public getCardSize() { let totalSize = 0; @@ -47,32 +20,7 @@ class HuiVerticalStackCard extends LitElement implements LovelaceCard { return totalSize; } - public setConfig(config: Config) { - if (!config || !config.cards || !Array.isArray(config.cards)) { - throw new Error("Card config incorrect"); - } - this.config = config; - this._cards = config.cards.map((card) => { - const element = createCardElement(card) as LovelaceCard; - element.hass = this._hass; - return element; - }); - } - - protected render() { - if (!this.config) { - return html``; - } - - return html` - ${this.renderStyle()} -
- ${this._cards!} -
- `; - } - - private renderStyle() { + protected renderStyle(): TemplateResult { return html`