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 {
is_built_in: boolean;
overwrites_built_in?: boolean;
domain: string;
name: string;
config_flow: boolean;

View File

@ -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 {

View File

@ -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_"),
});
}

View File

@ -161,14 +161,20 @@ export class HaIntegrationCard extends LitElement {
: html`<div class="spacer"></div>`}
<div class="icons">
${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>
<simple-tooltip
animation-delay="0"
.position=${computeRTL(this.hass) ? "right" : "left"}
offset="4"
>${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
>
</span>`
@ -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);
}

View File

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

View File

@ -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",