import { HomeAssistant , ActionConfig } from "./types" ; import { forwardHaptic } from "./haptic" ; import { fireEvent } from "./fire-event" ; import { navigate } from "./navigate" ; import { toggleEntity } from "./toggle-entity" ; export const handleActionConfig = ( node , hass , config , actionConfig ) : void => { if ( ! actionConfig ) { actionConfig = { action : "more-info" , } ; } if ( actionConfig . confirmation && ( ! actionConfig . confirmation . exemptions || ! actionConfig . confirmation . exemptions . some ( ( e ) => e . user === hass ! . user ! . id ) ) ) { forwardHaptic ( "warning" ) ; if ( ! confirm ( actionConfig . confirmation . text || `Are you sure you want to ${ actionConfig . action }?` ) ) { return ; } } switch ( actionConfig . action ) { case "more-info" : if ( config . entity || config . camera_image ) { fireEvent ( node , "hass-more-info" , { entityId : config . entity ? config . entity : config . camera_image ! , } ) ; } break ; case "navigate" : if ( actionConfig . navigation_path ) { navigate ( node , actionConfig . navigation_path ) ; } break ; case "url" : if ( actionConfig . url_path ) { window . open ( actionConfig . url_path ) ; } break ; case "toggle" : if ( config . entity ) { toggleEntity ( hass , config . entity ! ) ; forwardHaptic ( "success" ) ; } break ; case "call-service" : { if ( ! actionConfig . service ) { forwardHaptic ( "failure" ) ; return ; } const [ domain , service ] = actionConfig . service . split ( "." , 2 ) ; hass . callService ( domain , service , actionConfig . service_data , actionConfig . target ) ; forwardHaptic ( "success" ) ; break ; } case "fire-dom-event" : { fireEvent ( node , "ll-custom" , actionConfig ) ; } } } ; export const handleAction = ( node , hass , config , action ) : void => { let actionConfig ; if ( action === "double_tap" && config . double_tap_action ) { actionConfig = config . double_tap_action ; } else if ( action === "hold" && config . hold_action ) { actionConfig = config . hold_action ; } else if ( action === "tap" && config . tap_action ) { actionConfig = config . tap_action ; } handleActionConfig ( node , hass , config , actionConfig ) ; } ;