Improve UX for counter and input_number helpers (#9061)

This commit is contained in:
Michael 2021-05-11 10:52:44 +02:00 committed by GitHub
parent 3575d94ca1
commit 4e1d10cc08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 25 additions and 13 deletions

View File

@ -224,12 +224,15 @@ export const computeHistory = (
if (stateWithUnit) { if (stateWithUnit) {
unit = stateWithUnit.attributes.unit_of_measurement; unit = stateWithUnit.attributes.unit_of_measurement;
} else if (computeStateDomain(stateInfo[0]) === "climate") { } else {
unit = hass.config.unit_system.temperature; unit = {
} else if (computeStateDomain(stateInfo[0]) === "water_heater") { climate: hass.config.unit_system.temperature,
unit = hass.config.unit_system.temperature; counter: "#",
} else if (computeStateDomain(stateInfo[0]) === "humidifier") { humidifier: "%",
unit = "%"; input_number: "#",
number: "#",
water_heater: hass.config.unit_system.temperature,
}[computeStateDomain(stateInfo[0])];
} }
if (!unit) { if (!unit) {

View File

@ -44,7 +44,7 @@ class HuiGaugeCard extends LitElement implements LovelaceCard {
entities: string[], entities: string[],
entitiesFallback: string[] entitiesFallback: string[]
): GaugeCardConfig { ): GaugeCardConfig {
const includeDomains = ["sensor"]; const includeDomains = ["counter", "input_number", "number", "sensor"];
const maxEntities = 1; const maxEntities = 1;
const entityFilter = (stateObj: HassEntity): boolean => const entityFilter = (stateObj: HassEntity): boolean =>
!isNaN(Number(stateObj.state)); !isNaN(Number(stateObj.state));

View File

@ -1,4 +1,5 @@
import { HassEntity } from "home-assistant-js-websocket/dist/types"; import { HassEntity } from "home-assistant-js-websocket/dist/types";
import { computeDomain } from "../../../common/entity/compute_domain";
import { customElement } from "lit-element"; import { customElement } from "lit-element";
import { HomeAssistant } from "../../../types"; import { HomeAssistant } from "../../../types";
import { findEntities } from "../common/find-entities"; import { findEntities } from "../common/find-entities";
@ -7,6 +8,8 @@ import { LovelaceCardEditor } from "../types";
import { HuiEntityCard } from "./hui-entity-card"; import { HuiEntityCard } from "./hui-entity-card";
import { EntityCardConfig, SensorCardConfig } from "./types"; import { EntityCardConfig, SensorCardConfig } from "./types";
const includeDomains = ["counter", "input_number", "number", "sensor"];
@customElement("hui-sensor-card") @customElement("hui-sensor-card")
class HuiSensorCard extends HuiEntityCard { class HuiSensorCard extends HuiEntityCard {
public static async getConfigElement(): Promise<LovelaceCardEditor> { public static async getConfigElement(): Promise<LovelaceCardEditor> {
@ -19,7 +22,6 @@ class HuiSensorCard extends HuiEntityCard {
entities: string[], entities: string[],
entitiesFallback: string[] entitiesFallback: string[]
): SensorCardConfig { ): SensorCardConfig {
const includeDomains = ["sensor"];
const maxEntities = 1; const maxEntities = 1;
const entityFilter = (stateObj: HassEntity): boolean => const entityFilter = (stateObj: HassEntity): boolean =>
!isNaN(Number(stateObj.state)) && !isNaN(Number(stateObj.state)) &&
@ -38,7 +40,10 @@ class HuiSensorCard extends HuiEntityCard {
} }
public setConfig(config: SensorCardConfig): void { public setConfig(config: SensorCardConfig): void {
if (!config.entity || config.entity.split(".")[0] !== "sensor") { if (
!config.entity ||
!includeDomains.includes(computeDomain(config.entity))
) {
throw new Error("Specify an entity from within the sensor domain"); throw new Error("Specify an entity from within the sensor domain");
} }

View File

@ -33,7 +33,7 @@ const cardConfigStruct = object({
theme: optional(string()), theme: optional(string()),
}); });
const includeDomains = ["sensor"]; const includeDomains = ["counter", "input_number", "number", "sensor"];
@customElement("hui-gauge-card-editor") @customElement("hui-gauge-card-editor")
export class HuiGaugeCardEditor export class HuiGaugeCardEditor

View File

@ -37,7 +37,7 @@ const cardConfigStruct = object({
hours_to_show: optional(number()), hours_to_show: optional(number()),
}); });
const includeDomains = ["sensor"]; const includeDomains = ["counter", "input_number", "number", "sensor"];
@customElement("hui-sensor-card-editor") @customElement("hui-sensor-card-editor")
export class HuiSensorCardEditor export class HuiSensorCardEditor

View File

@ -12,6 +12,7 @@ import {
} from "lit-element"; } from "lit-element";
import "../../../components/ha-circular-progress"; import "../../../components/ha-circular-progress";
import { fetchRecent } from "../../../data/history"; import { fetchRecent } from "../../../data/history";
import { computeDomain } from "../../../common/entity/compute_domain";
import { HomeAssistant } from "../../../types"; import { HomeAssistant } from "../../../types";
import { findEntities } from "../common/find-entities"; import { findEntities } from "../common/find-entities";
import { coordinates } from "../common/graph/coordinates"; import { coordinates } from "../common/graph/coordinates";
@ -22,6 +23,7 @@ import { GraphHeaderFooterConfig } from "./types";
const MINUTE = 60000; const MINUTE = 60000;
const HOUR = MINUTE * 60; const HOUR = MINUTE * 60;
const includeDomains = ["counter", "input_number", "number", "sensor"];
@customElement("hui-graph-header-footer") @customElement("hui-graph-header-footer")
export class HuiGraphHeaderFooter export class HuiGraphHeaderFooter
@ -37,7 +39,6 @@ export class HuiGraphHeaderFooter
entities: string[], entities: string[],
entitiesFallback: string[] entitiesFallback: string[]
): GraphHeaderFooterConfig { ): GraphHeaderFooterConfig {
const includeDomains = ["sensor"];
const maxEntities = 1; const maxEntities = 1;
const entityFilter = (stateObj: HassEntity): boolean => const entityFilter = (stateObj: HassEntity): boolean =>
!isNaN(Number(stateObj.state)) && !isNaN(Number(stateObj.state)) &&
@ -75,7 +76,10 @@ export class HuiGraphHeaderFooter
} }
public setConfig(config: GraphHeaderFooterConfig): void { public setConfig(config: GraphHeaderFooterConfig): void {
if (!config?.entity || config.entity.split(".")[0] !== "sensor") { if (
!config?.entity ||
!includeDomains.includes(computeDomain(config.entity))
) {
throw new Error("Specify an entity from within the sensor domain"); throw new Error("Specify an entity from within the sensor domain");
} }