From c718047ac0550eb606c5daf069f842b5084d05df Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Wed, 14 Nov 2018 19:11:27 -0600 Subject: [PATCH 1/3] Conert toggle functions to TypeScript --- src/panels/lovelace/cards/hui-entity-button-card.ts | 4 ++-- src/panels/lovelace/cards/hui-glance-card.ts | 4 ++-- .../lovelace/cards/hui-picture-entity-card.js | 2 +- src/panels/lovelace/common/entity/toggle-entity.js | 7 ------- src/panels/lovelace/common/entity/toggle-entity.ts | 8 ++++++++ ...n-on-off-entities.js => turn-on-off-entities.ts} | 13 ++++++++++--- ...{turn-on-off-entity.js => turn-on-off-entity.ts} | 9 +++++++-- src/panels/lovelace/common/handle-click.ts | 4 ++-- 8 files changed, 32 insertions(+), 19 deletions(-) delete mode 100644 src/panels/lovelace/common/entity/toggle-entity.js create mode 100644 src/panels/lovelace/common/entity/toggle-entity.ts rename src/panels/lovelace/common/entity/{turn-on-off-entities.js => turn-on-off-entities.ts} (78%) rename src/panels/lovelace/common/entity/{turn-on-off-entity.js => turn-on-off-entity.ts} (77%) diff --git a/src/panels/lovelace/cards/hui-entity-button-card.ts b/src/panels/lovelace/cards/hui-entity-button-card.ts index 0f6d0f5c99fc..de0d81a2e422 100644 --- a/src/panels/lovelace/cards/hui-entity-button-card.ts +++ b/src/panels/lovelace/cards/hui-entity-button-card.ts @@ -10,12 +10,12 @@ import { styleMap } from "lit-html/directives/styleMap"; import "../../../components/ha-card"; -import toggleEntity from "../common/entity/toggle-entity"; import isValidEntityId from "../../../common/entity/valid_entity_id"; import stateIcon from "../../../common/entity/state_icon"; import computeStateDomain from "../../../common/entity/compute_state_domain"; import computeStateName from "../../../common/entity/compute_state_name"; import applyThemesOnElement from "../../../common/dom/apply_themes_on_element"; +import { toggleEntity } from "../common/entity/toggle-entity"; import { HomeAssistant, LightEntity } from "../../../types"; import { hassLocalizeLitMixin } from "../../../mixins/lit-localize-mixin"; import { LovelaceCard, LovelaceConfig } from "../types"; @@ -199,7 +199,7 @@ class HuiEntityButtonCard extends hassLocalizeLitMixin(LitElement) const action = hold ? config.hold_action : config.tap_action || "more-info"; switch (action) { case "toggle": - toggleEntity(this.hass, entityId); + toggleEntity(this.hass!, entityId); break; case "call-service": if (!config.service) { diff --git a/src/panels/lovelace/cards/hui-glance-card.ts b/src/panels/lovelace/cards/hui-glance-card.ts index fc5365b91b7c..a7ba6bf973c0 100644 --- a/src/panels/lovelace/cards/hui-glance-card.ts +++ b/src/panels/lovelace/cards/hui-glance-card.ts @@ -12,12 +12,12 @@ import { hassLocalizeLitMixin } from "../../../mixins/lit-localize-mixin"; import { HomeAssistant } from "../../../types"; import { LovelaceCard, LovelaceConfig, LovelaceCardEditor } from "../types"; import { longPress } from "../common/directives/long-press-directive"; +import { toggleEntity } from "../common/entity/toggle-entity"; import computeStateDisplay from "../../../common/entity/compute_state_display"; import computeStateName from "../../../common/entity/compute_state_name"; import processConfigEntities from "../common/process-config-entities"; import applyThemesOnElement from "../../../common/dom/apply_themes_on_element"; -import toggleEntity from "../common/entity/toggle-entity"; import "../../../components/entity/state-badge"; import "../../../components/ha-card"; @@ -247,7 +247,7 @@ export class HuiGlanceCard extends hassLocalizeLitMixin(LitElement) const action = hold ? config.hold_action : config.tap_action || "more-info"; switch (action) { case "toggle": - toggleEntity(this.hass, entityId); + toggleEntity(this.hass!, entityId); break; case "call-service": const [domain, service] = config.service!.split(".", 2); diff --git a/src/panels/lovelace/cards/hui-picture-entity-card.js b/src/panels/lovelace/cards/hui-picture-entity-card.js index b16e9dab3ec9..03d6fa488cac 100644 --- a/src/panels/lovelace/cards/hui-picture-entity-card.js +++ b/src/panels/lovelace/cards/hui-picture-entity-card.js @@ -7,10 +7,10 @@ import "../components/hui-image"; import computeDomain from "../../../common/entity/compute_domain"; import computeStateDisplay from "../../../common/entity/compute_state_display"; import computeStateName from "../../../common/entity/compute_state_name"; -import toggleEntity from "../common/entity/toggle-entity"; import EventsMixin from "../../../mixins/events-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin"; +import { toggleEntity } from "../common/entity/toggle-entity"; import { longPressBind } from "../common/directives/long-press-directive"; const UNAVAILABLE = "Unavailable"; diff --git a/src/panels/lovelace/common/entity/toggle-entity.js b/src/panels/lovelace/common/entity/toggle-entity.js deleted file mode 100644 index 91deadcd7b5f..000000000000 --- a/src/panels/lovelace/common/entity/toggle-entity.js +++ /dev/null @@ -1,7 +0,0 @@ -import { STATES_OFF } from "../../../../common/const"; -import turnOnOffEntity from "./turn-on-off-entity"; - -export default function toggleEntity(hass, entityId) { - const turnOn = STATES_OFF.includes(hass.states[entityId].state); - turnOnOffEntity(hass, entityId, turnOn); -} diff --git a/src/panels/lovelace/common/entity/toggle-entity.ts b/src/panels/lovelace/common/entity/toggle-entity.ts new file mode 100644 index 000000000000..9db5990550bd --- /dev/null +++ b/src/panels/lovelace/common/entity/toggle-entity.ts @@ -0,0 +1,8 @@ +import { STATES_OFF } from "../../../../common/const"; +import { turnOnOffEntity } from "./turn-on-off-entity"; +import { HomeAssistant } from "../../../../types"; + +export const toggleEntity = (hass: HomeAssistant, entityId: string): void => { + const turnOn = STATES_OFF.includes(hass.states[entityId].state); + turnOnOffEntity(hass, entityId, turnOn); +}; diff --git a/src/panels/lovelace/common/entity/turn-on-off-entities.js b/src/panels/lovelace/common/entity/turn-on-off-entities.ts similarity index 78% rename from src/panels/lovelace/common/entity/turn-on-off-entities.js rename to src/panels/lovelace/common/entity/turn-on-off-entities.ts index 7f46f4414b51..3780e82cab44 100644 --- a/src/panels/lovelace/common/entity/turn-on-off-entities.js +++ b/src/panels/lovelace/common/entity/turn-on-off-entities.ts @@ -1,7 +1,12 @@ import { STATES_OFF } from "../../../../common/const"; import computeDomain from "../../../../common/entity/compute_domain"; +import { HomeAssistant } from "../../../../types"; -export default function turnOnOffEntities(hass, entityIds, turnOn = true) { +export const turnOnOffEntities = ( + hass: HomeAssistant, + entityIds: string[], + turnOn = true +): void => { const domainsToCall = {}; entityIds.forEach((entityId) => { if (STATES_OFF.includes(hass.states[entityId].state) === turnOn) { @@ -10,7 +15,9 @@ export default function turnOnOffEntities(hass, entityIds, turnOn = true) { ? stateDomain : "homeassistant"; - if (!(serviceDomain in domainsToCall)) domainsToCall[serviceDomain] = []; + if (!(serviceDomain in domainsToCall)) { + domainsToCall[serviceDomain] = []; + } domainsToCall[serviceDomain].push(entityId); } }); @@ -31,4 +38,4 @@ export default function turnOnOffEntities(hass, entityIds, turnOn = true) { const entities = domainsToCall[domain]; hass.callService(domain, service, { entity_id: entities }); }); -} +}; diff --git a/src/panels/lovelace/common/entity/turn-on-off-entity.js b/src/panels/lovelace/common/entity/turn-on-off-entity.ts similarity index 77% rename from src/panels/lovelace/common/entity/turn-on-off-entity.js rename to src/panels/lovelace/common/entity/turn-on-off-entity.ts index 6a19f0ad7467..fdf29b37e770 100644 --- a/src/panels/lovelace/common/entity/turn-on-off-entity.js +++ b/src/panels/lovelace/common/entity/turn-on-off-entity.ts @@ -1,6 +1,11 @@ import computeDomain from "../../../../common/entity/compute_domain"; +import { HomeAssistant } from "../../../../types"; -export default function turnOnOffEntity(hass, entityId, turnOn = true) { +export const turnOnOffEntity = ( + hass: HomeAssistant, + entityId: string, + turnOn = true +): void => { const stateDomain = computeDomain(entityId); const serviceDomain = stateDomain === "group" ? "homeassistant" : stateDomain; @@ -17,4 +22,4 @@ export default function turnOnOffEntity(hass, entityId, turnOn = true) { } hass.callService(serviceDomain, service, { entity_id: entityId }); -} +}; diff --git a/src/panels/lovelace/common/handle-click.ts b/src/panels/lovelace/common/handle-click.ts index c7d132122813..f420a0f39a8c 100644 --- a/src/panels/lovelace/common/handle-click.ts +++ b/src/panels/lovelace/common/handle-click.ts @@ -2,7 +2,7 @@ import { HomeAssistant } from "../../../types"; import { LovelaceElementConfig } from "../elements/types"; import { fireEvent } from "../../../common/dom/fire_event"; import { navigate } from "../../../common/navigate"; -import toggleEntity from "../../../../src/panels/lovelace/common/entity/toggle-entity"; +import { toggleEntity } from "../../../../src/panels/lovelace/common/entity/toggle-entity"; export const handleClick = ( node: HTMLElement, @@ -28,7 +28,7 @@ export const handleClick = ( navigate(node, config.navigation_path ? config.navigation_path : ""); break; case "toggle": - toggleEntity(hass, config.entity); + toggleEntity(hass, config.entity!); break; case "call-service": { if (config.service) { From 2359023a3317bd00a51dd229e803ccbfc9d09a1b Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Tue, 20 Nov 2018 23:01:32 -0600 Subject: [PATCH 2/3] Address review comments --- src/panels/lovelace/common/entity/toggle-entity.ts | 7 +++++-- src/panels/lovelace/common/entity/turn-on-off-entity.ts | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/panels/lovelace/common/entity/toggle-entity.ts b/src/panels/lovelace/common/entity/toggle-entity.ts index 9db5990550bd..8d5bea6923e6 100644 --- a/src/panels/lovelace/common/entity/toggle-entity.ts +++ b/src/panels/lovelace/common/entity/toggle-entity.ts @@ -2,7 +2,10 @@ import { STATES_OFF } from "../../../../common/const"; import { turnOnOffEntity } from "./turn-on-off-entity"; import { HomeAssistant } from "../../../../types"; -export const toggleEntity = (hass: HomeAssistant, entityId: string): void => { +export const toggleEntity = ( + hass: HomeAssistant, + entityId: string +): Promise => { const turnOn = STATES_OFF.includes(hass.states[entityId].state); - turnOnOffEntity(hass, entityId, turnOn); + return turnOnOffEntity(hass, entityId, turnOn); }; diff --git a/src/panels/lovelace/common/entity/turn-on-off-entity.ts b/src/panels/lovelace/common/entity/turn-on-off-entity.ts index fdf29b37e770..8823438bf3a3 100644 --- a/src/panels/lovelace/common/entity/turn-on-off-entity.ts +++ b/src/panels/lovelace/common/entity/turn-on-off-entity.ts @@ -5,7 +5,7 @@ export const turnOnOffEntity = ( hass: HomeAssistant, entityId: string, turnOn = true -): void => { +): Promise => { const stateDomain = computeDomain(entityId); const serviceDomain = stateDomain === "group" ? "homeassistant" : stateDomain; @@ -21,5 +21,5 @@ export const turnOnOffEntity = ( service = turnOn ? "turn_on" : "turn_off"; } - hass.callService(serviceDomain, service, { entity_id: entityId }); + return hass.callService(serviceDomain, service, { entity_id: entityId }); }; From 7a0dd0ef330eebd9713c0f2104fb95d4893bc1c9 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Wed, 21 Nov 2018 07:41:49 -0600 Subject: [PATCH 3/3] Resolve merge conflict --- src/panels/lovelace/cards/hui-glance-card.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/panels/lovelace/cards/hui-glance-card.ts b/src/panels/lovelace/cards/hui-glance-card.ts index a7ba6bf973c0..02ac0b388eb1 100644 --- a/src/panels/lovelace/cards/hui-glance-card.ts +++ b/src/panels/lovelace/cards/hui-glance-card.ts @@ -13,6 +13,7 @@ import { HomeAssistant } from "../../../types"; import { LovelaceCard, LovelaceConfig, LovelaceCardEditor } from "../types"; import { longPress } from "../common/directives/long-press-directive"; import { toggleEntity } from "../common/entity/toggle-entity"; +import { EntityConfig } from "../entity-rows/types"; import computeStateDisplay from "../../../common/entity/compute_state_display"; import computeStateName from "../../../common/entity/compute_state_name";