Tweak rules for entity-filter card (#25570)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
This commit is contained in:
karwosts 2025-05-26 06:24:10 -07:00 committed by GitHub
parent 114c1fb98b
commit 9f5f100e98
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

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