From 3497cb892e05c2981366e93270ed4b154098c687 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Thu, 22 Nov 2018 05:48:12 -0600 Subject: [PATCH] Convert toggle functions to TypeScript (#2082) * Convert toggle functions to TypeScript * Update hui-picture-glance-card.ts * Update hui-picture-glance-card.ts --- .../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 +- .../lovelace/cards/hui-picture-glance-card.ts | 4 ++-- .../lovelace/common/entity/toggle-entity.js | 7 ------- .../lovelace/common/entity/toggle-entity.ts | 10 ++++++++++ ...on-off-entities.js => turn-on-off-entities.ts} | 15 +++++++++++---- ...urn-on-off-entity.js => turn-on-off-entity.ts} | 11 ++++++++--- src/panels/lovelace/common/handle-click.ts | 4 ++-- 9 files changed, 38 insertions(+), 23 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} (65%) diff --git a/src/panels/lovelace/cards/hui-entity-button-card.ts b/src/panels/lovelace/cards/hui-entity-button-card.ts index 0f6d0f5c99..de0d81a2e4 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 3a09b856ed..d3c40ee8ca 100644 --- a/src/panels/lovelace/cards/hui-glance-card.ts +++ b/src/panels/lovelace/cards/hui-glance-card.ts @@ -13,12 +13,12 @@ import { HomeAssistant } from "../../../types"; import { LovelaceCard, LovelaceConfig, LovelaceCardEditor } from "../types"; import { longPress } from "../common/directives/long-press-directive"; import { EntityConfig } from "../entity-rows/types"; +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"; @@ -245,7 +245,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 b16e9dab3e..03d6fa488c 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/cards/hui-picture-glance-card.ts b/src/panels/lovelace/cards/hui-picture-glance-card.ts index e12e1c22e6..593567bf88 100644 --- a/src/panels/lovelace/cards/hui-picture-glance-card.ts +++ b/src/panels/lovelace/cards/hui-picture-glance-card.ts @@ -9,13 +9,13 @@ import { LovelaceCard, LovelaceConfig } from "../types"; import { EntityConfig } from "../entity-rows/types"; import { navigate } from "../../../common/navigate"; import { HomeAssistant } from "../../../types"; +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 computeDomain from "../../../common/entity/compute_domain"; import stateIcon from "../../../common/entity/state_icon"; -import toggleEntity from "../common/entity/toggle-entity"; import "../../../components/ha-card"; import "../../../components/ha-icon"; @@ -172,7 +172,7 @@ class HuiPictureGlanceCard extends hassLocalizeLitMixin(LitElement) } private _callService(ev: MouseEvent): void { - toggleEntity(this.hass, (ev.target as any).entity); + toggleEntity(this.hass!, (ev.target as any).entity); } private _handleImageClick(): void { 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 91deadcd7b..0000000000 --- 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 0000000000..873821127c --- /dev/null +++ b/src/panels/lovelace/common/entity/toggle-entity.ts @@ -0,0 +1,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 +): Promise => { + const turnOn = STATES_OFF.includes(hass.states[entityId].state); + return 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 7f46f4414b..495413e9d9 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 { STATES_OFF } from "../../../../common/const"; +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 65% 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 6a19f0ad74..8823438bf3 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 +): Promise => { const stateDomain = computeDomain(entityId); const serviceDomain = stateDomain === "group" ? "homeassistant" : stateDomain; @@ -16,5 +21,5 @@ export default function turnOnOffEntity(hass, entityId, turnOn = true) { service = turnOn ? "turn_on" : "turn_off"; } - hass.callService(serviceDomain, service, { entity_id: entityId }); -} + return 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 c7d1321228..f420a0f39a 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) {