mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-24 09:46:36 +00:00
Lock entity options (#16344)
This commit is contained in:
parent
6d4e3a0de3
commit
e371f5d406
@ -78,6 +78,10 @@ export interface NumberEntityOptions {
|
||||
unit_of_measurement?: string | null;
|
||||
}
|
||||
|
||||
export interface LockEntityOptions {
|
||||
default_code?: string | null;
|
||||
}
|
||||
|
||||
export interface WeatherEntityOptions {
|
||||
precipitation_unit?: string | null;
|
||||
pressure_unit?: string | null;
|
||||
@ -89,6 +93,7 @@ export interface WeatherEntityOptions {
|
||||
export interface EntityRegistryOptions {
|
||||
number?: NumberEntityOptions;
|
||||
sensor?: SensorEntityOptions;
|
||||
lock?: LockEntityOptions;
|
||||
weather?: WeatherEntityOptions;
|
||||
conversation?: Record<string, unknown>;
|
||||
"cloud.alexa"?: Record<string, unknown>;
|
||||
@ -104,7 +109,11 @@ export interface EntityRegistryEntryUpdateParams {
|
||||
hidden_by: string | null;
|
||||
new_entity_id?: string;
|
||||
options_domain?: string;
|
||||
options?: SensorEntityOptions | NumberEntityOptions | WeatherEntityOptions;
|
||||
options?:
|
||||
| SensorEntityOptions
|
||||
| NumberEntityOptions
|
||||
| LockEntityOptions
|
||||
| WeatherEntityOptions;
|
||||
aliases?: string[];
|
||||
}
|
||||
|
||||
|
@ -60,6 +60,7 @@ import {
|
||||
fetchEntityRegistry,
|
||||
SensorEntityOptions,
|
||||
updateEntityRegistryEntry,
|
||||
LockEntityOptions,
|
||||
} from "../../../data/entity_registry";
|
||||
import { domainToName } from "../../../data/integration";
|
||||
import { getNumberDeviceClassConvertibleUnits } from "../../../data/number";
|
||||
@ -171,6 +172,8 @@ export class EntityRegistrySettingsEditor extends LitElement {
|
||||
|
||||
@state() private _weatherConvertibleUnits?: WeatherUnits;
|
||||
|
||||
@state() private _defaultCode?: string | null;
|
||||
|
||||
@state() private _noDeviceArea?: boolean;
|
||||
|
||||
private _origEntityId!: string;
|
||||
@ -222,6 +225,10 @@ export class EntityRegistrySettingsEditor extends LitElement {
|
||||
this._precision = this.entry.options?.sensor?.display_precision;
|
||||
}
|
||||
|
||||
if (domain === "lock") {
|
||||
this._defaultCode = this.entry.options?.lock?.default_code;
|
||||
}
|
||||
|
||||
if (domain === "weather") {
|
||||
const stateObj: HassEntity | undefined =
|
||||
this.hass.states[this.entry.entity_id];
|
||||
@ -257,6 +264,16 @@ export class EntityRegistrySettingsEditor extends LitElement {
|
||||
});
|
||||
}
|
||||
|
||||
private _isInvalidDefaultCode(
|
||||
codeFormat?: string,
|
||||
value?: string | null
|
||||
): boolean {
|
||||
if (codeFormat && value) {
|
||||
return !RegExp(codeFormat).test(value);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected async updated(changedProps: PropertyValues): Promise<void> {
|
||||
if (changedProps.has("_deviceClass")) {
|
||||
const domain = computeDomain(this.entry.entity_id);
|
||||
@ -303,6 +320,13 @@ export class EntityRegistrySettingsEditor extends LitElement {
|
||||
|
||||
const invalidDomainUpdate = computeDomain(this._entityId.trim()) !== domain;
|
||||
|
||||
const invalidDefaultCode =
|
||||
domain === "lock" &&
|
||||
this._isInvalidDefaultCode(
|
||||
stateObj?.attributes?.code_format,
|
||||
this._defaultCode
|
||||
);
|
||||
|
||||
const defaultPrecision =
|
||||
this.entry.options?.sensor?.suggested_display_precision ?? undefined;
|
||||
|
||||
@ -409,6 +433,22 @@ export class EntityRegistrySettingsEditor extends LitElement {
|
||||
</ha-select>
|
||||
`
|
||||
: ""}
|
||||
${domain === "lock"
|
||||
? html`
|
||||
<ha-textfield
|
||||
.errorMessage=${this.hass.localize(
|
||||
"ui.dialogs.entity_registry.editor.default_code_error"
|
||||
)}
|
||||
.value=${this._defaultCode == null ? "" : this._defaultCode}
|
||||
.label=${this.hass.localize(
|
||||
"ui.dialogs.entity_registry.editor.default_code"
|
||||
)}
|
||||
.invalid=${invalidDefaultCode}
|
||||
.disabled=${this.disabled}
|
||||
@input=${this._defaultcodeChanged}
|
||||
></ha-textfield>
|
||||
`
|
||||
: ""}
|
||||
${domain === "sensor" &&
|
||||
this._deviceClass &&
|
||||
stateObj?.attributes.unit_of_measurement &&
|
||||
@ -891,6 +931,14 @@ export class EntityRegistrySettingsEditor extends LitElement {
|
||||
(params.options as SensorEntityOptions).display_precision =
|
||||
this._precision;
|
||||
}
|
||||
if (
|
||||
domain === "lock" &&
|
||||
this.entry.options?.[domain]?.default_code !== this._defaultCode
|
||||
) {
|
||||
params.options_domain = domain;
|
||||
params.options = this.entry.options?.[domain] || {};
|
||||
(params.options as LockEntityOptions).default_code = this._defaultCode;
|
||||
}
|
||||
if (
|
||||
domain === "weather" &&
|
||||
(stateObj?.attributes?.precipitation_unit !== this._precipitation_unit ||
|
||||
@ -996,6 +1044,11 @@ export class EntityRegistrySettingsEditor extends LitElement {
|
||||
this._unit_of_measurement = ev.target.value;
|
||||
}
|
||||
|
||||
private _defaultcodeChanged(ev): void {
|
||||
fireEvent(this, "change");
|
||||
this._defaultCode = ev.target.value === "" ? null : ev.target.value;
|
||||
}
|
||||
|
||||
private _precipitationUnitChanged(ev): void {
|
||||
fireEvent(this, "change");
|
||||
this._precipitation_unit = ev.target.value;
|
||||
|
@ -983,6 +983,8 @@
|
||||
"name": "Name",
|
||||
"icon": "Icon",
|
||||
"icon_error": "Icons should be in the format 'prefix:iconname', e.g. 'mdi:home'",
|
||||
"default_code": "Default code",
|
||||
"default_code_error": "Code does not match code format",
|
||||
"entity_id": "Entity ID",
|
||||
"unit_of_measurement": "Unit of Measurement",
|
||||
"precipitation_unit": "Precipitation unit",
|
||||
|
Loading…
x
Reference in New Issue
Block a user