From 82ec308be091ed9f5fe5a5e70d1c7001d3694f71 Mon Sep 17 00:00:00 2001 From: Petar Petrov Date: Wed, 16 Oct 2024 10:28:33 +0300 Subject: [PATCH] Show if a custom integration overwrites a core integration (#22295) --- src/data/integration.ts | 1 + src/data/integrations.ts | 2 ++ .../config/integrations/dialog-add-integration.ts | 4 ++++ .../config/integrations/ha-integration-card.ts | 13 +++++++++++-- .../config/integrations/ha-integration-list-item.ts | 4 +++- src/translations/en.json | 1 + 6 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/data/integration.ts b/src/data/integration.ts index 7eb60bfb44..78303f7b1c 100644 --- a/src/data/integration.ts +++ b/src/data/integration.ts @@ -22,6 +22,7 @@ export type IntegrationType = export interface IntegrationManifest { is_built_in: boolean; + overwrites_built_in?: boolean; domain: string; name: string; config_flow: boolean; diff --git a/src/data/integrations.ts b/src/data/integrations.ts index 94235ae38c..fdd9c68f31 100644 --- a/src/data/integrations.ts +++ b/src/data/integrations.ts @@ -11,6 +11,7 @@ export interface Integration { iot_class?: string; supported_by?: string; is_built_in?: boolean; + overwrites_built_in?: boolean; single_config_entry?: boolean; } @@ -23,6 +24,7 @@ export interface Brand { integrations?: Integrations; iot_standards?: IotStandards[]; is_built_in?: boolean; + overwrites_built_in?: boolean; } export interface Brands { diff --git a/src/panels/config/integrations/dialog-add-integration.ts b/src/panels/config/integrations/dialog-add-integration.ts index e94008727d..7ca0810f4f 100644 --- a/src/panels/config/integrations/dialog-add-integration.ts +++ b/src/panels/config/integrations/dialog-add-integration.ts @@ -69,6 +69,7 @@ export interface IntegrationListItem { supported_by?: string; cloud?: boolean; is_built_in?: boolean; + overwrites_built_in?: boolean; is_add?: boolean; single_config_entry?: boolean; } @@ -211,6 +212,7 @@ class AddIntegrationDialog extends LitElement { iot_standards: supportedIntegration.iot_standards, supported_by: integration.supported_by, is_built_in: supportedIntegration.is_built_in !== false, + overwrites_built_in: integration.overwrites_built_in, cloud: supportedIntegration.iot_class?.startsWith("cloud_"), single_config_entry: integration.single_config_entry, }); @@ -232,6 +234,7 @@ class AddIntegrationDialog extends LitElement { ? Object.keys(integration.integrations) : undefined, is_built_in: integration.is_built_in !== false, + overwrites_built_in: integration.overwrites_built_in, }); } else if (filter && "integration_type" in integration) { // Integration without a config flow @@ -240,6 +243,7 @@ class AddIntegrationDialog extends LitElement { name: integration.name || domainToName(localize, domain), config_flow: integration.config_flow, is_built_in: integration.is_built_in !== false, + overwrites_built_in: integration.overwrites_built_in, cloud: integration.iot_class?.startsWith("cloud_"), }); } diff --git a/src/panels/config/integrations/ha-integration-card.ts b/src/panels/config/integrations/ha-integration-card.ts index 913335e702..1eec3e3a26 100644 --- a/src/panels/config/integrations/ha-integration-card.ts +++ b/src/panels/config/integrations/ha-integration-card.ts @@ -161,14 +161,20 @@ export class HaIntegrationCard extends LitElement { : html`
`}
${this.manifest && !this.manifest.is_built_in - ? html` + ? html` ${this.hass.localize( - "ui.panel.config.integrations.config_entry.custom_integration" + this.manifest.overwrites_built_in + ? "ui.panel.config.integrations.config_entry.custom_overwrites_core" + : "ui.panel.config.integrations.config_entry.custom_integration" )} ` @@ -361,6 +367,9 @@ export class HaIntegrationCard extends LitElement { .icon.custom { background: var(--warning-color); } + .icon.overwrites { + background: var(--error-color); + } .icon.yaml { background: var(--label-badge-grey); } diff --git a/src/panels/config/integrations/ha-integration-list-item.ts b/src/panels/config/integrations/ha-integration-list-item.ts index 38842801ee..5af5d74ee7 100644 --- a/src/panels/config/integrations/ha-integration-list-item.ts +++ b/src/panels/config/integrations/ha-integration-list-item.ts @@ -85,7 +85,9 @@ export class HaIntegrationListItem extends ListItemBase { >${this.hass.localize( - "ui.panel.config.integrations.config_entry.custom_integration" + this.integration.overwrites_built_in + ? "ui.panel.config.integrations.config_entry.custom_overwrites_core" + : "ui.panel.config.integrations.config_entry.custom_integration" )}` diff --git a/src/translations/en.json b/src/translations/en.json index 4e326bd68c..82d38af5e0 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -4404,6 +4404,7 @@ } }, "custom_integration": "Custom integration", + "custom_overwrites_core": "Custom integration that replaces a core component", "depends_on_cloud": "Depends on the cloud", "yaml_only": "Needs manual configuration", "no_config_flow": "This integration was not set up from the UI",