Extended map to support geo location entities (#2337)

* initial version of geo location map

* configuring entities not required but source is

* extending existing map instead of adding a new one

* renamed source to geo_location_source; clearer handling of geo location entities vs defined entities

* geo location sources must now be an array

* code cleanup
This commit is contained in:
Malte Franken 2018-12-17 19:04:58 +11:00 committed by Paulus Schoutsen
parent 9d2b37c9f2
commit cac7f8d1ab

View File

@ -111,8 +111,24 @@ class HuiMapCard extends PolymerElement {
throw new Error("Error in card configuration.");
}
this._configEntities = processConfigEntities(config.entities);
if (!config.entities && !config.geo_location_sources) {
throw new Error(
"Either entities or geo_location_sources must be defined"
);
}
if (config.entities && !Array.isArray(config.entities)) {
throw new Error("Entities need to be an array");
}
if (
config.geo_location_sources &&
!Array.isArray(config.geo_location_sources)
) {
throw new Error("Geo_location_sources needs to be an array");
}
this._config = config;
this._configGeoLocationSources = config.geo_location_sources;
this._configEntities = config.entities;
}
getCardSize() {
@ -205,7 +221,24 @@ class HuiMapCard extends PolymerElement {
}
const mapItems = (this._mapItems = []);
this._configEntities.forEach((entity) => {
let allEntities = [];
if (this._configEntities) {
allEntities = allEntities.concat(this._configEntities);
}
if (this._configGeoLocationSources) {
Object.keys(this.hass.states).forEach((entityId) => {
const stateObj = this.hass.states[entityId];
if (
computeStateDomain(stateObj) === "geo_location" &&
this._configGeoLocationSources.includes(stateObj.attributes.source)
) {
allEntities.push(entityId);
}
});
}
allEntities = processConfigEntities(allEntities);
allEntities.forEach((entity) => {
const entityId = entity.entity;
if (!(entityId in hass.states)) {
return;