Fetch number units from core (#15175)

This commit is contained in:
Erik Montnemery 2023-01-24 12:14:21 +01:00 committed by GitHub
parent 624bfbbaf1
commit 5e9ae36577
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 6 deletions

12
src/data/number.ts Normal file
View File

@ -0,0 +1,12 @@
import { HomeAssistant } from "../types";
export type NumberDeviceClassUnits = { units: string[] };
export const getNumberDeviceClassConvertibleUnits = (
hass: HomeAssistant,
deviceClass: string
): Promise<NumberDeviceClassUnits> =>
hass.callWS({
type: "number/device_class_convertible_units",
device_class: deviceClass,
});

View File

@ -67,6 +67,7 @@ import {
updateEntityRegistryEntry, updateEntityRegistryEntry,
} from "../../../data/entity_registry"; } from "../../../data/entity_registry";
import { domainToName } from "../../../data/integration"; import { domainToName } from "../../../data/integration";
import { getNumberDeviceClassConvertibleUnits } from "../../../data/number";
import { getSensorDeviceClassConvertibleUnits } from "../../../data/sensor"; import { getSensorDeviceClassConvertibleUnits } from "../../../data/sensor";
import { showOptionsFlowDialog } from "../../../dialogs/config-flow/show-dialog-options-flow"; import { showOptionsFlowDialog } from "../../../dialogs/config-flow/show-dialog-options-flow";
import { import {
@ -114,10 +115,6 @@ const OVERRIDE_DEVICE_CLASSES = {
], ],
}; };
const OVERRIDE_NUMBER_UNITS = {
temperature: ["°C", "°F", "K"],
};
const OVERRIDE_WEATHER_UNITS = { const OVERRIDE_WEATHER_UNITS = {
precipitation: ["mm", "in"], precipitation: ["mm", "in"],
pressure: ["hPa", "mbar", "mmHg", "inHg"], pressure: ["hPa", "mbar", "mmHg", "inHg"],
@ -172,6 +169,8 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) {
@state() private _cameraPrefs?: CameraPreferences; @state() private _cameraPrefs?: CameraPreferences;
@state() private _numberDeviceClassConvertibleUnits?: string[];
@state() private _sensorDeviceClassConvertibleUnits?: string[]; @state() private _sensorDeviceClassConvertibleUnits?: string[];
private _origEntityId!: string; private _origEntityId!: string;
@ -281,6 +280,15 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) {
if (changedProps.has("_deviceClass")) { if (changedProps.has("_deviceClass")) {
const domain = computeDomain(this.entry.entity_id); const domain = computeDomain(this.entry.entity_id);
if (domain === "number" && this._deviceClass) {
const { units } = await getNumberDeviceClassConvertibleUnits(
this.hass,
this._deviceClass
);
this._numberDeviceClassConvertibleUnits = units;
} else {
this._numberDeviceClassConvertibleUnits = [];
}
if (domain === "sensor" && this._deviceClass) { if (domain === "sensor" && this._deviceClass) {
const { units } = await getSensorDeviceClassConvertibleUnits( const { units } = await getSensorDeviceClassConvertibleUnits(
this.hass, this.hass,
@ -412,7 +420,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) {
${domain === "number" && ${domain === "number" &&
this._deviceClass && this._deviceClass &&
stateObj?.attributes.unit_of_measurement && stateObj?.attributes.unit_of_measurement &&
OVERRIDE_NUMBER_UNITS[this._deviceClass]?.includes( this._numberDeviceClassConvertibleUnits?.includes(
stateObj?.attributes.unit_of_measurement stateObj?.attributes.unit_of_measurement
) )
? html` ? html`
@ -426,7 +434,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) {
@selected=${this._unitChanged} @selected=${this._unitChanged}
@closed=${stopPropagation} @closed=${stopPropagation}
> >
${OVERRIDE_NUMBER_UNITS[this._deviceClass].map( ${this._numberDeviceClassConvertibleUnits.map(
(unit: string) => html` (unit: string) => html`
<mwc-list-item .value=${unit}>${unit}</mwc-list-item> <mwc-list-item .value=${unit}>${unit}</mwc-list-item>
` `