From 41d3c1efc09b42b7449d250deb07551b601c6638 Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Wed, 11 Dec 2024 08:57:56 +0100 Subject: [PATCH] Remove default --- src/data/entity_registry.ts | 1 - src/data/icons.ts | 10 +- .../dialogs/dialog-entity-state-icon.ts | 99 +++++++++++++++---- .../dialogs/show-dialog-entity-state-icon.ts | 2 +- .../entity-registry-settings-editor.ts | 13 ++- 5 files changed, 91 insertions(+), 34 deletions(-) diff --git a/src/data/entity_registry.ts b/src/data/entity_registry.ts index 35fa3ac7a1..63e9528ead 100644 --- a/src/data/entity_registry.ts +++ b/src/data/entity_registry.ts @@ -13,7 +13,6 @@ import type { RegistryEntry } from "./registry"; type EntityCategory = "config" | "diagnostic"; export type EntityRegistryIcon = { - default: string; state?: Record; }; diff --git a/src/data/icons.ts b/src/data/icons.ts index 9a4a018d0c..2da3bbb580 100644 --- a/src/data/icons.ts +++ b/src/data/icons.ts @@ -189,7 +189,9 @@ export const entityIcon = async ( return entry.icon; } const state = stateValue ?? stateObj.state; - return entry.icon.state?.[state] || entry.icon.default; + if (entry.icon.state?.[state]) { + return entry.icon.state?.[state]; + } } if (stateObj?.attributes.icon) { @@ -205,15 +207,15 @@ export const entryIcon = async ( hass: HomeAssistant, entry: EntityRegistryEntry | EntityRegistryDisplayEntry ) => { - if (entry.icon) { - return typeof entry.icon === "string" ? entry.icon : entry.icon.default; + if (entry.icon && typeof entry.icon === "string") { + return entry.icon; } const stateObj = hass.states[entry.entity_id] as HassEntity | undefined; const domain = computeDomain(entry.entity_id); return getEntityIcon(hass, domain, stateObj, undefined, entry); }; -const getEntityIcon = async ( +export const getEntityIcon = async ( hass: HomeAssistant, domain: string, stateObj?: HassEntity, diff --git a/src/panels/config/entities/dialogs/dialog-entity-state-icon.ts b/src/panels/config/entities/dialogs/dialog-entity-state-icon.ts index 55f302eeb9..f5c533e927 100644 --- a/src/panels/config/entities/dialogs/dialog-entity-state-icon.ts +++ b/src/panels/config/entities/dialogs/dialog-entity-state-icon.ts @@ -1,18 +1,22 @@ -import { css, CSSResultGroup, html, LitElement, nothing } from "lit"; +import type { CSSResultGroup } from "lit"; +import { css, html, LitElement, nothing } from "lit"; import { customElement, property, state } from "lit/decorators"; +import { until } from "lit/directives/until"; import { fireEvent } from "../../../../common/dom/fire_event"; -import "../../../../components/ha-button"; +import { computeStateDomain } from "../../../../common/entity/compute_state_domain"; +import { getStates } from "../../../../common/entity/get_states"; import "../../../../components/ha-alert"; import "../../../../components/ha-area-picker"; +import "../../../../components/ha-button"; import "../../../../components/ha-dialog"; import "../../../../components/ha-labels-picker"; import "../../../../components/ha-textfield"; import "../../../../components/ha-yaml-editor"; -import { EntityRegistryIcon } from "../../../../data/entity_registry"; -import { entryIcon } from "../../../../data/icons"; +import type { EntityRegistryIcon } from "../../../../data/entity_registry"; +import { getEntityIcon } from "../../../../data/icons"; import { haStyle, haStyleDialog } from "../../../../resources/styles"; -import { HomeAssistant } from "../../../../types"; -import { EntityStateIconDialogParams } from "./show-dialog-entity-state-icon"; +import type { HomeAssistant } from "../../../../types"; +import type { EntityStateIconDialogParams } from "./show-dialog-entity-state-icon"; @customElement("dialog-entity-state-icon") class DialogEntityStateIcon extends LitElement { @@ -29,13 +33,7 @@ class DialogEntityStateIcon extends LitElement { const icon = this._params.icon; - this._config = - typeof icon === "object" - ? icon - : { - default: - icon || (await entryIcon(this.hass, this._params.entry)) || "", - }; + this._config = typeof icon === "object" ? icon : {}; await this.updateComplete; } @@ -46,21 +44,47 @@ class DialogEntityStateIcon extends LitElement { fireEvent(this, "dialog-closed", { dialog: this.localName }); } + private get _states() { + const entity = this.hass.states[this._params!.entry.entity_id]; + const states = getStates(entity); + return states.filter((s) => !["unknown", "unavailable"].includes(s)); + } + protected render() { - if (!this._params) { + if (!this._params || !this._config) { return nothing; } + const stateObj = this.hass.states[this._params.entry.entity_id]; + + const domain = computeStateDomain(stateObj); + return html` - + ${this._states.map((s) => { + const value = this._config?.state?.[s]; + + const placeholder = until( + getEntityIcon(this.hass, domain, stateObj, s, this._params!.entry) + ); + + return html` +
+

${this.hass.formatEntityState(stateObj, s)}

+ +
+ `; + })} { @@ -102,7 +141,25 @@ class DialogEntityStateIcon extends LitElement { } static get styles(): CSSResultGroup { - return [haStyle, haStyleDialog, css``]; + return [ + haStyle, + haStyleDialog, + css` + .row { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 100%; + } + .row p { + width: 100px; + } + .row ha-icon-picker { + flex: 1; + } + `, + ]; } } diff --git a/src/panels/config/entities/dialogs/show-dialog-entity-state-icon.ts b/src/panels/config/entities/dialogs/show-dialog-entity-state-icon.ts index 859b4e465d..bdd8a84189 100644 --- a/src/panels/config/entities/dialogs/show-dialog-entity-state-icon.ts +++ b/src/panels/config/entities/dialogs/show-dialog-entity-state-icon.ts @@ -1,5 +1,5 @@ import { fireEvent } from "../../../../common/dom/fire_event"; -import { +import type { EntityRegistryEntry, EntityRegistryIcon, } from "../../../../data/entity_registry"; diff --git a/src/panels/config/entities/entity-registry-settings-editor.ts b/src/panels/config/entities/entity-registry-settings-editor.ts index 24bdc91640..23e344489b 100644 --- a/src/panels/config/entities/entity-registry-settings-editor.ts +++ b/src/panels/config/entities/entity-registry-settings-editor.ts @@ -1,6 +1,6 @@ import "@material/mwc-button/mwc-button"; import "@material/mwc-formfield/mwc-formfield"; -import { mdiCog, mdiContentCopy } from "@mdi/js"; +import { mdiBrush, mdiContentCopy } from "@mdi/js"; import type { HassEntity } from "home-assistant-js-websocket"; import type { CSSResultGroup, PropertyValues } from "lit"; import { css, html, LitElement, nothing } from "lit"; @@ -374,12 +374,11 @@ export class EntityRegistrySettingsEditor extends LitElement { > ${useStateIcon ? html` - + .hass=${this.hass} + .stateObj=${stateObj} + > ` : !this._icon && !stateObj?.attributes.icon && stateObj ? html` @@ -392,7 +391,7 @@ export class EntityRegistrySettingsEditor extends LitElement { : nothing}