From ba26cd127f3d2dbd0a750aea3e0b9a0f27a1520f Mon Sep 17 00:00:00 2001 From: DigiLive Date: Sun, 27 Apr 2025 10:31:21 +0200 Subject: [PATCH] Refactor type guard of service action configurations Key `action` is extended with `perform-action` for future use. Key `service` is deprecated and replaced by `perform_action`. --- src/cards/LightCard.ts | 9 +++------ src/types/strategy/strategy-generics.ts | 4 +++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/cards/LightCard.ts b/src/cards/LightCard.ts index 1da21f8..c6e4415 100644 --- a/src/cards/LightCard.ts +++ b/src/cards/LightCard.ts @@ -2,7 +2,7 @@ import { EntityRegistryEntry } from '../types/homeassistant/data/entity_registry'; import { LightCardConfig } from '../types/lovelace-mushroom/cards/light-card-config'; -import { isCallServiceActionConfig, isCallServiceActionTarget } from '../types/strategy/strategy-generics'; +import { isCallServiceActionConfig } from '../types/strategy/strategy-generics'; import AbstractCard from './AbstractCard'; /** @@ -44,11 +44,8 @@ class LightCard extends AbstractCard { const configuration = LightCard.getDefaultConfig(); - if ( - isCallServiceActionConfig(configuration.double_tap_action) && - isCallServiceActionTarget(configuration.double_tap_action.target) - ) { - configuration.double_tap_action.target.entity_id = entity.entity_id; + if (isCallServiceActionConfig(configuration.double_tap_action)) { + configuration.double_tap_action.target = { entity_id: entity.entity_id }; } this.configuration = { ...this.configuration, ...configuration, ...customConfiguration }; diff --git a/src/types/strategy/strategy-generics.ts b/src/types/strategy/strategy-generics.ts index e36c380..58fea1c 100644 --- a/src/types/strategy/strategy-generics.ts +++ b/src/types/strategy/strategy-generics.ts @@ -297,7 +297,9 @@ export function isSortable(object: object): object is Sortable { * @returns {boolean} - True if the object represents a valid service action configuration. */ export function isCallServiceActionConfig(object?: ActionConfig): object is CallServiceActionConfig { - return !!object && object.action === 'call-service' && ['action', 'service'].every((key) => key in object); + return ( + !!object && (object.action === 'perform-action' || object.action === 'call-service') && 'perform_action' in object + ); } /**