mirror of
https://github.com/home-assistant/frontend.git
synced 2026-04-20 09:34:56 +00:00
Add conditions to map card (#29614)
This commit is contained in:
@@ -37,6 +37,10 @@ import {
|
||||
import { processConfigEntities } from "../common/process-config-entities";
|
||||
import type { LovelaceCard, LovelaceGridOptions } from "../types";
|
||||
import type { MapCardConfig, MapEntityConfig } from "./types";
|
||||
import {
|
||||
addEntityToCondition,
|
||||
checkConditionsMet,
|
||||
} from "../common/validate-condition";
|
||||
|
||||
export const DEFAULT_HOURS_TO_SHOW = 0;
|
||||
export const DEFAULT_ZOOM = 14;
|
||||
@@ -67,6 +71,8 @@ class HuiMapCard extends LitElement implements LovelaceCard {
|
||||
|
||||
@state() private _mapEntities: HaMapEntity[] = [];
|
||||
|
||||
private _filteredMapEntities: HaMapEntity[] = [];
|
||||
|
||||
private _colorDict: Record<string, string> = {};
|
||||
|
||||
private _colorIndex = 0;
|
||||
@@ -206,7 +212,7 @@ class HuiMapCard extends LitElement implements LovelaceCard {
|
||||
<div id="root">
|
||||
<ha-map
|
||||
.hass=${this.hass}
|
||||
.entities=${this._mapEntities}
|
||||
.entities=${this._filteredMapEntities}
|
||||
.zoom=${this._config.default_zoom ?? DEFAULT_ZOOM}
|
||||
.paths=${this._getHistoryPaths(this._config, this._stateHistory)}
|
||||
.autoFit=${this._config.auto_fit || false}
|
||||
@@ -217,7 +223,7 @@ class HuiMapCard extends LitElement implements LovelaceCard {
|
||||
render-passive
|
||||
></ha-map>
|
||||
<div id="buttons">
|
||||
${this._mapEntities.length > 1
|
||||
${this._filteredMapEntities.length > 1
|
||||
? html`
|
||||
<ha-icon-button
|
||||
.label=${this.hass!.localize(
|
||||
@@ -301,6 +307,19 @@ class HuiMapCard extends LitElement implements LovelaceCard {
|
||||
) {
|
||||
this._mapEntities = this._getMapEntities();
|
||||
}
|
||||
|
||||
// Filter entities by conditions
|
||||
if (this._config?.conditions && this._mapEntities) {
|
||||
const conditions = this._config.conditions;
|
||||
this._filteredMapEntities = this._mapEntities.filter((entity) => {
|
||||
const conditionWithEntity = conditions.map((condition) =>
|
||||
addEntityToCondition(condition, entity.entity_id)
|
||||
);
|
||||
return checkConditionsMet(conditionWithEntity, this.hass!);
|
||||
});
|
||||
} else {
|
||||
this._filteredMapEntities = this._mapEntities;
|
||||
}
|
||||
}
|
||||
|
||||
public connectedCallback() {
|
||||
|
||||
@@ -4,6 +4,7 @@ import { css, html, LitElement, nothing } from "lit";
|
||||
import { customElement, property, state } from "lit/decorators";
|
||||
import memoizeOne from "memoize-one";
|
||||
import {
|
||||
any,
|
||||
array,
|
||||
assert,
|
||||
assign,
|
||||
@@ -76,6 +77,7 @@ const cardConfigStruct = assign(
|
||||
auto_fit: optional(boolean()),
|
||||
fit_zones: optional(boolean()),
|
||||
theme_mode: optional(string()),
|
||||
conditions: optional(any()),
|
||||
})
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user