From 3aaf08ac0327b0d5225c5467b468eac65c15f6c2 Mon Sep 17 00:00:00 2001 From: Steve Repsher Date: Mon, 16 Dec 2024 08:22:53 -0500 Subject: [PATCH] Defer loading of fallback domain icons (#23298) --- src/common/const.ts | 109 ----------------------------- src/components/ha-domain-icon.ts | 11 +-- src/components/ha-service-icon.ts | 9 ++- src/components/ha-state-icon.ts | 9 ++- src/data/icons.ts | 112 +++++++++++++++++++++++++++++- 5 files changed, 129 insertions(+), 121 deletions(-) diff --git a/src/common/const.ts b/src/common/const.ts index d7286080d3..061adf875d 100644 --- a/src/common/const.ts +++ b/src/common/const.ts @@ -1,118 +1,9 @@ /** Constants to be used in the frontend. */ -import { - mdiAccount, - mdiAirFilter, - mdiAlert, - mdiAppleSafari, - mdiBell, - mdiBookmark, - mdiBullhorn, - mdiButtonPointer, - mdiCalendar, - mdiCalendarClock, - mdiChatSleep, - mdiClipboardList, - mdiClock, - mdiCog, - mdiCommentAlert, - mdiCounter, - mdiEye, - mdiFlower, - mdiFormatListBulleted, - mdiFormTextbox, - mdiForumOutline, - mdiGoogleAssistant, - mdiGoogleCirclesCommunities, - mdiHomeAutomation, - mdiImage, - mdiImageFilterFrames, - mdiLightbulb, - mdiMapMarkerRadius, - mdiMicrophoneMessage, - mdiPalette, - mdiRayVertex, - mdiRemote, - mdiRobot, - mdiRobotMower, - mdiRobotVacuum, - mdiRoomService, - mdiScriptText, - mdiSpeakerMessage, - mdiThermostat, - mdiTimerOutline, - mdiToggleSwitch, - mdiWeatherPartlyCloudy, - mdiWhiteBalanceSunny, -} from "@mdi/js"; - -import { mdiHomeAssistant } from "../resources/home-assistant-logo-svg"; - // Constants should be alphabetically sorted by name. // Arrays with values should be alphabetically sorted if order doesn't matter. // Each constant should have a description what it is supposed to be used for. -/** Icon to use when no icon specified for service. */ -export const DEFAULT_SERVICE_ICON = mdiRoomService; - -/** Icon to use when no icon specified for domain. */ -export const DEFAULT_DOMAIN_ICON = mdiBookmark; - -/** Icons for each domain */ -export const FIXED_DOMAIN_ICONS = { - air_quality: mdiAirFilter, - alert: mdiAlert, - automation: mdiRobot, - calendar: mdiCalendar, - climate: mdiThermostat, - configurator: mdiCog, - conversation: mdiForumOutline, - counter: mdiCounter, - date: mdiCalendar, - datetime: mdiCalendarClock, - demo: mdiHomeAssistant, - device_tracker: mdiAccount, - google_assistant: mdiGoogleAssistant, - group: mdiGoogleCirclesCommunities, - homeassistant: mdiHomeAssistant, - homekit: mdiHomeAutomation, - image_processing: mdiImageFilterFrames, - image: mdiImage, - input_boolean: mdiToggleSwitch, - input_button: mdiButtonPointer, - input_datetime: mdiCalendarClock, - input_number: mdiRayVertex, - input_select: mdiFormatListBulleted, - input_text: mdiFormTextbox, - lawn_mower: mdiRobotMower, - light: mdiLightbulb, - notify: mdiCommentAlert, - number: mdiRayVertex, - persistent_notification: mdiBell, - person: mdiAccount, - plant: mdiFlower, - proximity: mdiAppleSafari, - remote: mdiRemote, - scene: mdiPalette, - schedule: mdiCalendarClock, - script: mdiScriptText, - select: mdiFormatListBulleted, - sensor: mdiEye, - simple_alarm: mdiBell, - siren: mdiBullhorn, - stt: mdiMicrophoneMessage, - sun: mdiWhiteBalanceSunny, - text: mdiFormTextbox, - time: mdiClock, - timer: mdiTimerOutline, - todo: mdiClipboardList, - tts: mdiSpeakerMessage, - vacuum: mdiRobotVacuum, - wake_word: mdiChatSleep, - weather: mdiWeatherPartlyCloudy, - zone: mdiMapMarkerRadius, -}; - /** Domains that have a state card. */ export const DOMAINS_WITH_CARD = [ "alert", diff --git a/src/components/ha-domain-icon.ts b/src/components/ha-domain-icon.ts index 301a5cb1ea..5d71a0c8f8 100644 --- a/src/components/ha-domain-icon.ts +++ b/src/components/ha-domain-icon.ts @@ -2,8 +2,11 @@ import type { CSSResultGroup } from "lit"; import { css, html, LitElement, nothing } from "lit"; import { customElement, property } from "lit/decorators"; import { until } from "lit/directives/until"; -import { DEFAULT_DOMAIN_ICON, FIXED_DOMAIN_ICONS } from "../common/const"; -import { domainIcon } from "../data/icons"; +import { + DEFAULT_DOMAIN_ICON, + domainIcon, + FALLBACK_DOMAIN_ICONS, +} from "../data/icons"; import type { HomeAssistant } from "../types"; import { brandsUrl } from "../util/brands-url"; import "./ha-icon"; @@ -47,9 +50,9 @@ export class HaDomainIcon extends LitElement { } private _renderFallback() { - if (this.domain! in FIXED_DOMAIN_ICONS) { + if (this.domain! in FALLBACK_DOMAIN_ICONS) { return html` - + `; } if (this.brandFallback) { diff --git a/src/components/ha-service-icon.ts b/src/components/ha-service-icon.ts index 54d723acdb..dabf27f4b9 100644 --- a/src/components/ha-service-icon.ts +++ b/src/components/ha-service-icon.ts @@ -1,9 +1,12 @@ import { html, LitElement, nothing } from "lit"; import { customElement, property } from "lit/decorators"; import { until } from "lit/directives/until"; -import { DEFAULT_SERVICE_ICON, FIXED_DOMAIN_ICONS } from "../common/const"; import { computeDomain } from "../common/entity/compute_domain"; -import { serviceIcon } from "../data/icons"; +import { + DEFAULT_SERVICE_ICON, + FALLBACK_DOMAIN_ICONS, + serviceIcon, +} from "../data/icons"; import type { HomeAssistant } from "../types"; import "./ha-icon"; import "./ha-svg-icon"; @@ -44,7 +47,7 @@ export class HaServiceIcon extends LitElement { return html` `; } diff --git a/src/components/ha-state-icon.ts b/src/components/ha-state-icon.ts index 41421db68f..66fc35cd45 100644 --- a/src/components/ha-state-icon.ts +++ b/src/components/ha-state-icon.ts @@ -2,9 +2,12 @@ import type { HassEntity } from "home-assistant-js-websocket"; import { html, LitElement, nothing } from "lit"; import { customElement, property } from "lit/decorators"; import { until } from "lit/directives/until"; -import { DEFAULT_DOMAIN_ICON, FIXED_DOMAIN_ICONS } from "../common/const"; import { computeStateDomain } from "../common/entity/compute_state_domain"; -import { entityIcon } from "../data/icons"; +import { + DEFAULT_DOMAIN_ICON, + entityIcon, + FALLBACK_DOMAIN_ICONS, +} from "../data/icons"; import type { HomeAssistant } from "../types"; import "./ha-icon"; import "./ha-svg-icon"; @@ -49,7 +52,7 @@ export class HaStateIcon extends LitElement { return html` `; } diff --git a/src/data/icons.ts b/src/data/icons.ts index 2f22a0850c..c46ea561ad 100644 --- a/src/data/icons.ts +++ b/src/data/icons.ts @@ -1,4 +1,51 @@ +import { + mdiAccount, + mdiAirFilter, + mdiAlert, + mdiAppleSafari, + mdiBell, + mdiBookmark, + mdiBullhorn, + mdiButtonPointer, + mdiCalendar, + mdiCalendarClock, + mdiChatSleep, + mdiClipboardList, + mdiClock, + mdiCog, + mdiCommentAlert, + mdiCounter, + mdiEye, + mdiFlower, + mdiFormatListBulleted, + mdiFormTextbox, + mdiForumOutline, + mdiGoogleAssistant, + mdiGoogleCirclesCommunities, + mdiHomeAutomation, + mdiImage, + mdiImageFilterFrames, + mdiLightbulb, + mdiMapMarkerRadius, + mdiMicrophoneMessage, + mdiPalette, + mdiRayVertex, + mdiRemote, + mdiRobot, + mdiRobotMower, + mdiRobotVacuum, + mdiRoomService, + mdiScriptText, + mdiSpeakerMessage, + mdiThermostat, + mdiTimerOutline, + mdiToggleSwitch, + mdiWeatherPartlyCloudy, + mdiWhiteBalanceSunny, +} from "@mdi/js"; import type { HassEntity } from "home-assistant-js-websocket"; +import { isComponentLoaded } from "../common/config/is_component_loaded"; +import { atLeastVersion } from "../common/config/version"; import { computeDomain } from "../common/entity/compute_domain"; import { computeObjectId } from "../common/entity/compute_object_id"; import { computeStateDomain } from "../common/entity/compute_state_domain"; @@ -8,8 +55,69 @@ import type { EntityRegistryDisplayEntry, EntityRegistryEntry, } from "./entity_registry"; -import { isComponentLoaded } from "../common/config/is_component_loaded"; -import { atLeastVersion } from "../common/config/version"; + +import { mdiHomeAssistant } from "../resources/home-assistant-logo-svg"; + +/** Icon to use when no icon specified for service. */ +export const DEFAULT_SERVICE_ICON = mdiRoomService; + +/** Icon to use when no icon specified for domain. */ +export const DEFAULT_DOMAIN_ICON = mdiBookmark; + +/** Fallback icons for each domain */ +export const FALLBACK_DOMAIN_ICONS = { + air_quality: mdiAirFilter, + alert: mdiAlert, + automation: mdiRobot, + calendar: mdiCalendar, + climate: mdiThermostat, + configurator: mdiCog, + conversation: mdiForumOutline, + counter: mdiCounter, + date: mdiCalendar, + datetime: mdiCalendarClock, + demo: mdiHomeAssistant, + device_tracker: mdiAccount, + google_assistant: mdiGoogleAssistant, + group: mdiGoogleCirclesCommunities, + homeassistant: mdiHomeAssistant, + homekit: mdiHomeAutomation, + image_processing: mdiImageFilterFrames, + image: mdiImage, + input_boolean: mdiToggleSwitch, + input_button: mdiButtonPointer, + input_datetime: mdiCalendarClock, + input_number: mdiRayVertex, + input_select: mdiFormatListBulleted, + input_text: mdiFormTextbox, + lawn_mower: mdiRobotMower, + light: mdiLightbulb, + notify: mdiCommentAlert, + number: mdiRayVertex, + persistent_notification: mdiBell, + person: mdiAccount, + plant: mdiFlower, + proximity: mdiAppleSafari, + remote: mdiRemote, + scene: mdiPalette, + schedule: mdiCalendarClock, + script: mdiScriptText, + select: mdiFormatListBulleted, + sensor: mdiEye, + simple_alarm: mdiBell, + siren: mdiBullhorn, + stt: mdiMicrophoneMessage, + sun: mdiWhiteBalanceSunny, + text: mdiFormTextbox, + time: mdiClock, + timer: mdiTimerOutline, + todo: mdiClipboardList, + tts: mdiSpeakerMessage, + vacuum: mdiRobotVacuum, + wake_word: mdiChatSleep, + weather: mdiWeatherPartlyCloudy, + zone: mdiMapMarkerRadius, +}; const resources: { entity: Record>;