Fix area picker (#15566)

This commit is contained in:
Bram Kragten 2023-02-23 16:35:25 +01:00 committed by GitHub
parent f69ae84cc6
commit 43541f9754
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -142,95 +142,99 @@ export class HaAreaPicker extends LitElement {
includeDomains || includeDomains ||
excludeDomains || excludeDomains ||
includeDeviceClasses || includeDeviceClasses ||
deviceFilter ||
entityFilter entityFilter
) { ) {
deviceEntityLookup = getDeviceEntityDisplayLookup(entities); deviceEntityLookup = getDeviceEntityDisplayLookup(entities);
} inputDevices = devices;
inputDevices = devices; inputEntities = entities.filter((entity) => entity.area_id);
inputEntities = entities.filter((entity) => entity.area_id);
if (includeDomains) { if (includeDomains) {
inputDevices = inputDevices!.filter((device) => { inputDevices = inputDevices!.filter((device) => {
const devEntities = deviceEntityLookup[device.id]; const devEntities = deviceEntityLookup[device.id];
if (!devEntities || !devEntities.length) { if (!devEntities || !devEntities.length) {
return false; return false;
} }
return deviceEntityLookup[device.id].some((entity) => return deviceEntityLookup[device.id].some((entity) =>
includeDomains.includes(computeDomain(entity.entity_id))
);
});
inputEntities = inputEntities!.filter((entity) =>
includeDomains.includes(computeDomain(entity.entity_id)) includeDomains.includes(computeDomain(entity.entity_id))
); );
}); }
inputEntities = inputEntities!.filter((entity) =>
includeDomains.includes(computeDomain(entity.entity_id))
);
}
if (excludeDomains) { if (excludeDomains) {
inputDevices = inputDevices!.filter((device) => { inputDevices = inputDevices!.filter((device) => {
const devEntities = deviceEntityLookup[device.id]; const devEntities = deviceEntityLookup[device.id];
if (!devEntities || !devEntities.length) { if (!devEntities || !devEntities.length) {
return true; return true;
} }
return entities.every( return entities.every(
(entity) =>
!excludeDomains.includes(computeDomain(entity.entity_id))
);
});
inputEntities = inputEntities!.filter(
(entity) => (entity) =>
!excludeDomains.includes(computeDomain(entity.entity_id)) !excludeDomains.includes(computeDomain(entity.entity_id))
); );
}); }
inputEntities = inputEntities!.filter(
(entity) => !excludeDomains.includes(computeDomain(entity.entity_id))
);
}
if (includeDeviceClasses) { if (includeDeviceClasses) {
inputDevices = inputDevices!.filter((device) => { inputDevices = inputDevices!.filter((device) => {
const devEntities = deviceEntityLookup[device.id]; const devEntities = deviceEntityLookup[device.id];
if (!devEntities || !devEntities.length) { if (!devEntities || !devEntities.length) {
return false;
}
return deviceEntityLookup[device.id].some((entity) => {
const stateObj = this.hass.states[entity.entity_id];
if (!stateObj) {
return false; return false;
} }
return deviceEntityLookup[device.id].some((entity) => {
const stateObj = this.hass.states[entity.entity_id];
if (!stateObj) {
return false;
}
return (
stateObj.attributes.device_class &&
includeDeviceClasses.includes(stateObj.attributes.device_class)
);
});
});
inputEntities = inputEntities!.filter((entity) => {
const stateObj = this.hass.states[entity.entity_id];
return ( return (
stateObj.attributes.device_class && stateObj.attributes.device_class &&
includeDeviceClasses.includes(stateObj.attributes.device_class) includeDeviceClasses.includes(stateObj.attributes.device_class)
); );
}); });
}); }
inputEntities = inputEntities!.filter((entity) => {
const stateObj = this.hass.states[entity.entity_id]; if (deviceFilter) {
return ( inputDevices = inputDevices!.filter((device) =>
stateObj.attributes.device_class && deviceFilter!(device)
includeDeviceClasses.includes(stateObj.attributes.device_class)
); );
}); }
}
if (deviceFilter) { if (entityFilter) {
inputDevices = inputDevices!.filter((device) => deviceFilter!(device)); inputDevices = inputDevices!.filter((device) => {
} const devEntities = deviceEntityLookup[device.id];
if (!devEntities || !devEntities.length) {
if (entityFilter) { return false;
inputDevices = inputDevices!.filter((device) => { }
const devEntities = deviceEntityLookup[device.id]; return deviceEntityLookup[device.id].some((entity) => {
if (!devEntities || !devEntities.length) { const stateObj = this.hass.states[entity.entity_id];
return false; if (!stateObj) {
} return false;
return deviceEntityLookup[device.id].some((entity) => { }
return entityFilter(stateObj);
});
});
inputEntities = inputEntities!.filter((entity) => {
const stateObj = this.hass.states[entity.entity_id]; const stateObj = this.hass.states[entity.entity_id];
if (!stateObj) { if (!stateObj) {
return false; return false;
} }
return entityFilter(stateObj); return entityFilter!(stateObj);
}); });
}); }
inputEntities = inputEntities!.filter((entity) => {
const stateObj = this.hass.states[entity.entity_id];
if (!stateObj) {
return false;
}
return entityFilter!(stateObj);
});
} }
let outputAreas = areas; let outputAreas = areas;