Less clever, more stable. Really fix #37
This commit is contained in:
		
							parent
							
								
									52b2a77bfa
								
							
						
					
					
						commit
						bc73013f6d
					
				
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -92,6 +92,8 @@ export function entity_filter(hass, filter) { | ||||
|             break; | ||||
| 
 | ||||
|             case "device": | ||||
|             if(!window.cardToolsData || !window.cardToolsData.devices) | ||||
|             return false; | ||||
|             let _deviceMatch = false; | ||||
|             for(const d of window.cardToolsData.devices) { | ||||
|               if (match(value, d.name)){ | ||||
| @ -103,6 +105,8 @@ export function entity_filter(hass, filter) { | ||||
|             break; | ||||
| 
 | ||||
|             case "area": | ||||
|             if(!window.cardToolsData || !window.cardToolsData.areas) | ||||
|             return false; | ||||
|             let _areaMatch = false; | ||||
|             for (const a of window.cardToolsData.areas) { | ||||
|               if(match(value, a.name)) { | ||||
|  | ||||
							
								
								
									
										43
									
								
								src/main.js
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								src/main.js
									
									
									
									
									
								
							| @ -1,9 +1,10 @@ | ||||
| import { LitElement, html, css } from "card-tools/src/lit-element"; | ||||
| import "card-tools/src/card-maker"; | ||||
| import { entity_filter } from "./filter"; | ||||
| import { entity_sorter } from "./sort"; | ||||
| import { getData } from "card-tools/src/devices"; | ||||
| import { fireEvent } from "card-tools/src/event"; | ||||
| import { createCard } from "card-tools/src/lovelace-element"; | ||||
| import { hass } from "card-tools/src/hass"; | ||||
| 
 | ||||
| class AutoEntities extends LitElement { | ||||
| 
 | ||||
| @ -18,15 +19,21 @@ class AutoEntities extends LitElement { | ||||
|     } | ||||
|     if(!this._config) { | ||||
|       this._config = config; | ||||
|             this.cardConfig = {entities: [], ...config.card}; | ||||
|             this.entities = []; | ||||
| 
 | ||||
|       this.hass = hass(); | ||||
|       this._getEntities(); | ||||
|       this.cardConfig = {entities: this.entities, ...config.card}; | ||||
|       this.card = createCard(this.cardConfig); | ||||
|     } else { | ||||
|       this._config = config; | ||||
|       this.hass = this.hass; | ||||
|     } | ||||
| 
 | ||||
|     // Reevaluate all filters once areas have been loaded
 | ||||
|     getData().then(() => this._getEntities()); | ||||
|   } | ||||
| 
 | ||||
|     async _getEntities() | ||||
|   _getEntities() | ||||
|   { | ||||
|     let entities = []; | ||||
|     // Start with any entities added by the `entities` parameter
 | ||||
| @ -50,9 +57,6 @@ class AutoEntities extends LitElement { | ||||
|           entities.push(f); | ||||
|           continue; | ||||
|         } | ||||
|                 if(f.device || f.area) { | ||||
|                     await getData(); | ||||
|                 } | ||||
| 
 | ||||
|         let add = all_entities.filter(entity_filter(this.hass, f)) | ||||
|         .map((e) => new Object({...e, ...f.options})); | ||||
| @ -94,7 +98,7 @@ class AutoEntities extends LitElement { | ||||
|       } | ||||
|       entities = newEntities; | ||||
|     } | ||||
|         return entities; | ||||
|     this.entities = entities; | ||||
|   } | ||||
| 
 | ||||
|   set entities(ent) { | ||||
| @ -121,7 +125,6 @@ class AutoEntities extends LitElement { | ||||
|         this.style.display = null; | ||||
|         this.style.margin = null; | ||||
|       } | ||||
|             this.requestUpdate(); | ||||
|     } | ||||
|   } | ||||
|   get entities() { | ||||
| @ -130,43 +133,37 @@ class AutoEntities extends LitElement { | ||||
| 
 | ||||
|   set cardConfig(cardConfig) { | ||||
|     this._cardConfig = cardConfig; | ||||
|         if(this.querySelector("card-maker")) | ||||
|             this.querySelector("card-maker").config = cardConfig; | ||||
|     if(this.card) | ||||
|       this.card.setConfig(cardConfig); | ||||
|   } | ||||
|   get cardConfig() { | ||||
|     return this._cardConfig; | ||||
|   } | ||||
| 
 | ||||
|     firstUpdated() { | ||||
|         this.cardConfig = this._cardConfig; | ||||
|     } | ||||
| 
 | ||||
|   updated(changedProperties) { | ||||
|     if(changedProperties.has("hass") && this.hass) { | ||||
|       this.card.hass = this.hass; | ||||
|       // Run this in a timeout to improve performance
 | ||||
|             setTimeout(() => this._getEntities().then((e) => this.entities = e), 0); | ||||
|       setTimeout(() => this._getEntities(), 0); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   createRenderRoot() { | ||||
|     return this; | ||||
|   } | ||||
| 
 | ||||
|   render() { | ||||
|     return html` | ||||
|         <card-maker | ||||
|             .hass=${this.hass} | ||||
|         ></card-maker>`; | ||||
|     ${this.card}`;
 | ||||
|   } | ||||
| 
 | ||||
|   getCardSize() { | ||||
|     let len = 0; | ||||
|         if(this.querySelector("card-maker") && this.querySelector("card-maker").getCardSize) | ||||
|             len = this.querySelector("card-maker").getCardSize(); | ||||
|     if(this.card && this.card.getCardSize) | ||||
|       len = this.card.getCardSize(); | ||||
|     if(len === 1 && this.entities.length) | ||||
|       len = this.entities.length; | ||||
|     if(len === 0 && this._config.filter && this._config.filter.include) | ||||
|             return Object.keys(this._config.filter.include).length; | ||||
|       len = Object.keys(this._config.filter.include).length; | ||||
|     return len || 1; | ||||
|   } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user