diff --git a/src/panels/lovelace/cards/hui-entity-filter-card.ts b/src/panels/lovelace/cards/hui-entity-filter-card.ts index 96239b8538..5e8ed06d6f 100644 --- a/src/panels/lovelace/cards/hui-entity-filter-card.ts +++ b/src/panels/lovelace/cards/hui-entity-filter-card.ts @@ -82,18 +82,40 @@ export class HuiEntityFilterCard } if ( - !( - (config.conditions && Array.isArray(config.conditions)) || - (config.state_filter && Array.isArray(config.state_filter)) - ) && - !config.entities.every( + !config.conditions && + !config.state_filter && + !config.entities.some( (entity) => typeof entity === "object" && - entity.state_filter && - Array.isArray(entity.state_filter) + (entity.state_filter || entity.conditions) ) ) { - throw new Error("Incorrect filter config"); + throw new Error("At least one conditions or state_filter is required"); + } + + if ( + (config.conditions && !Array.isArray(config.conditions)) || + (config.state_filter && !Array.isArray(config.state_filter)) || + config.entities.some( + (entity) => + typeof entity === "object" && + ((entity.state_filter && !Array.isArray(entity.state_filter)) || + (entity.conditions && !Array.isArray(entity.conditions))) + ) + ) { + throw new Error("Conditions or state_filter must be an array"); + } + + if ( + (config.conditions && config.state_filter) || + config.entities.some( + (entity) => + typeof entity === "object" && entity.state_filter && entity.conditions + ) + ) { + throw new Error( + "Conditions and state_filter may not be simultaneously defined" + ); } this._configEntities = processConfigEntities(config.entities); @@ -149,7 +171,7 @@ export class HuiEntityFilterCard if (!stateObj) return false; const conditions = entityConf.conditions ?? this._config!.conditions; - if (conditions) { + if (conditions && !entityConf.state_filter) { const conditionWithEntity = conditions.map((condition) => addEntityToCondition(condition, entityConf.entity) ); @@ -161,7 +183,7 @@ export class HuiEntityFilterCard return filters.some((filter) => evaluateStateFilter(stateObj, filter)); } - return false; + return true; }); if (entitiesList.length === 0 && this._config.show_empty === false) {