diff --git a/src/chips/AbstractChip.ts b/src/chips/AbstractChip.ts index d330508..1ec488f 100644 --- a/src/chips/AbstractChip.ts +++ b/src/chips/AbstractChip.ts @@ -1,6 +1,8 @@ +import { HassServiceTarget } from 'home-assistant-js-websocket'; import { Registry } from '../Registry'; import { LovelaceChipConfig } from '../types/lovelace-mushroom/utils/lovelace/chip/types'; -import { logMessage, lvlFatal } from '../utilities/debug'; +import { isCallServiceActionConfig } from '../types/strategy/strategy-generics'; +import { logMessage, lvlFatal, lvlWarn } from '../utilities/debug'; abstract class AbstractChip { /** @@ -18,8 +20,7 @@ abstract class AbstractChip { * * Child classes should override this property to reflect their own card type and options. */ - protected configuration: LovelaceChipConfig = { - // TODO: Check if this is correct vs custom:mushroom-template-badge. Also in child classes. + configuration: LovelaceChipConfig = { type: 'template', }; @@ -43,6 +44,21 @@ abstract class AbstractChip { getChipConfiguration(): LovelaceChipConfig { return this.configuration; } + + /** + * Set the target for the tap action. + * + * @param {HassServiceTarget} target Target of the tap action. + */ + setTapActionTarget(target: HassServiceTarget) { + if ('tap_action' in this.configuration && isCallServiceActionConfig(this.configuration.tap_action)) { + this.configuration.tap_action.target = target; + + return; + } + + logMessage(lvlWarn, 'Target not set: Invalid target or tap action.'); + } } export default AbstractChip; diff --git a/src/chips/FanChip.ts b/src/chips/FanChip.ts index bfcc616..59ed226 100644 --- a/src/chips/FanChip.ts +++ b/src/chips/FanChip.ts @@ -3,7 +3,6 @@ import { Registry } from '../Registry'; import { TemplateChipConfig } from '../types/lovelace-mushroom/utils/lovelace/chip/types'; import AbstractChip from './AbstractChip'; -import RegistryFilter from '../utilities/RegistryFilter'; /** * Fan Chip class. @@ -19,13 +18,8 @@ class FanChip extends AbstractChip { icon_color: 'green', content: Registry.getCountTemplate('fan', 'eq', 'on'), tap_action: { - action: 'perform-action', + action: 'call-service', perform_action: 'fan.turn_off', - target: { - entity_id: new RegistryFilter(Registry.entities) - .whereDomain('fan') - .getValuesByProperty('entity_id') as string[], - }, }, hold_action: { action: 'navigate', diff --git a/src/chips/LightChip.ts b/src/chips/LightChip.ts index b70e0e1..81cd19d 100644 --- a/src/chips/LightChip.ts +++ b/src/chips/LightChip.ts @@ -3,7 +3,6 @@ import { Registry } from '../Registry'; import { TemplateChipConfig } from '../types/lovelace-mushroom/utils/lovelace/chip/types'; import AbstractChip from './AbstractChip'; -import RegistryFilter from '../utilities/RegistryFilter'; /** * Light Chip class. @@ -19,13 +18,8 @@ class LightChip extends AbstractChip { icon_color: 'amber', content: Registry.getCountTemplate('light', 'eq', 'on'), tap_action: { - action: 'perform-action', + action: 'call-service', perform_action: 'light.turn_off', - target: { - entity_id: new RegistryFilter(Registry.entities) - .whereDomain('light') - .getValuesByProperty('entity_id') as string[], - }, }, hold_action: { action: 'navigate', diff --git a/src/chips/SwitchChip.ts b/src/chips/SwitchChip.ts index 7e341d1..4abac14 100644 --- a/src/chips/SwitchChip.ts +++ b/src/chips/SwitchChip.ts @@ -3,7 +3,6 @@ import { Registry } from '../Registry'; import { TemplateChipConfig } from '../types/lovelace-mushroom/utils/lovelace/chip/types'; import AbstractChip from './AbstractChip'; -import RegistryFilter from '../utilities/RegistryFilter'; /** * Switch Chip class. @@ -19,13 +18,8 @@ class SwitchChip extends AbstractChip { icon_color: 'blue', content: Registry.getCountTemplate('switch', 'eq', 'on'), tap_action: { - action: 'perform-action', + action: 'call-service', perform_action: 'switch.turn_off', - target: { - entity_id: new RegistryFilter(Registry.entities) - .whereDomain('switch') - .getValuesByProperty('entity_id') as string[], - }, }, hold_action: { action: 'navigate',