From e8eefaf1d3ef285c1b169fb00b292f848927915f Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Wed, 12 Jun 2024 13:40:44 +0200 Subject: [PATCH] Fix current mode not selected in card feature (#21063) --- .../card-features/common/filter-modes.ts | 8 ++--- .../hui-alarm-modes-card-feature.ts | 35 +++++-------------- 2 files changed, 12 insertions(+), 31 deletions(-) diff --git a/src/panels/lovelace/card-features/common/filter-modes.ts b/src/panels/lovelace/card-features/common/filter-modes.ts index d1e81385df..0e59b35c47 100644 --- a/src/panels/lovelace/card-features/common/filter-modes.ts +++ b/src/panels/lovelace/card-features/common/filter-modes.ts @@ -1,7 +1,7 @@ -export const filterModes = ( - supportedModes: string[] | undefined, - selectedModes: string[] | undefined -): string[] => +export const filterModes = ( + supportedModes: T[] | undefined, + selectedModes: T[] | undefined +): T[] => selectedModes ? selectedModes.filter((mode) => (supportedModes || []).includes(mode)) : supportedModes || []; diff --git a/src/panels/lovelace/card-features/hui-alarm-modes-card-feature.ts b/src/panels/lovelace/card-features/hui-alarm-modes-card-feature.ts index 9b8ef39c99..2572f237c4 100644 --- a/src/panels/lovelace/card-features/hui-alarm-modes-card-feature.ts +++ b/src/panels/lovelace/card-features/hui-alarm-modes-card-feature.ts @@ -6,7 +6,6 @@ import { styleMap } from "lit/directives/style-map"; import memoizeOne from "memoize-one"; import { computeDomain } from "../../../common/entity/compute_domain"; import { stateColorCss } from "../../../common/entity/state_color"; -import { supportsFeature } from "../../../common/entity/supports-feature"; import "../../../components/ha-control-button"; import "../../../components/ha-control-button-group"; import "../../../components/ha-control-select"; @@ -70,37 +69,18 @@ class HuiAlarmModeCardFeature } } - private _modes = memoizeOne( - ( - stateObj: AlarmControlPanelEntity, - selectedModes: AlarmMode[] | undefined - ) => { - if (!selectedModes) { - return []; - } - - return (Object.keys(ALARM_MODES) as AlarmMode[]).filter((mode) => { - const feature = ALARM_MODES[mode].feature; - return ( - (!feature || supportsFeature(stateObj, feature)) && - selectedModes.includes(mode) - ); - }); - } - ); - - private _getCurrentMode(stateObj: AlarmControlPanelEntity) { - return this._modes(stateObj, this._config?.modes).find( - (mode) => mode === stateObj.state - ); - } + private _getCurrentMode = memoizeOne((stateObj: AlarmControlPanelEntity) => { + const supportedModes = supportedAlarmModes(stateObj); + return supportedModes.find((mode) => mode === stateObj.state); + }); private async _valueChanged(ev: CustomEvent) { + if (!this.stateObj) return; const mode = (ev.detail as any).value as AlarmMode; - if (mode === this.stateObj!.state) return; + if (mode === this.stateObj.state) return; - const oldMode = this._getCurrentMode(this.stateObj!); + const oldMode = this._getCurrentMode(this.stateObj); this._currentMode = mode; try { @@ -153,6 +133,7 @@ class HuiAlarmModeCardFeature `; } + return html`