From 62a68890d32cdb37101a4b157cc7f313526a0b7d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 20 Sep 2018 10:18:39 +0200 Subject: [PATCH] Show sub info (#1685) * Show sub info * Fix observer --- .../config/cloud/ha-config-cloud-account.js | 79 +++++++++++++------ .../config/cloud/ha-config-cloud-login.js | 4 +- src/panels/config/cloud/ha-config-cloud.js | 35 ++++++-- .../config/dashboard/ha-config-dashboard.js | 8 +- src/panels/config/ha-panel-config.js | 23 ++++-- 5 files changed, 101 insertions(+), 48 deletions(-) diff --git a/src/panels/config/cloud/ha-config-cloud-account.js b/src/panels/config/cloud/ha-config-cloud-account.js index edd51fc1c7..1d98c5a478 100644 --- a/src/panels/config/cloud/ha-config-cloud-account.js +++ b/src/panels/config/cloud/ha-config-cloud-account.js @@ -75,10 +75,9 @@ class HaConfigCloudAccount extends EventsMixin(PolymerElement) { @@ -87,7 +86,7 @@ class HaConfigCloudAccount extends EventsMixin(PolymerElement) { Cloud connection status -
[[account.cloud]]
+
[[cloudStatus.cloud]]
@@ -156,36 +155,64 @@ class HaConfigCloudAccount extends EventsMixin(PolymerElement) { return { hass: Object, isWide: Boolean, - account: { + cloudStatus: Object, + _subscription: { type: Object, - observer: '_accountChanged', - }, + value: null, + } }; } + ready() { + super.ready(); + this._fetchSubscriptionInfo(); + } + + async _fetchSubscriptionInfo() { + this._subscription = await this.hass.callWS({ type: 'cloud/subscription' }); + } + handleLogout() { - this.hass.callApi('post', 'cloud/logout').then(() => this.fire('ha-account-refreshed', { account: null })); + this.hass.callApi('post', 'cloud/logout') + .then(() => this.fire('ha-refresh-cloud-status')); } - _formatExpiration(date) { - return formatDateTime(new Date(date)); - } - - _accountChanged(newAccount) { - if (!newAccount || newAccount.cloud !== 'connecting') { - if (this._accountUpdater) { - clearTimeout(this._accountUpdater); - this._accountUpdater = null; - } - return; - } if (this._accountUpdater) { - return; + _formatSubscription(subInfo) { + if (subInfo === null) { + return 'Fetching subscription…'; } - setTimeout(() => { - this._accountUpdater = null; - this.hass.callApi('get', 'cloud/account') - .then(account => this.fire('ha-account-refreshed', { account })); - }, 5000); + /* eslint-disable camelcase */ + const { subscription, source, customer_exists } = subInfo; + + // Check if we're before Oct 17. + const beforeOct17 = Date.now() < 1539734400000; + + if (!customer_exists) { + return `Legacy user. Subscription expire${beforeOct17 ? 's' : 'd'} Oct 17, 2018.`; + } + if (!subscription || subscription.status === 'canceled') { + return 'No subscription'; + } + + const periodExpires = formatDateTime(new Date(subscription.current_period_end * 1000)); + + if (subscription.status === 'trialing' && !source) { + return `Trial user. Trial expires ${periodExpires}.`; + } + + if (subscription.status === 'trialing') { + return `Active user. You will be charged on ${periodExpires}.`; + } + + if (subscription.status === 'active' && subscription.cancel_at_period_end) { + return `Active user. Scheduled to cancel on ${periodExpires}`; + } + + if (subscription.status === 'active') { + return `Active user. You will be charged on ${periodExpires}.`; + } + + return 'Unable to determine subscription status.'; } } diff --git a/src/panels/config/cloud/ha-config-cloud-login.js b/src/panels/config/cloud/ha-config-cloud-login.js index fd8775312c..f49f6795f3 100644 --- a/src/panels/config/cloud/ha-config-cloud-login.js +++ b/src/panels/config/cloud/ha-config-cloud-login.js @@ -199,8 +199,8 @@ class HaConfigCloudLogin extends this.hass.callApi('post', 'cloud/login', { email: this.email, password: this._password, - }).then((account) => { - this.fire('ha-account-refreshed', { account: account }); + }).then(() => { + this.fire('ha-refresh-cloud-status'); this.setProperties({ email: '', _password: '', diff --git a/src/panels/config/cloud/ha-config-cloud.js b/src/panels/config/cloud/ha-config-cloud.js index c17435e9e0..a7e4bcc6b4 100644 --- a/src/panels/config/cloud/ha-config-cloud.js +++ b/src/panels/config/cloud/ha-config-cloud.js @@ -30,19 +30,38 @@ class HaConfigCloud extends NavigateMixin(PolymerElement) { `; } @@ -55,7 +74,7 @@ class HaConfigCloud extends NavigateMixin(PolymerElement) { type: Boolean, value: false }, - account: { + cloudStatus: { type: Object, }, _flashMessage: { @@ -73,7 +92,7 @@ class HaConfigCloud extends NavigateMixin(PolymerElement) { static get observers() { return [ - '_checkRoute(route, account)' + '_checkRoute(route, cloudStatus)' ]; } @@ -92,9 +111,9 @@ class HaConfigCloud extends NavigateMixin(PolymerElement) { this._debouncer, timeOut.after(0), () => { - if (!this.account && !NOT_LOGGED_IN_URLS.includes(route.path)) { + if (!this.cloudStatus.logged_in && !NOT_LOGGED_IN_URLS.includes(route.path)) { this.navigate('/config/cloud/login', true); - } else if (this.account && !LOGGED_IN_URLS.includes(route.path)) { + } else if (this.cloudStatus.logged_in && !LOGGED_IN_URLS.includes(route.path)) { this.navigate('/config/cloud/account', true); } } diff --git a/src/panels/config/dashboard/ha-config-dashboard.js b/src/panels/config/dashboard/ha-config-dashboard.js index d62c303277..a78d718437 100644 --- a/src/panels/config/dashboard/ha-config-dashboard.js +++ b/src/panels/config/dashboard/ha-config-dashboard.js @@ -55,10 +55,10 @@ class HaConfigDashboard extends NavigateMixin(LocalizeMixin(PolymerElement)) { Home Assistant Cloud -