From fcacdf65348718129871ac45dc98f99235e7a9bf Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 5 Jun 2023 17:52:11 +0200 Subject: [PATCH] Add all devices and entities link to integration page (#16781) --- .../ha-config-integration-page.ts | 176 +++++++++++++----- 1 file changed, 130 insertions(+), 46 deletions(-) diff --git a/src/panels/config/integrations/ha-config-integration-page.ts b/src/panels/config/integrations/ha-config-integration-page.ts index 97bd2204d1..e25ad601fe 100644 --- a/src/panels/config/integrations/ha-config-integration-page.ts +++ b/src/panels/config/integrations/ha-config-integration-page.ts @@ -10,8 +10,10 @@ import { mdiCloud, mdiCog, mdiDelete, + mdiDevices, mdiDotsVertical, mdiDownload, + mdiHandExtendedOutline, mdiOpenInNew, mdiPackageVariant, mdiPlayCircleOutline, @@ -19,6 +21,7 @@ import { mdiReload, mdiReloadAlert, mdiRenameBox, + mdiShapeOutline, mdiStopCircleOutline, } from "@mdi/js"; import { UnsubscribeFunc } from "home-assistant-js-websocket"; @@ -228,6 +231,11 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { ); }); + const devices = this._getDevices(configEntries, this.hass.devices); + const entities = this._getEntities(configEntries, this._entities); + + const services = !devices.some((device) => device.entry_type !== "service"); + return html`
- ${this._logInfo - ? html` 0 + ? html` - ${this._logInfo.level === LogSeverity.DEBUG - ? this.hass.localize( - "ui.panel.config.integrations.config_entry.disable_debug_logging" - ) - : this.hass.localize( - "ui.panel.config.integrations.config_entry.enable_debug_logging" - )} - - ` + + + ${this.hass.localize( + `ui.panel.config.integrations.config_entry.${ + services ? "services" : "devices" + }`, + "count", + devices.length + )} + + + ` + : ""} + ${entities.length > 0 + ? html` + + + ${this.hass.localize( + `ui.panel.config.integrations.config_entry.entities`, + "count", + entities.length + )} + + + ` : ""} ${this._manifest ? html` ` : ""} + ${this._logInfo + ? html` + ${this._logInfo.level === LogSeverity.DEBUG + ? this.hass.localize( + "ui.panel.config.integrations.config_entry.disable_debug_logging" + ) + : this.hass.localize( + "ui.panel.config.integrations.config_entry.enable_debug_logging" + )} + + ` + : ""}
@@ -510,9 +563,9 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { } } - const devices = this._getDevices(item, this.hass.devices); - const services = this._getServices(item, this.hass.devices); - const entities = this._getEntities(item, this._entities); + const devices = this._getConfigEntryDevices(item); + const services = this._getConfigEntryServices(item); + const entities = this._getConfigEntryEntities(item); let devicesLine: (TemplateResult | string)[] = []; @@ -809,49 +862,77 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { private _getEntities = memoizeOne( ( - configEntry: ConfigEntry, + configEntry: ConfigEntry[], entityRegistryEntries: EntityRegistryEntry[] ): EntityRegistryEntry[] => { if (!entityRegistryEntries) { return []; } + const entryIds = configEntry.map((entry) => entry.entry_id); return entityRegistryEntries.filter( - (entity) => entity.config_entry_id === configEntry.entry_id + (entity) => + entity.config_entry_id && entryIds.includes(entity.config_entry_id) ); } ); private _getDevices = memoizeOne( ( - configEntry: ConfigEntry, + configEntry: ConfigEntry[], deviceRegistryEntries: HomeAssistant["devices"] ): DeviceRegistryEntry[] => { if (!deviceRegistryEntries) { return []; } - return Object.values(deviceRegistryEntries).filter( - (device) => - device.config_entries.includes(configEntry.entry_id) && - device.entry_type !== "service" + const entryIds = configEntry.map((entry) => entry.entry_id); + return Object.values(deviceRegistryEntries).filter((device) => + device.config_entries.some((entryId) => entryIds.includes(entryId)) ); } ); - private _getServices = memoizeOne( - ( - configEntry: ConfigEntry, - deviceRegistryEntries: HomeAssistant["devices"] - ): DeviceRegistryEntry[] => { - if (!deviceRegistryEntries) { - return []; - } - return Object.values(deviceRegistryEntries).filter( - (device) => - device.config_entries.includes(configEntry.entry_id) && - device.entry_type === "service" - ); - } - ); + private _getConfigEntryEntities = ( + configEntry: ConfigEntry + ): EntityRegistryEntry[] => { + const entries = this._domainConfigEntries( + this.domain, + this._extraConfigEntries || this.configEntries + ); + const entityRegistryEntries = this._getEntities(entries, this._entities); + return entityRegistryEntries.filter( + (entity) => entity.config_entry_id === configEntry.entry_id + ); + }; + + private _getConfigEntryDevices = ( + configEntry: ConfigEntry + ): DeviceRegistryEntry[] => { + const entries = this._domainConfigEntries( + this.domain, + this._extraConfigEntries || this.configEntries + ); + const deviceRegistryEntries = this._getDevices(entries, this.hass.devices); + return Object.values(deviceRegistryEntries).filter( + (device) => + device.config_entries.includes(configEntry.entry_id) && + device.entry_type !== "service" + ); + }; + + private _getConfigEntryServices = ( + configEntry: ConfigEntry + ): DeviceRegistryEntry[] => { + const entries = this._domainConfigEntries( + this.domain, + this._extraConfigEntries || this.configEntries + ); + const deviceRegistryEntries = this._getDevices(entries, this.hass.devices); + return Object.values(deviceRegistryEntries).filter( + (device) => + device.config_entries.includes(configEntry.entry_id) && + device.entry_type === "service" + ); + }; private _showOptions(ev) { showOptionsFlowDialog( @@ -1223,6 +1304,9 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { .attention { primary-color: var(--error-color); } + .warning { + color: var(--warning-color); + } .state-error { --state-message-color: var(--error-color); --text-on-state-color: var(--text-primary-color);