Show if a custom integration overwrites a core integration (#22295)

This commit is contained in:
Petar Petrov 2024-10-16 10:28:33 +03:00 committed by GitHub
parent dcafbcb06c
commit 82ec308be0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 22 additions and 3 deletions

View File

@ -22,6 +22,7 @@ export type IntegrationType =
export interface IntegrationManifest { export interface IntegrationManifest {
is_built_in: boolean; is_built_in: boolean;
overwrites_built_in?: boolean;
domain: string; domain: string;
name: string; name: string;
config_flow: boolean; config_flow: boolean;

View File

@ -11,6 +11,7 @@ export interface Integration {
iot_class?: string; iot_class?: string;
supported_by?: string; supported_by?: string;
is_built_in?: boolean; is_built_in?: boolean;
overwrites_built_in?: boolean;
single_config_entry?: boolean; single_config_entry?: boolean;
} }
@ -23,6 +24,7 @@ export interface Brand {
integrations?: Integrations; integrations?: Integrations;
iot_standards?: IotStandards[]; iot_standards?: IotStandards[];
is_built_in?: boolean; is_built_in?: boolean;
overwrites_built_in?: boolean;
} }
export interface Brands { export interface Brands {

View File

@ -69,6 +69,7 @@ export interface IntegrationListItem {
supported_by?: string; supported_by?: string;
cloud?: boolean; cloud?: boolean;
is_built_in?: boolean; is_built_in?: boolean;
overwrites_built_in?: boolean;
is_add?: boolean; is_add?: boolean;
single_config_entry?: boolean; single_config_entry?: boolean;
} }
@ -211,6 +212,7 @@ class AddIntegrationDialog extends LitElement {
iot_standards: supportedIntegration.iot_standards, iot_standards: supportedIntegration.iot_standards,
supported_by: integration.supported_by, supported_by: integration.supported_by,
is_built_in: supportedIntegration.is_built_in !== false, is_built_in: supportedIntegration.is_built_in !== false,
overwrites_built_in: integration.overwrites_built_in,
cloud: supportedIntegration.iot_class?.startsWith("cloud_"), cloud: supportedIntegration.iot_class?.startsWith("cloud_"),
single_config_entry: integration.single_config_entry, single_config_entry: integration.single_config_entry,
}); });
@ -232,6 +234,7 @@ class AddIntegrationDialog extends LitElement {
? Object.keys(integration.integrations) ? Object.keys(integration.integrations)
: undefined, : undefined,
is_built_in: integration.is_built_in !== false, is_built_in: integration.is_built_in !== false,
overwrites_built_in: integration.overwrites_built_in,
}); });
} else if (filter && "integration_type" in integration) { } else if (filter && "integration_type" in integration) {
// Integration without a config flow // Integration without a config flow
@ -240,6 +243,7 @@ class AddIntegrationDialog extends LitElement {
name: integration.name || domainToName(localize, domain), name: integration.name || domainToName(localize, domain),
config_flow: integration.config_flow, config_flow: integration.config_flow,
is_built_in: integration.is_built_in !== false, is_built_in: integration.is_built_in !== false,
overwrites_built_in: integration.overwrites_built_in,
cloud: integration.iot_class?.startsWith("cloud_"), cloud: integration.iot_class?.startsWith("cloud_"),
}); });
} }

View File

@ -161,14 +161,20 @@ export class HaIntegrationCard extends LitElement {
: html`<div class="spacer"></div>`} : html`<div class="spacer"></div>`}
<div class="icons"> <div class="icons">
${this.manifest && !this.manifest.is_built_in ${this.manifest && !this.manifest.is_built_in
? html`<span class="icon custom"> ? html`<span
class="icon ${this.manifest.overwrites_built_in
? "overwrites"
: "custom"}"
>
<ha-svg-icon .path=${mdiPackageVariant}></ha-svg-icon> <ha-svg-icon .path=${mdiPackageVariant}></ha-svg-icon>
<simple-tooltip <simple-tooltip
animation-delay="0" animation-delay="0"
.position=${computeRTL(this.hass) ? "right" : "left"} .position=${computeRTL(this.hass) ? "right" : "left"}
offset="4" offset="4"
>${this.hass.localize( >${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"
)}</simple-tooltip )}</simple-tooltip
> >
</span>` </span>`
@ -361,6 +367,9 @@ export class HaIntegrationCard extends LitElement {
.icon.custom { .icon.custom {
background: var(--warning-color); background: var(--warning-color);
} }
.icon.overwrites {
background: var(--error-color);
}
.icon.yaml { .icon.yaml {
background: var(--label-badge-grey); background: var(--label-badge-grey);
} }

View File

@ -85,7 +85,9 @@ export class HaIntegrationListItem extends ListItemBase {
><ha-svg-icon .path=${mdiPackageVariant}></ha-svg-icon ><ha-svg-icon .path=${mdiPackageVariant}></ha-svg-icon
><simple-tooltip animation-delay="0" position="left" ><simple-tooltip animation-delay="0" position="left"
>${this.hass.localize( >${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"
)}</simple-tooltip )}</simple-tooltip
></span ></span
>` >`

View File

@ -4404,6 +4404,7 @@
} }
}, },
"custom_integration": "Custom integration", "custom_integration": "Custom integration",
"custom_overwrites_core": "Custom integration that replaces a core component",
"depends_on_cloud": "Depends on the cloud", "depends_on_cloud": "Depends on the cloud",
"yaml_only": "Needs manual configuration", "yaml_only": "Needs manual configuration",
"no_config_flow": "This integration was not set up from the UI", "no_config_flow": "This integration was not set up from the UI",