From 4f8e2d568755fdb7c4eb61ca13533665202dbd23 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 28 May 2016 01:32:39 -0700 Subject: [PATCH 1/6] Remove HA instance singleton --- src/cards/ha-badges-card.html | 2 +- src/cards/ha-badges-card.js | 4 ++ src/cards/ha-camera-card.js | 9 +-- src/cards/ha-entities-card.html | 9 ++- src/cards/ha-entities-card.js | 11 ++-- src/cards/ha-media_player-card.js | 11 ++-- src/components/entity-list.js | 12 ++-- src/components/entity/ha-entity-marker.html | 2 +- src/components/entity/ha-entity-marker.js | 16 +++-- src/components/entity/ha-entity-toggle.js | 9 +-- src/components/entity/ha-state-label-badge.js | 11 ++-- src/components/events-list.js | 12 ++-- src/components/ha-cards.html | 4 +- src/components/ha-cards.js | 14 +++-- src/components/ha-sidebar.html | 2 +- src/components/ha-sidebar.js | 23 +++---- src/components/ha-view-tabs.js | 24 +++---- src/components/logbook-entry.js | 12 ++-- src/components/relative-ha-datetime.js | 5 +- src/components/services-list.js | 10 +-- src/components/stream-status.js | 16 ++--- src/dialogs/ha-voice-command-dialog.js | 21 +++---- src/dialogs/more-info-dialog.html | 17 +++-- src/dialogs/more-info-dialog.js | 26 +++----- src/home-assistant.html | 6 +- src/home-assistant.js | 54 +++++++--------- src/layouts/home-assistant-main.html | 26 ++++---- src/layouts/home-assistant-main.js | 47 +++++++------- src/layouts/login-form.js | 16 ++--- src/layouts/partial-cards.html | 4 +- src/layouts/partial-cards.js | 44 ++++++------- src/layouts/partial-dev-call-service.js | 22 +++---- src/layouts/partial-dev-fire-event.js | 10 +-- src/layouts/partial-dev-info.js | 15 ++--- src/layouts/partial-dev-set-state.js | 12 ++-- src/layouts/partial-dev-template.js | 12 ++-- src/layouts/partial-history.js | 25 ++++---- src/layouts/partial-logbook.js | 24 +++---- src/layouts/partial-map.html | 3 +- src/layouts/partial-map.js | 23 +++---- src/managers/notification-manager.js | 10 +-- .../more-info-alarm_control_panel.js | 10 +-- src/more-infos/more-info-configurator.js | 14 +---- src/more-infos/more-info-content.js | 7 ++- src/more-infos/more-info-group.html | 2 +- src/more-infos/more-info-group.js | 17 +++-- src/more-infos/more-info-hvac.js | 9 +-- src/more-infos/more-info-light.js | 21 ++++--- src/more-infos/more-info-lock.js | 10 +-- src/more-infos/more-info-media_player.js | 9 +-- src/more-infos/more-info-sun.js | 7 +-- src/more-infos/more-info-thermostat.js | 11 ++-- src/state-summary/state-card-content.js | 11 +++- src/state-summary/state-card-input_select.js | 9 +-- src/state-summary/state-card-input_slider.js | 9 +-- src/state-summary/state-card-rollershutter.js | 20 +++--- src/state-summary/state-card-scene.js | 9 +-- src/state-summary/state-card-script.html | 2 +- src/state-summary/state-card-script.js | 5 +- src/state-summary/state-card-toggle.html | 2 +- src/util/bound-nuclear-behavior.js | 4 +- src/util/can-toggle.js | 11 +--- src/util/home-assistant-js-instance.js | 3 - src/util/nuclear-behavior.js | 63 +++++++++++-------- src/util/state-card-type.js | 4 +- src/util/state-icon.js | 6 +- src/util/validate-auth.js | 10 +-- 67 files changed, 444 insertions(+), 476 deletions(-) delete mode 100644 src/util/home-assistant-js-instance.js diff --git a/src/cards/ha-badges-card.html b/src/cards/ha-badges-card.html index 2d55578198..7bea8c26c3 100644 --- a/src/cards/ha-badges-card.html +++ b/src/cards/ha-badges-card.html @@ -7,7 +7,7 @@ diff --git a/src/cards/ha-badges-card.js b/src/cards/ha-badges-card.js index 988d2aa5f1..be1078458f 100644 --- a/src/cards/ha-badges-card.js +++ b/src/cards/ha-badges-card.js @@ -6,6 +6,10 @@ export default new Polymer({ is: 'ha-badges-card', properties: { + hass: { + type: Object, + }, + states: { type: Array, }, diff --git a/src/cards/ha-camera-card.js b/src/cards/ha-camera-card.js index c69c1897e6..1b6307d964 100644 --- a/src/cards/ha-camera-card.js +++ b/src/cards/ha-camera-card.js @@ -1,7 +1,4 @@ import Polymer from '../polymer'; -import hass from '../util/home-assistant-js-instance'; - -const { moreInfoActions } = hass; const UPDATE_INTERVAL = 10000; // ms @@ -9,6 +6,10 @@ export default new Polymer({ is: 'ha-camera-card', properties: { + hass: { + type: Object, + }, + stateObj: { type: Object, observer: 'updateCameraFeedSrc', @@ -47,7 +48,7 @@ export default new Polymer({ }, cardTapped() { - this.async(() => moreInfoActions.selectEntity(this.stateObj.entityId), 1); + this.async(() => this.hass.moreInfoActions.selectEntity(this.stateObj.entityId), 1); }, updateCameraFeedSrc(stateObj) { diff --git a/src/cards/ha-entities-card.html b/src/cards/ha-entities-card.html index 7db7f1d806..bff8f70eda 100644 --- a/src/cards/ha-entities-card.html +++ b/src/cards/ha-entities-card.html @@ -38,13 +38,18 @@
[[computeTitle(states, groupEntity)]]
diff --git a/src/cards/ha-entities-card.js b/src/cards/ha-entities-card.js index abc53f88d5..bced27b17e 100644 --- a/src/cards/ha-entities-card.js +++ b/src/cards/ha-entities-card.js @@ -1,17 +1,18 @@ import Polymer from '../polymer'; -import hass from '../util/home-assistant-js-instance'; import canToggle from '../util/can-toggle'; require('../components/ha-card'); require('../components/entity/ha-entity-toggle'); require('../state-summary/state-card-content'); -const { moreInfoActions } = hass; - export default new Polymer({ is: 'ha-entities-card', properties: { + hass: { + type: Object, + }, + states: { type: Array, }, @@ -45,7 +46,7 @@ export default new Polymer({ } else { entityId = this.groupEntity.entityId; } - this.async(() => moreInfoActions.selectEntity(entityId), 1); + this.async(() => this.hass.moreInfoActions.selectEntity(entityId), 1); }, showGroupToggle(groupEntity, states) { @@ -54,6 +55,6 @@ export default new Polymer({ } // only show if we can toggle 2+ entities in group - return states.reduce((sum, state) => sum + canToggle(state.entityId), 0) > 1; + return states.reduce((sum, state) => sum + canToggle(this.hass, state.entityId), 0) > 1; }, }); diff --git a/src/cards/ha-media_player-card.js b/src/cards/ha-media_player-card.js index 32a23a57f4..277fe6917e 100644 --- a/src/cards/ha-media_player-card.js +++ b/src/cards/ha-media_player-card.js @@ -1,14 +1,15 @@ import classnames from 'classnames'; import Polymer from '../polymer'; -import hass from '../util/home-assistant-js-instance'; - -const { moreInfoActions } = hass; export default new Polymer({ is: 'ha-media_player-card', properties: { + hass: { + type: Object, + }, + stateObj: { type: Object, }, @@ -54,7 +55,7 @@ export default new Polymer({ }, computePlayerObj(stateObj) { - return stateObj.domainModel(hass); + return stateObj.domainModel(this.hass); }, computePlaybackControlIcon(playerObj) { @@ -77,7 +78,7 @@ export default new Polymer({ handleOpenMoreInfo(ev) { ev.stopPropagation(); - this.async(() => moreInfoActions.selectEntity(this.stateObj.entityId), 1); + this.async(() => this.hass.moreInfoActions.selectEntity(this.stateObj.entityId), 1); }, handlePlaybackControl(ev) { diff --git a/src/components/entity-list.js b/src/components/entity-list.js index 671d00620c..66d5d3c977 100644 --- a/src/components/entity-list.js +++ b/src/components/entity-list.js @@ -1,20 +1,20 @@ -import hass from '../util/home-assistant-js-instance'; - import Polymer from '../polymer'; import nuclearObserver from '../util/bound-nuclear-behavior'; -const { entityGetters } = hass; - export default new Polymer({ is: 'entity-list', behaviors: [nuclearObserver], properties: { + hass: { + type: Object, + }, + entities: { type: Array, - bindNuclear: [ - entityGetters.entityMap, + bindNuclear: hass => [ + hass.entityGetters.entityMap, (map) => map.valueSeq().sortBy((entity) => entity.entityId).toArray(), ], }, diff --git a/src/components/entity/ha-entity-marker.html b/src/components/entity/ha-entity-marker.html index e9aa079e5c..ab36c656ee 100644 --- a/src/components/entity/ha-entity-marker.html +++ b/src/components/entity/ha-entity-marker.html @@ -31,7 +31,7 @@ diff --git a/src/components/entity/ha-entity-marker.js b/src/components/entity/ha-entity-marker.js index 49b9045bb8..eac0d64ac4 100644 --- a/src/components/entity/ha-entity-marker.js +++ b/src/components/entity/ha-entity-marker.js @@ -1,21 +1,19 @@ import Polymer from '../../polymer'; -import hass from '../../util/home-assistant-js-instance'; require('../../components/ha-label-badge'); -const { - reactor, - entityGetters, - moreInfoActions, -} = hass; - export default new Polymer({ is: 'ha-entity-marker', properties: { + hass: { + type: Object, + }, + entityId: { type: String, value: '', + reflectToAttribute: true, }, state: { @@ -46,12 +44,12 @@ export default new Polymer({ badgeTap(ev) { ev.stopPropagation(); if (this.entityId) { - this.async(() => moreInfoActions.selectEntity(this.entityId), 1); + this.async(() => window.hass.moreInfoActions.selectEntity(this.entityId), 1); } }, computeState(entityId) { - return entityId && reactor.evaluate(entityGetters.byId(entityId)); + return entityId && window.hass.reactor.evaluate(window.hass.entityGetters.byId(entityId)); }, computeIcon(state) { diff --git a/src/components/entity/ha-entity-toggle.js b/src/components/entity/ha-entity-toggle.js index 2ced510434..c321a41084 100644 --- a/src/components/entity/ha-entity-toggle.js +++ b/src/components/entity/ha-entity-toggle.js @@ -1,14 +1,15 @@ import Polymer from '../../polymer'; -import hass from '../../util/home-assistant-js-instance'; import OFF_STATES from '../../util/off-states'; -const { serviceActions } = hass; - export default new Polymer({ is: 'ha-entity-toggle', properties: { + hass: { + type: Object, + }, + stateObj: { type: Object, }, @@ -89,7 +90,7 @@ export default new Polymer({ service = turnOn ? 'turn_on' : 'turn_off'; } - const call = serviceActions.callService( + const call = this.hass.serviceActions.callService( domain, service, { entity_id: this.stateObj.entityId }); if (!this.stateObj.attributes.assumed_state) { diff --git a/src/components/entity/ha-state-label-badge.js b/src/components/entity/ha-state-label-badge.js index 5c7f4eedbd..dcef86685f 100644 --- a/src/components/entity/ha-state-label-badge.js +++ b/src/components/entity/ha-state-label-badge.js @@ -1,18 +1,17 @@ import Polymer from '../../polymer'; -import hass from '../../util/home-assistant-js-instance'; import domainIcon from '../../util/domain-icon'; import stateIcon from '../../util/state-icon'; require('../../components/ha-label-badge'); -const { - moreInfoActions, -} = hass; - export default new Polymer({ is: 'ha-state-label-badge', properties: { + hass: { + type: Object, + }, + state: { type: Object, observer: 'stateChanged', @@ -25,7 +24,7 @@ export default new Polymer({ badgeTap(ev) { ev.stopPropagation(); - this.async(() => moreInfoActions.selectEntity(this.state.entityId), 1); + this.async(() => this.hass.moreInfoActions.selectEntity(this.state.entityId), 1); }, computeClasses(state) { diff --git a/src/components/events-list.js b/src/components/events-list.js index 3b0e933b70..0be6e4f76c 100644 --- a/src/components/events-list.js +++ b/src/components/events-list.js @@ -1,20 +1,20 @@ -import hass from '../util/home-assistant-js-instance'; - import Polymer from '../polymer'; import nuclearObserver from '../util/bound-nuclear-behavior'; -const { eventGetters } = hass; - export default new Polymer({ is: 'events-list', behaviors: [nuclearObserver], properties: { + hass: { + type: Object, + }, + events: { type: Array, - bindNuclear: [ - eventGetters.entityMap, + bindNuclear: hass => [ + hass.eventGetters.entityMap, (map) => map.valueSeq().sortBy((event) => event.event).toArray(), ], }, diff --git a/src/components/ha-cards.html b/src/components/ha-cards.html index 717161e063..6991a38ae9 100644 --- a/src/components/ha-cards.html +++ b/src/components/ha-cards.html @@ -58,7 +58,7 @@ - +