From d7e58a00caa3434c1d2ed42940b12a4bcdd15a5c Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 18 Jul 2023 09:56:07 +0200 Subject: [PATCH] Add support for registering config panels (#17296) --- src/data/integration.ts | 10 +++++----- .../integrations/ha-config-integration-page.ts | 15 +++++++++++---- src/types.ts | 1 + 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/data/integration.ts b/src/data/integration.ts index 20a73d8235..151140bebd 100644 --- a/src/data/integration.ts +++ b/src/data/integration.ts @@ -4,11 +4,11 @@ import { HomeAssistant } from "../types"; import { debounce } from "../common/util/debounce"; export const integrationsWithPanel = { - matter: "/config/matter", - mqtt: "/config/mqtt", - thread: "/config/thread", - zha: "/config/zha/dashboard", - zwave_js: "/config/zwave_js/dashboard", + matter: "config/matter", + mqtt: "config/mqtt", + thread: "config/thread", + zha: "config/zha/dashboard", + zwave_js: "config/zwave_js/dashboard", }; export type IntegrationType = diff --git a/src/panels/config/integrations/ha-config-integration-page.ts b/src/panels/config/integrations/ha-config-integration-page.ts index 9248d0c805..b05b15b3ba 100644 --- a/src/panels/config/integrations/ha-config-integration-page.ts +++ b/src/panels/config/integrations/ha-config-integration-page.ts @@ -135,6 +135,13 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { window.location.hash.substring(1) ); + private _configPanel = memoizeOne( + (domain: string, panels: HomeAssistant["panels"]): string | undefined => + Object.values(panels).find( + (panel) => panel.config_panel_domain === domain + )?.url_path || integrationsWithPanel[domain] + ); + private _domainConfigEntries = memoizeOne( (domain: string, configEntries?: ConfigEntry[]): ConfigEntry[] => configEntries @@ -638,6 +645,8 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { } } + const configPanel = this._configPanel(item.domain, this.hass.panels); + return html` ${this.hass.localize("ui.common.enable")} ` - : item.domain in integrationsWithPanel && + : configPanel && (item.domain !== "matter" || isDevVersion(this.hass.config.version)) ? html` ${this.hass.localize( "ui.panel.config.integrations.config_entry.configure" diff --git a/src/types.ts b/src/types.ts index 7dcfee537f..bfdf9768e2 100644 --- a/src/types.ts +++ b/src/types.ts @@ -120,6 +120,7 @@ export interface PanelInfo | null> { icon: string | null; title: string | null; url_path: string; + config_panel_domain?: string; } export interface Panels {