Skip to content

Commit

Permalink
Add internal, legacy to IQS (#23040)
Browse files Browse the repository at this point in the history
  • Loading branch information
wendevlin authored and bramkragten committed Nov 28, 2024
1 parent 239cad9 commit 1edfec0
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 35 deletions.
9 changes: 5 additions & 4 deletions src/data/integration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,13 @@ export interface IntegrationManifest {
loggers?: string[];
quality_scale?:
| "bronze"
| "silver"
| "gold"
| "internal"
| "platinum"
| "silver"
| "custom"
| "no_score";
| "no_score"
| "internal"
| "legacy"
| "custom";
iot_class:
| "assumed_state"
| "cloud_polling"
Expand Down
39 changes: 39 additions & 0 deletions src/data/integration_quality_scale.ts
Original file line number Diff line number Diff line change
@@ -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",
},
};
75 changes: 44 additions & 31 deletions src/panels/config/integrations/ha-config-integration-page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import {
mdiDownload,
mdiFileCodeOutline,
mdiHandExtendedOutline,
mdiMedal,
mdiOpenInNew,
mdiPackageVariant,
mdiPlayCircleOutline,
Expand All @@ -23,7 +22,6 @@ import {
mdiRenameBox,
mdiShapeOutline,
mdiStopCircleOutline,
mdiTrophy,
mdiWeb,
mdiWrench,
} from "@mdi/js";
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -344,29 +340,30 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) {
? html`<div class="version">${this._manifest.version}</div>`
: nothing}
${this._manifest?.quality_scale &&
MEDAL_COLORS.includes(this._manifest.quality_scale)
Object.keys(QUALITY_SCALE_MAP).includes(
this._manifest.quality_scale
)
? html`
<div class="quality-scale integration-info">
<ha-svg-icon
class=${`${this._manifest.quality_scale}-medal`}
.path=${this._manifest.quality_scale === "platinum"
? mdiTrophy
: mdiMedal}
class=${`${this._manifest.quality_scale}-quality`}
.path=${QUALITY_SCALE_MAP[
this._manifest.quality_scale
].icon}
></ha-svg-icon>
<span>
<a
href=${documentationUrl(
this.hass,
`/docs/quality_scale/#-${this._manifest.quality_scale}`
)}
rel="noopener noreferrer"
target="_blank"
>
${this.hass.localize(
`ui.panel.config.integrations.config_entry.${this._manifest.quality_scale as MedalColor}_quality`
)}
</a>
</span>
<a
href=${documentationUrl(
this.hass,
`/docs/quality_scale/#-${this._manifest.quality_scale}`
)}
rel="noopener noreferrer"
target="_blank"
>
${this.hass.localize(
QUALITY_SCALE_MAP[this._manifest.quality_scale]
.translationKey
)}
</a>
</div>
`
: nothing}
Expand All @@ -376,9 +373,18 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) {
class="warning"
path=${mdiPackageVariant}
></ha-svg-icon>
${this.hass.localize(
"ui.panel.config.integrations.config_entry.custom_integration"
)}
<a
href=${documentationUrl(
this.hass,
`/docs/quality_scale/#-custom`
)}
rel="noopener noreferrer"
target="_blank"
>
${this.hass.localize(
"ui.panel.config.integrations.config_entry.custom_integration"
)}
</a>
</div>`
: nothing}
${this._manifest?.iot_class?.startsWith("cloud_")
Expand Down Expand Up @@ -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;
}
Expand Down
2 changes: 2 additions & 0 deletions src/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down

0 comments on commit 1edfec0

Please sign in to comment.