mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-29 20:26:39 +00:00
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:
parent
9d2b37c9f2
commit
cac7f8d1ab
@ -111,8 +111,24 @@ class HuiMapCard extends PolymerElement {
|
|||||||
throw new Error("Error in card configuration.");
|
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._config = config;
|
||||||
|
this._configGeoLocationSources = config.geo_location_sources;
|
||||||
|
this._configEntities = config.entities;
|
||||||
}
|
}
|
||||||
|
|
||||||
getCardSize() {
|
getCardSize() {
|
||||||
@ -205,7 +221,24 @@ class HuiMapCard extends PolymerElement {
|
|||||||
}
|
}
|
||||||
const mapItems = (this._mapItems = []);
|
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;
|
const entityId = entity.entity;
|
||||||
if (!(entityId in hass.states)) {
|
if (!(entityId in hass.states)) {
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user