From 2df3041b4976040058dbb8fd158a521f45c8fe53 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 28 Feb 2022 18:21:55 +0100 Subject: [PATCH] Energy: Wait with subscribe for _config to be set --- src/mixins/subscribe-mixin.ts | 17 ++++++++++++++++- .../hui-energy-carbon-consumed-gauge-card.ts | 2 ++ .../energy/hui-energy-devices-graph-card.ts | 2 ++ .../energy/hui-energy-distribution-card.ts | 2 ++ .../cards/energy/hui-energy-gas-graph-card.ts | 2 ++ .../hui-energy-grid-neutrality-gauge-card.ts | 2 ++ .../hui-energy-solar-consumed-gauge-card.ts | 2 ++ .../cards/energy/hui-energy-solar-graph-card.ts | 2 ++ .../energy/hui-energy-sources-table-card.ts | 2 ++ .../cards/energy/hui-energy-usage-graph-card.ts | 2 ++ 10 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/mixins/subscribe-mixin.ts b/src/mixins/subscribe-mixin.ts index 9895637df3..376bfba90a 100644 --- a/src/mixins/subscribe-mixin.ts +++ b/src/mixins/subscribe-mixin.ts @@ -13,6 +13,8 @@ export const SubscribeMixin = >( class SubscribeClass extends superClass { @property({ attribute: false }) public hass?: HomeAssistant; + protected hassSubscribeNeedsProperties?: string[]; + private __unsubs?: Array>; public connectedCallback() { @@ -39,6 +41,16 @@ export const SubscribeMixin = >( super.updated(changedProps); if (changedProps.has("hass")) { this.__checkSubscribed(); + return; + } + if (!this.hassSubscribeNeedsProperties) { + return; + } + for (const key of changedProps.keys()) { + if (this.hassSubscribeNeedsProperties.includes(key as string)) { + this.__checkSubscribed(); + return; + } } } @@ -52,7 +64,10 @@ export const SubscribeMixin = >( if ( this.__unsubs !== undefined || !(this as unknown as Element).isConnected || - this.hass === undefined + this.hass === undefined || + this.hassSubscribeNeedsProperties?.some( + (prop) => this[prop] === undefined + ) ) { return; } diff --git a/src/panels/lovelace/cards/energy/hui-energy-carbon-consumed-gauge-card.ts b/src/panels/lovelace/cards/energy/hui-energy-carbon-consumed-gauge-card.ts index b172f912de..783b41e653 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-carbon-consumed-gauge-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-carbon-consumed-gauge-card.ts @@ -32,6 +32,8 @@ class HuiEnergyCarbonGaugeCard @state() private _data?: EnergyData; + protected hassSubscribeNeedsProperties = ["_config"]; + public getCardSize(): number { return 4; } diff --git a/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts b/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts index df4cd50974..9042143c22 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-devices-graph-card.ts @@ -49,6 +49,8 @@ export class HuiEnergyDevicesGraphCard @query("ha-chart-base") private _chart?: HaChartBase; + protected hassSubscribeNeedsProperties = ["_config"]; + public hassSubscribe(): UnsubscribeFunc[] { return [ getEnergyDataCollection(this.hass, { diff --git a/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts b/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts index 1f85a6e857..bcde14dfb0 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts @@ -43,6 +43,8 @@ class HuiEnergyDistrubutionCard @state() private _data?: EnergyData; + protected hassSubscribeNeedsProperties = ["_config"]; + public setConfig(config: EnergyDistributionCardConfig): void { this._config = config; } diff --git a/src/panels/lovelace/cards/energy/hui-energy-gas-graph-card.ts b/src/panels/lovelace/cards/energy/hui-energy-gas-graph-card.ts index e1941a7c47..8cc8ef70f0 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-gas-graph-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-gas-graph-card.ts @@ -62,6 +62,8 @@ export class HuiEnergyGasGraphCard @state() private _unit?: string; + protected hassSubscribeNeedsProperties = ["_config"]; + public hassSubscribe(): UnsubscribeFunc[] { return [ getEnergyDataCollection(this.hass, { diff --git a/src/panels/lovelace/cards/energy/hui-energy-grid-neutrality-gauge-card.ts b/src/panels/lovelace/cards/energy/hui-energy-grid-neutrality-gauge-card.ts index cc26d82a0d..d6389ebbe7 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-grid-neutrality-gauge-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-grid-neutrality-gauge-card.ts @@ -35,6 +35,8 @@ class HuiEnergyGridGaugeCard @state() private _data?: EnergyData; + protected hassSubscribeNeedsProperties = ["_config"]; + public hassSubscribe(): UnsubscribeFunc[] { return [ getEnergyDataCollection(this.hass!, { diff --git a/src/panels/lovelace/cards/energy/hui-energy-solar-consumed-gauge-card.ts b/src/panels/lovelace/cards/energy/hui-energy-solar-consumed-gauge-card.ts index 578ae00fd5..84a1a83b65 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-solar-consumed-gauge-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-solar-consumed-gauge-card.ts @@ -30,6 +30,8 @@ class HuiEnergySolarGaugeCard @state() private _data?: EnergyData; + protected hassSubscribeNeedsProperties = ["_config"]; + public hassSubscribe(): UnsubscribeFunc[] { return [ getEnergyDataCollection(this.hass!, { diff --git a/src/panels/lovelace/cards/energy/hui-energy-solar-graph-card.ts b/src/panels/lovelace/cards/energy/hui-energy-solar-graph-card.ts index 157079a24e..83468ecdf6 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-solar-graph-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-solar-graph-card.ts @@ -61,6 +61,8 @@ export class HuiEnergySolarGraphCard @state() private _end = endOfToday(); + protected hassSubscribeNeedsProperties = ["_config"]; + public hassSubscribe(): UnsubscribeFunc[] { return [ getEnergyDataCollection(this.hass, { diff --git a/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts b/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts index 136d4fd81c..974843ce4c 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts @@ -45,6 +45,8 @@ export class HuiEnergySourcesTableCard @state() private _data?: EnergyData; + protected hassSubscribeNeedsProperties = ["_config"]; + public hassSubscribe(): UnsubscribeFunc[] { return [ getEnergyDataCollection(this.hass, { diff --git a/src/panels/lovelace/cards/energy/hui-energy-usage-graph-card.ts b/src/panels/lovelace/cards/energy/hui-energy-usage-graph-card.ts index e75a5776e3..0c0bd48cd7 100644 --- a/src/panels/lovelace/cards/energy/hui-energy-usage-graph-card.ts +++ b/src/panels/lovelace/cards/energy/hui-energy-usage-graph-card.ts @@ -50,6 +50,8 @@ export class HuiEnergyUsageGraphCard @state() private _end = endOfToday(); + protected hassSubscribeNeedsProperties = ["_config"]; + public hassSubscribe(): UnsubscribeFunc[] { return [ getEnergyDataCollection(this.hass, {