diff --git a/src/common/entity/compute_state_display.ts b/src/common/entity/compute_state_display.ts index 2159a4e69a..80ce88aa85 100644 --- a/src/common/entity/compute_state_display.ts +++ b/src/common/entity/compute_state_display.ts @@ -4,32 +4,24 @@ import { formatDateTime } from "../datetime/format_date_time"; import { formatTime } from "../datetime/format_time"; import { LocalizeFunc } from "../translations/localize"; import { computeStateDomain } from "./compute_state_domain"; +import { UNKNOWN, UNAVAILABLE } from "../../data/entity"; export const computeStateDisplay = ( localize: LocalizeFunc, stateObj: HassEntity, language: string ): string => { - let display: string | undefined; + if (stateObj.state === UNKNOWN || stateObj.state === UNAVAILABLE) { + return localize(`state.default.${stateObj.state}`); + } + + if (stateObj.attributes.unit_of_measurement) { + return `${stateObj.state} ${stateObj.attributes.unit_of_measurement}`; + } + const domain = computeStateDomain(stateObj); - if (domain === "binary_sensor") { - // Try device class translation, then default binary sensor translation - if (stateObj.attributes.device_class) { - display = localize( - `state.${domain}.${stateObj.attributes.device_class}.${stateObj.state}` - ); - } - - if (!display) { - display = localize(`state.${domain}.default.${stateObj.state}`); - } - } else if ( - stateObj.attributes.unit_of_measurement && - !["unknown", "unavailable"].includes(stateObj.state) - ) { - display = stateObj.state + " " + stateObj.attributes.unit_of_measurement; - } else if (domain === "input_datetime") { + if (domain === "input_datetime") { let date: Date; if (!stateObj.attributes.has_time) { date = new Date( @@ -37,8 +29,9 @@ export const computeStateDisplay = ( stateObj.attributes.month - 1, stateObj.attributes.day ); - display = formatDate(date, language); - } else if (!stateObj.attributes.has_date) { + return formatDate(date, language); + } + if (!stateObj.attributes.has_date) { const now = new Date(); date = new Date( // Due to bugs.chromium.org/p/chromium/issues/detail?id=797548 @@ -49,38 +42,22 @@ export const computeStateDisplay = ( stateObj.attributes.hour, stateObj.attributes.minute ); - display = formatTime(date, language); - } else { - date = new Date( - stateObj.attributes.year, - stateObj.attributes.month - 1, - stateObj.attributes.day, - stateObj.attributes.hour, - stateObj.attributes.minute - ); - display = formatDateTime(date, language); + return formatTime(date, language); } - } else if (domain === "zwave") { - if (["initializing", "dead"].includes(stateObj.state)) { - display = localize( - `state.zwave.query_stage.${stateObj.state}`, - "query_stage", - stateObj.attributes.query_stage - ); - } else { - display = localize(`state.zwave.default.${stateObj.state}`); - } - } else { - display = localize(`state.${domain}.${stateObj.state}`); + + date = new Date( + stateObj.attributes.year, + stateObj.attributes.month - 1, + stateObj.attributes.day, + stateObj.attributes.hour, + stateObj.attributes.minute + ); + return formatDateTime(date, language); } - // Fall back to default, component backend translation, or raw state if nothing else matches. - if (!display) { - display = - localize(`state.default.${stateObj.state}`) || - localize(`component.${domain}.state.${stateObj.state}`) || - stateObj.state; - } - - return display; + const deviceClass = stateObj.attributes.device_class || "_"; + return ( + localize(`component.${domain}.state.${deviceClass}.${stateObj.state}`) || + stateObj.state + ); }; diff --git a/src/components/entity/ha-state-label-badge.ts b/src/components/entity/ha-state-label-badge.ts index bc734dfd57..b268b89ebc 100644 --- a/src/components/entity/ha-state-label-badge.ts +++ b/src/components/entity/ha-state-label-badge.ts @@ -18,6 +18,7 @@ import { stateIcon } from "../../common/entity/state_icon"; import { timerTimeRemaining } from "../../common/entity/timer_time_remaining"; import { HomeAssistant } from "../../types"; import "../ha-label-badge"; +import { computeStateDisplay } from "../../common/entity/compute_state_display"; @customElement("ha-state-label-badge") export class HaStateLabelBadge extends LitElement { @@ -108,8 +109,13 @@ export class HaStateLabelBadge extends LitElement { default: return state.state === "unknown" ? "-" - : this.hass!.localize(`component.${domain}.state.${state.state}`) || - state.state; + : state.attributes.unit_of_measurement + ? state.state + : computeStateDisplay( + this.hass!.localize, + state, + this.hass!.language + ); } } diff --git a/src/panels/config/zwave/ha-config-zwave.js b/src/panels/config/zwave/ha-config-zwave.js index 16f0522d37..1315a73288 100644 --- a/src/panels/config/zwave/ha-config-zwave.js +++ b/src/panels/config/zwave/ha-config-zwave.js @@ -92,7 +92,7 @@ class HaConfigZwave extends LocalizeMixin(EventsMixin(PolymerElement)) { on-click="_backTapped" >