lovelace-timer-bar-card
Version:
Progress bar display for Home Assistant timers
85 lines (69 loc) • 2.16 kB
text/typescript
/** Action Handling Code.
From both https://github.com/custom-cards/custom-card-helpers/blob/master/src/handle-action.ts
and https://github.com/home-assistant/frontend/blob/dev/src/panels/lovelace/common/handle-action.ts
*/
import { HassServiceTarget } from "home-assistant-js-websocket";
import { fireEvent } from "custom-card-helpers";
type HomeAssistant = any; // Hack since the custom-card-helpers HomeAssistant type is out of date
export interface ToggleActionConfig extends BaseActionConfig {
action: "toggle";
}
export interface CallServiceActionConfig extends BaseActionConfig {
action: "call-service";
service: string;
target?: HassServiceTarget;
// "service_data" is kept for backwards compatibility. Replaced by "data".
service_data?: Record<string, unknown>;
data?: Record<string, unknown>;
}
export interface NavigateActionConfig extends BaseActionConfig {
action: "navigate";
navigation_path: string;
}
export interface UrlActionConfig extends BaseActionConfig {
action: "url";
url_path: string;
}
export interface MoreInfoActionConfig extends BaseActionConfig {
action: "more-info";
}
export interface NoActionConfig extends BaseActionConfig {
action: "none";
}
export interface CustomActionConfig extends BaseActionConfig {
action: "fire-dom-event";
}
export interface BaseActionConfig {
action: string;
confirmation?: ConfirmationRestrictionConfig;
}
export interface ConfirmationRestrictionConfig {
text?: string;
exemptions?: RestrictionConfig[];
}
export interface RestrictionConfig {
user: string;
}
export type ActionConfig =
| ToggleActionConfig
| CallServiceActionConfig
| NavigateActionConfig
| UrlActionConfig
| MoreInfoActionConfig
| NoActionConfig
| CustomActionConfig;
export const handleAction = (
node: HTMLElement,
_hass: HomeAssistant,
config: {
entity?: string;
camera_image?: string;
hold_action?: ActionConfig;
tap_action?: ActionConfig;
double_tap_action?: ActionConfig;
},
action: string
): void => {
// @ts-ignore: hass-action isn't in custom-card-helpers
fireEvent(node, "hass-action", { config, action });
};