From 355f40d740d6266060c92227a48a61051af2ebc0 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Fri, 24 Apr 2020 10:36:38 +0200 Subject: [PATCH] Don't update entity picker items while open (#5588) * Don't update entity picker items while open * Update items in updated, when we open the dropdown --- src/components/entity/ha-entity-picker.ts | 62 +++++++++---------- .../types/ha-automation-action-scene.ts | 2 +- .../types/ha-automation-action-service.ts | 4 +- .../types/ha-automation-condition-zone.ts | 2 +- .../ha-automation-trigger-geo_location.ts | 2 +- .../types/ha-automation-trigger-zone.ts | 2 +- 6 files changed, 38 insertions(+), 36 deletions(-) diff --git a/src/components/entity/ha-entity-picker.ts b/src/components/entity/ha-entity-picker.ts index 393a77fb0c..d5960b3cc0 100644 --- a/src/components/entity/ha-entity-picker.ts +++ b/src/components/entity/ha-entity-picker.ts @@ -12,6 +12,7 @@ import { property, PropertyValues, TemplateResult, + query, } from "lit-element"; import memoizeOne from "memoize-one"; import { fireEvent } from "../../common/dom/fire_event"; @@ -91,12 +92,13 @@ class HaEntityPicker extends LitElement { @property() public entityFilter?: HaEntityPickerEntityFilterFunc; - @property({ type: Boolean }) private _opened?: boolean; + @property({ type: Boolean }) private _opened = false; - @property() private _hass?: HomeAssistant; + @query("vaadin-combo-box-light") private _comboBox!: HTMLElement; private _getStates = memoizeOne( ( + _opened: boolean, hass: this["hass"], includeDomains: this["includeDomains"], excludeDomains: this["excludeDomains"], @@ -147,27 +149,28 @@ class HaEntityPicker extends LitElement { ); protected updated(changedProps: PropertyValues) { - super.updated(changedProps); - - if (changedProps.has("hass") && !this._opened) { - this._hass = this.hass; + if (changedProps.has("_opened") && this._opened) { + const states = this._getStates( + this._opened, + this.hass, + this.includeDomains, + this.excludeDomains, + this.entityFilter, + this.includeDeviceClasses + ); + (this._comboBox as any).items = states; } } protected render(): TemplateResult { - const states = this._getStates( - this._hass, - this.includeDomains, - this.excludeDomains, - this.entityFilter, - this.includeDeviceClasses - ); + if (!this.hass) { + return html``; + } return html` ` : ""} - ${states.length > 0 - ? html` - - Toggle - - ` - : ""} + + + Toggle + `; diff --git a/src/panels/config/automation/action/types/ha-automation-action-scene.ts b/src/panels/config/automation/action/types/ha-automation-action-scene.ts index 3399286deb..36808b3bc5 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-scene.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-scene.ts @@ -24,7 +24,7 @@ export class HaSceneAction extends LitElement implements ActionElement { .hass=${this.hass} .value=${scene} @value-changed=${this._entityPicked} - .includeDomains=${["scene"]} + include-domains="['scene']" allow-custom-entity > `; diff --git a/src/panels/config/automation/action/types/ha-automation-action-service.ts b/src/panels/config/automation/action/types/ha-automation-action-service.ts index 4a7751e9c3..3cdbc811e2 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-service.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-service.ts @@ -34,6 +34,8 @@ export class HaServiceAction extends LitElement implements ActionElement { return { service: "", data: {} }; } + private _domain = memoizeOne((service: string) => [computeDomain(service)]); + private _getServiceData = memoizeOne((service: string) => { if (!service) { return []; @@ -85,7 +87,7 @@ export class HaServiceAction extends LitElement implements ActionElement { .value=${entity_id} .label=${entity.description} @value-changed=${this._entityPicked} - .includeDomains=${[computeDomain(service)]} + .includeDomains=${this._domain(service)} allow-custom-entity > ` diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts b/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts index 213fb1966e..d330d0b50a 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts @@ -46,7 +46,7 @@ export class HaZoneCondition extends LitElement { @value-changed=${this._zonePicked} .hass=${this.hass} allow-custom-entity - .includeDomains=${["zone"]} + include-domains="['zone']" >