diff --git a/src/home-assistant.html b/src/home-assistant.html index 133e80de47..e93b60db8c 100644 --- a/src/home-assistant.html +++ b/src/home-assistant.html @@ -72,10 +72,6 @@ class HomeAssistant extends Polymer.Element { type: Object, value: null, }, - language: { - type: Object, - value: null, - }, showMain: { type: Boolean, computed: 'computeShowMain(hass)', @@ -96,12 +92,13 @@ class HomeAssistant extends Polymer.Element { computeShowLoading(connectionPromise, hass) { // Show loading when connecting or when connected but not all pieces loaded yet - return (connectionPromise != null || (hass && (!hass.states || !hass.config))); + return (connectionPromise != null + || (hass && hass.connection && (!hass.states || !hass.config))); } loadResources() { window.getTranslation().then((result) => { - this._updateLanguage({ + this._updateHass({ language: result.language, resources: result.resources, }); @@ -114,7 +111,17 @@ class HomeAssistant extends Polymer.Element { this.unsubConnection = null; } if (!conn) { - this.hass = null; + this._updateHass({ + connection: null, + connected: false, + states: null, + config: null, + themes: null, + dockedSidebar: false, + moreInfoEntityId: null, + callService: null, + callApi: null, + }); return; } var notifications = this.$.notifications; @@ -158,7 +165,7 @@ class HomeAssistant extends Polymer.Element { var auth = conn.options.authToken ? conn.options : {}; return window.hassCallApi(host, auth, method, path, parameters); }, - }, this.language, this.$.storage.getStoredState()); + }, this.$.storage.getStoredState()); var reconnected = () => { this._updateHass({ connected: true }); @@ -256,7 +263,7 @@ class HomeAssistant extends Polymer.Element { } selectLanguage(event) { - this._updateLanguage({ selectedLanguage: event.detail.language }); + this._updateHass({ selectedLanguage: event.detail.language }); this.$.storage.storeState(); this.loadResources(); } @@ -264,11 +271,6 @@ class HomeAssistant extends Polymer.Element { _updateHass(obj) { this.hass = Object.assign({}, this.hass, obj); } - - _updateLanguage(obj) { - this.language = Object.assign({}, this.language, obj); - if (this.hass) this._updateHass(obj); - } } customElements.define(HomeAssistant.is, HomeAssistant); diff --git a/src/layouts/partial-cards.html b/src/layouts/partial-cards.html index 1b38e6f1cf..95e603fb75 100644 --- a/src/layouts/partial-cards.html +++ b/src/layouts/partial-cards.html @@ -221,7 +221,7 @@ disconnectedCallback() { super.disconnectedCallback(); - this.mqls.forEach(function (mql) { + this.mqls.forEach((mql) => { mql.removeListener(this.handleWindowChange); }); } diff --git a/src/managers/notification-manager.html b/src/managers/notification-manager.html index 01852ff0bf..03799326ab 100644 --- a/src/managers/notification-manager.html +++ b/src/managers/notification-manager.html @@ -19,7 +19,7 @@ id='connToast' duration='0' text='Connection lost. Reconnecting…' - opened='[[!isStreaming]]' + opened='[[connectionLost]]' > @@ -32,11 +32,17 @@ class NotificationManager extends Polymer.Element { return { hass: { type: Object, + observer: 'hassChanged', }, - isStreaming: { + wasConnected: { type: Boolean, - computed: 'computeIsStreaming(hass)', + value: false, + }, + + connectionLost: { + type: Boolean, + computed: 'computeConnectionLost(wasConnected, hass)', }, _cancelOnOutsideClick: { @@ -56,8 +62,19 @@ class NotificationManager extends Polymer.Element { }; } - computeIsStreaming(hass) { - return !hass || hass.connected; + hassChanged(hass) { + if (hass && hass.connected) { + // Once the connetion is established, set wasConnected to true + this.wasConnected = true; + } + if (!hass || !hass.connection) { + // If the users logs out, reset wasConnected + this.wasConnected = false; + } + } + + computeConnectionLost(wasConnected, hass) { + return wasConnected && hass && !hass.connected; } constructor() {