From 3120184d63d7ab787bddb327b0f35be9b687e7eb Mon Sep 17 00:00:00 2001 From: Wendelin <12148533+wendevlin@users.noreply.github.com> Date: Thu, 28 Nov 2024 12:23:53 +0100 Subject: [PATCH] Add internal, legacy to IQS (#23040) --- src/data/integration.ts | 11 +-- src/data/integration_quality_scale.ts | 39 ++++++++++ .../ha-config-integration-page.ts | 75 +++++++++++-------- src/translations/en.json | 2 + 4 files changed, 91 insertions(+), 36 deletions(-) create mode 100644 src/data/integration_quality_scale.ts diff --git a/src/data/integration.ts b/src/data/integration.ts index 846751e07c..c293dfc540 100644 --- a/src/data/integration.ts +++ b/src/data/integration.ts @@ -40,12 +40,13 @@ export interface IntegrationManifest { loggers?: string[]; quality_scale?: | "bronze" - | "gold" - | "internal" - | "platinum" | "silver" - | "custom" - | "no_score"; + | "gold" + | "platinum" + | "no_score" + | "internal" + | "legacy" + | "custom"; iot_class: | "assumed_state" | "cloud_polling" diff --git a/src/data/integration_quality_scale.ts b/src/data/integration_quality_scale.ts new file mode 100644 index 0000000000..e49bbc835d --- /dev/null +++ b/src/data/integration_quality_scale.ts @@ -0,0 +1,39 @@ +import { mdiContentSave, mdiMedal, mdiTrophy } from "@mdi/js"; +import { mdiHomeAssistant } from "../resources/home-assistant-logo-svg"; +import type { LocalizeKeys } from "../common/translations/localize"; + +/** + * Map integration quality scale to icon and translation key. + */ +export const QUALITY_SCALE_MAP: Record< + string, + { icon: string; translationKey: LocalizeKeys } +> = { + bronze: { + icon: mdiMedal, + translationKey: "ui.panel.config.integrations.config_entry.bronze_quality", + }, + silver: { + icon: mdiMedal, + translationKey: "ui.panel.config.integrations.config_entry.silver_quality", + }, + gold: { + icon: mdiMedal, + translationKey: "ui.panel.config.integrations.config_entry.gold_quality", + }, + platinum: { + icon: mdiTrophy, + translationKey: + "ui.panel.config.integrations.config_entry.platinum_quality", + }, + internal: { + icon: mdiHomeAssistant, + translationKey: + "ui.panel.config.integrations.config_entry.internal_integration", + }, + legacy: { + icon: mdiContentSave, + translationKey: + "ui.panel.config.integrations.config_entry.legacy_integration", + }, +}; diff --git a/src/panels/config/integrations/ha-config-integration-page.ts b/src/panels/config/integrations/ha-config-integration-page.ts index 5251a7a94d..f44a03b00f 100644 --- a/src/panels/config/integrations/ha-config-integration-page.ts +++ b/src/panels/config/integrations/ha-config-integration-page.ts @@ -13,7 +13,6 @@ import { mdiDownload, mdiFileCodeOutline, mdiHandExtendedOutline, - mdiMedal, mdiOpenInNew, mdiPackageVariant, mdiPlayCircleOutline, @@ -23,7 +22,6 @@ import { mdiRenameBox, mdiShapeOutline, mdiStopCircleOutline, - mdiTrophy, mdiWeb, mdiWrench, } from "@mdi/js"; @@ -107,9 +105,7 @@ import { documentationUrl } from "../../../util/documentation-url"; import { fileDownload } from "../../../util/file_download"; import type { DataEntryFlowProgressExtended } from "./ha-config-integrations"; import { showAddIntegrationDialog } from "./show-add-integration-dialog"; - -type MedalColor = "gold" | "silver" | "bronze" | "platinum"; -const MEDAL_COLORS = ["bronze", "silver", "gold", "platinum"]; +import { QUALITY_SCALE_MAP } from "../../../data/integration_quality_scale"; export const renderConfigEntryError = ( hass: HomeAssistant, @@ -344,29 +340,30 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { ? html`
${this._manifest.version}
` : nothing} ${this._manifest?.quality_scale && - MEDAL_COLORS.includes(this._manifest.quality_scale) + Object.keys(QUALITY_SCALE_MAP).includes( + this._manifest.quality_scale + ) ? html`
- - - ${this.hass.localize( - `ui.panel.config.integrations.config_entry.${this._manifest.quality_scale as MedalColor}_quality` - )} - - + + ${this.hass.localize( + QUALITY_SCALE_MAP[this._manifest.quality_scale] + .translationKey + )} +
` : nothing} @@ -376,9 +373,18 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { class="warning" path=${mdiPackageVariant} > - ${this.hass.localize( - "ui.panel.config.integrations.config_entry.custom_integration" - )} + + ${this.hass.localize( + "ui.panel.config.integrations.config_entry.custom_integration" + )} + ` : nothing} ${this._manifest?.iot_class?.startsWith("cloud_") @@ -1532,18 +1538,25 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { 100%; animation: shimmer 2.5s infinite; } - ha-svg-icon.bronze-medal { + ha-svg-icon.bronze-quality { color: #cd7f32; } - ha-svg-icon.silver-medal { + ha-svg-icon.silver-quality { color: silver; } - ha-svg-icon.gold-medal { + ha-svg-icon.gold-quality { color: gold; } - ha-svg-icon.platinum-medal { + ha-svg-icon.platinum-quality { color: #727272; } + ha-svg-icon.internal-quality { + color: var(--primary-color); + } + ha-svg-icon.legacy-quality { + color: var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38)); + animation: unset; + } ha-md-list-item { position: relative; } diff --git a/src/translations/en.json b/src/translations/en.json index 99877d80af..774479f15f 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -4505,6 +4505,8 @@ } }, "custom_integration": "Custom integration", + "internal_integration": "Internal integration", + "legacy_integration": "Legacy integration", "custom_overwrites_core": "Custom integration that replaces a core component", "depends_on_cloud": "Depends on Internet connection", "yaml_only": "This integration cannot be setup from the UI",