Rename switch-toggle feature to toggle and improve (#24333)

* Rename `switch-toggle` feature to `toggle` and improve

* Format
This commit is contained in:
Jan-Philipp Benecke 2025-02-20 14:51:49 +01:00 committed by GitHub
parent cae36b393b
commit 8175e45921
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 31 additions and 29 deletions

View File

@ -12,32 +12,29 @@ import { UNAVAILABLE } from "../../../data/entity";
import type { HomeAssistant } from "../../../types"; import type { HomeAssistant } from "../../../types";
import type { LovelaceCardFeature } from "../types"; import type { LovelaceCardFeature } from "../types";
import { cardFeatureStyles } from "./common/card-feature-styles"; import { cardFeatureStyles } from "./common/card-feature-styles";
import type { SwitchToggleCardFeatureConfig } from "./types"; import type { ToggleCardFeatureConfig } from "./types";
import { showToast } from "../../../util/toast"; import { showToast } from "../../../util/toast";
export const supportsSwitchToggleCardFeature = (stateObj: HassEntity) => { export const supportsToggleCardFeature = (stateObj: HassEntity) => {
const domain = computeDomain(stateObj.entity_id); const domain = computeDomain(stateObj.entity_id);
return domain === "switch"; return ["switch", "input_boolean"].includes(domain);
}; };
@customElement("hui-switch-toggle-card-feature") @customElement("hui-toggle-card-feature")
class HuiSwitchToggleCardFeature class HuiToggleCardFeature extends LitElement implements LovelaceCardFeature {
extends LitElement
implements LovelaceCardFeature
{
@property({ attribute: false }) public hass?: HomeAssistant; @property({ attribute: false }) public hass?: HomeAssistant;
@property({ attribute: false }) public stateObj?: HassEntity; @property({ attribute: false }) public stateObj?: HassEntity;
@state() private _config?: SwitchToggleCardFeatureConfig; @state() private _config?: ToggleCardFeatureConfig;
static getStubConfig(): SwitchToggleCardFeatureConfig { static getStubConfig(): ToggleCardFeatureConfig {
return { return {
type: "switch-toggle", type: "toggle",
}; };
} }
public setConfig(config: SwitchToggleCardFeatureConfig): void { public setConfig(config: ToggleCardFeatureConfig): void {
if (!config) { if (!config) {
throw new Error("Invalid configuration"); throw new Error("Invalid configuration");
} }
@ -49,7 +46,7 @@ class HuiSwitchToggleCardFeature
!this._config || !this._config ||
!this.hass || !this.hass ||
!this.stateObj || !this.stateObj ||
!supportsSwitchToggleCardFeature(this.stateObj) !supportsToggleCardFeature(this.stateObj)
) { ) {
return null; return null;
} }
@ -81,17 +78,22 @@ class HuiSwitchToggleCardFeature
private async _valueChanged(ev: CustomEvent) { private async _valueChanged(ev: CustomEvent) {
const newState = (ev.detail as any).value; const newState = (ev.detail as any).value;
if (newState === this.stateObj!.state) return; if (
newState === this.stateObj!.state &&
!this.stateObj!.attributes.assumed_state
)
return;
const service = newState === "on" ? "turn_on" : "turn_off"; const service = newState === "on" ? "turn_on" : "turn_off";
const domain = computeDomain(this.stateObj!.entity_id);
try { try {
await this.hass!.callService("switch", service, { await this.hass!.callService(domain, service, {
entity_id: this.stateObj!.entity_id, entity_id: this.stateObj!.entity_id,
}); });
} catch (_err) { } catch (_err) {
showToast(this, { showToast(this, {
message: this.hass!.localize("ui.notification_toast.action_failed", { message: this.hass!.localize("ui.notification_toast.action_failed", {
service: "switch." + service, service: domain + "." + service,
}), }),
duration: 5000, duration: 5000,
dismissable: true, dismissable: true,
@ -104,6 +106,6 @@ class HuiSwitchToggleCardFeature
declare global { declare global {
interface HTMLElementTagNameMap { interface HTMLElementTagNameMap {
"hui-switch-toggle-card-feature": HuiSwitchToggleCardFeature; "hui-toggle-card-feature": HuiToggleCardFeature;
} }
} }

View File

@ -88,10 +88,6 @@ export interface SelectOptionsCardFeatureConfig {
options?: string[]; options?: string[];
} }
export interface SwitchToggleCardFeatureConfig {
type: "switch-toggle";
}
export interface NumericInputCardFeatureConfig { export interface NumericInputCardFeatureConfig {
type: "numeric-input"; type: "numeric-input";
style?: "buttons" | "slider"; style?: "buttons" | "slider";
@ -105,6 +101,10 @@ export interface TargetTemperatureCardFeatureConfig {
type: "target-temperature"; type: "target-temperature";
} }
export interface ToggleCardFeatureConfig {
type: "toggle";
}
export interface WaterHeaterOperationModesCardFeatureConfig { export interface WaterHeaterOperationModesCardFeatureConfig {
type: "water-heater-operation-modes"; type: "water-heater-operation-modes";
operation_modes?: OperationMode[]; operation_modes?: OperationMode[];
@ -172,9 +172,9 @@ export type LovelaceCardFeatureConfig =
| MediaPlayerVolumeSliderCardFeatureConfig | MediaPlayerVolumeSliderCardFeatureConfig
| NumericInputCardFeatureConfig | NumericInputCardFeatureConfig
| SelectOptionsCardFeatureConfig | SelectOptionsCardFeatureConfig
| SwitchToggleCardFeatureConfig
| TargetHumidityCardFeatureConfig | TargetHumidityCardFeatureConfig
| TargetTemperatureCardFeatureConfig | TargetTemperatureCardFeatureConfig
| ToggleCardFeatureConfig
| UpdateActionsCardFeatureConfig | UpdateActionsCardFeatureConfig
| VacuumCommandsCardFeatureConfig | VacuumCommandsCardFeatureConfig
| WaterHeaterOperationModesCardFeatureConfig; | WaterHeaterOperationModesCardFeatureConfig;

View File

@ -20,9 +20,9 @@ import "../card-features/hui-lock-open-door-card-feature";
import "../card-features/hui-media-player-volume-slider-card-feature"; import "../card-features/hui-media-player-volume-slider-card-feature";
import "../card-features/hui-numeric-input-card-feature"; import "../card-features/hui-numeric-input-card-feature";
import "../card-features/hui-select-options-card-feature"; import "../card-features/hui-select-options-card-feature";
import "../card-features/hui-switch-toggle-card-feature";
import "../card-features/hui-target-temperature-card-feature"; import "../card-features/hui-target-temperature-card-feature";
import "../card-features/hui-target-humidity-card-feature"; import "../card-features/hui-target-humidity-card-feature";
import "../card-features/hui-toggle-card-feature";
import "../card-features/hui-update-actions-card-feature"; import "../card-features/hui-update-actions-card-feature";
import "../card-features/hui-vacuum-commands-card-feature"; import "../card-features/hui-vacuum-commands-card-feature";
import "../card-features/hui-water-heater-operation-modes-card-feature"; import "../card-features/hui-water-heater-operation-modes-card-feature";
@ -56,9 +56,9 @@ const TYPES = new Set<LovelaceCardFeatureConfig["type"]>([
"media-player-volume-slider", "media-player-volume-slider",
"numeric-input", "numeric-input",
"select-options", "select-options",
"switch-toggle",
"target-humidity", "target-humidity",
"target-temperature", "target-temperature",
"toggle",
"update-actions", "update-actions",
"vacuum-commands", "vacuum-commands",
"water-heater-operation-modes", "water-heater-operation-modes",

View File

@ -40,9 +40,9 @@ import { supportsLockOpenDoorCardFeature } from "../../card-features/hui-lock-op
import { supportsMediaPlayerVolumeSliderCardFeature } from "../../card-features/hui-media-player-volume-slider-card-feature"; import { supportsMediaPlayerVolumeSliderCardFeature } from "../../card-features/hui-media-player-volume-slider-card-feature";
import { supportsNumericInputCardFeature } from "../../card-features/hui-numeric-input-card-feature"; import { supportsNumericInputCardFeature } from "../../card-features/hui-numeric-input-card-feature";
import { supportsSelectOptionsCardFeature } from "../../card-features/hui-select-options-card-feature"; import { supportsSelectOptionsCardFeature } from "../../card-features/hui-select-options-card-feature";
import { supportsSwitchToggleCardFeature } from "../../card-features/hui-switch-toggle-card-feature";
import { supportsTargetHumidityCardFeature } from "../../card-features/hui-target-humidity-card-feature"; import { supportsTargetHumidityCardFeature } from "../../card-features/hui-target-humidity-card-feature";
import { supportsTargetTemperatureCardFeature } from "../../card-features/hui-target-temperature-card-feature"; import { supportsTargetTemperatureCardFeature } from "../../card-features/hui-target-temperature-card-feature";
import { supportsToggleCardFeature } from "../../card-features/hui-toggle-card-feature";
import { supportsUpdateActionsCardFeature } from "../../card-features/hui-update-actions-card-feature"; import { supportsUpdateActionsCardFeature } from "../../card-features/hui-update-actions-card-feature";
import { supportsVacuumCommandsCardFeature } from "../../card-features/hui-vacuum-commands-card-feature"; import { supportsVacuumCommandsCardFeature } from "../../card-features/hui-vacuum-commands-card-feature";
import { supportsWaterHeaterOperationModesCardFeature } from "../../card-features/hui-water-heater-operation-modes-card-feature"; import { supportsWaterHeaterOperationModesCardFeature } from "../../card-features/hui-water-heater-operation-modes-card-feature";
@ -75,9 +75,9 @@ const UI_FEATURE_TYPES = [
"media-player-volume-slider", "media-player-volume-slider",
"numeric-input", "numeric-input",
"select-options", "select-options",
"switch-toggle",
"target-humidity", "target-humidity",
"target-temperature", "target-temperature",
"toggle",
"update-actions", "update-actions",
"vacuum-commands", "vacuum-commands",
"water-heater-operation-modes", "water-heater-operation-modes",
@ -131,10 +131,10 @@ const SUPPORTS_FEATURE_TYPES: Record<
"select-options": supportsSelectOptionsCardFeature, "select-options": supportsSelectOptionsCardFeature,
"target-humidity": supportsTargetHumidityCardFeature, "target-humidity": supportsTargetHumidityCardFeature,
"target-temperature": supportsTargetTemperatureCardFeature, "target-temperature": supportsTargetTemperatureCardFeature,
toggle: supportsToggleCardFeature,
"update-actions": supportsUpdateActionsCardFeature, "update-actions": supportsUpdateActionsCardFeature,
"vacuum-commands": supportsVacuumCommandsCardFeature, "vacuum-commands": supportsVacuumCommandsCardFeature,
"water-heater-operation-modes": supportsWaterHeaterOperationModesCardFeature, "water-heater-operation-modes": supportsWaterHeaterOperationModesCardFeature,
"switch-toggle": supportsSwitchToggleCardFeature,
}; };
const customCardFeatures = getCustomCardFeatures(); const customCardFeatures = getCustomCardFeatures();

View File

@ -7348,8 +7348,8 @@
"options": "Options", "options": "Options",
"customize_options": "Customize options" "customize_options": "Customize options"
}, },
"switch-toggle": { "toggle": {
"label": "Switch toggle" "label": "Toggle"
}, },
"numeric-input": { "numeric-input": {
"label": "Numeric input", "label": "Numeric input",