Add conditions to map card (#29614)

This commit is contained in:
karwosts
2026-02-16 05:38:48 -08:00
committed by GitHub
parent 2ca47fddd3
commit f5dbb89e25
2 changed files with 23 additions and 2 deletions

View File

@@ -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() {

View File

@@ -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()),
})
);