Improve entity integration filter (#20372)

This commit is contained in:
Bram Kragten 2024-04-03 15:18:40 +02:00 committed by GitHub
parent 3b5b3f3bb6
commit 5751fdbe56
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -88,6 +88,10 @@ import { configSections } from "../ha-panel-config";
import "../integrations/ha-integration-overflow-menu"; import "../integrations/ha-integration-overflow-menu";
import { showAddIntegrationDialog } from "../integrations/show-add-integration-dialog"; import { showAddIntegrationDialog } from "../integrations/show-add-integration-dialog";
import { showLabelDetailDialog } from "../labels/show-dialog-label-detail"; import { showLabelDetailDialog } from "../labels/show-dialog-label-detail";
import {
EntitySources,
fetchEntitySourcesWithCache,
} from "../../../data/entity_sources";
export interface StateEntity export interface StateEntity
extends Omit<EntityRegistryEntry, "id" | "unique_id"> { extends Omit<EntityRegistryEntry, "id" | "unique_id"> {
@ -141,6 +145,8 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
@state() @state()
_labels!: LabelRegistryEntry[]; _labels!: LabelRegistryEntry[];
@state() private _entitySources?: EntitySources;
@query("hass-tabs-subpage-data-table", true) @query("hass-tabs-subpage-data-table", true)
private _dataTable!: HaTabsSubpageDataTable; private _dataTable!: HaTabsSubpageDataTable;
@ -405,10 +411,12 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
const entryIds = entries const entryIds = entries
.filter((entry) => filter.value!.includes(entry.domain)) .filter((entry) => filter.value!.includes(entry.domain))
.map((entry) => entry.entry_id); .map((entry) => entry.entry_id);
filteredEntities = filteredEntities.filter( filteredEntities = filteredEntities.filter(
(entity) => (entity) =>
entity.config_entry_id && filter.value?.includes(entity.platform) ||
entryIds.includes(entity.config_entry_id) (entity.config_entry_id &&
entryIds.includes(entity.config_entry_id))
); );
filter.value!.forEach((domain) => filteredDomains.add(domain)); filter.value!.forEach((domain) => filteredDomains.add(domain));
} else if (key === "ha-filter-labels" && filter.value?.length) { } else if (key === "ha-filter-labels" && filter.value?.length) {
@ -807,6 +815,9 @@ ${
}, },
}; };
this._setFiltersFromUrl(); this._setFiltersFromUrl();
fetchEntitySourcesWithCache(this.hass).then((sources) => {
this._entitySources = sources;
});
} }
private _setFiltersFromUrl() { private _setFiltersFromUrl() {
@ -865,14 +876,18 @@ ${
this._filters = {}; this._filters = {};
} }
public willUpdate(changedProps: PropertyValues<this>): void { public willUpdate(changedProps: PropertyValues): void {
super.willUpdate(changedProps); super.willUpdate(changedProps);
const oldHass = changedProps.get("hass"); const oldHass = changedProps.get("hass");
let changed = false; let changed = false;
if (!this.hass || !this._entities) { if (!this.hass || !this._entities) {
return; return;
} }
if (changedProps.has("hass") || changedProps.has("_entities")) { if (
changedProps.has("hass") ||
changedProps.has("_entities") ||
changedProps.has("_entitySources")
) {
const stateEntities: StateEntity[] = []; const stateEntities: StateEntity[] = [];
const regEntityIds = new Set( const regEntityIds = new Set(
this._entities.map((entity) => entity.entity_id) this._entities.map((entity) => entity.entity_id)
@ -883,6 +898,7 @@ ${
} }
if ( if (
!oldHass || !oldHass ||
changedProps.has("_entitySources") ||
this.hass.states[entityId] !== oldHass.states[entityId] this.hass.states[entityId] !== oldHass.states[entityId]
) { ) {
changed = true; changed = true;
@ -890,7 +906,8 @@ ${
stateEntities.push({ stateEntities.push({
name: computeStateName(this.hass.states[entityId]), name: computeStateName(this.hass.states[entityId]),
entity_id: entityId, entity_id: entityId,
platform: computeDomain(entityId), platform:
this._entitySources?.[entityId]?.domain || computeDomain(entityId),
disabled_by: null, disabled_by: null,
hidden_by: null, hidden_by: null,
area_id: null, area_id: null,