add confirmation option to actions (#4006)

* add confirmation option to actions

* address comments
This commit is contained in:
Ian Richardson 2019-10-16 11:03:36 -05:00 committed by GitHub
parent 4ea483e3de
commit 141c3f1ea4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 6 deletions

View File

@ -37,11 +37,11 @@ export interface LovelaceCardConfig {
[key: string]: any;
}
export interface ToggleActionConfig {
export interface ToggleActionConfig extends BaseActionConfig {
action: "toggle";
}
export interface CallServiceActionConfig {
export interface CallServiceActionConfig extends BaseActionConfig {
action: "call-service";
service: string;
service_data?: {
@ -50,24 +50,37 @@ export interface CallServiceActionConfig {
};
}
export interface NavigateActionConfig {
export interface NavigateActionConfig extends BaseActionConfig {
action: "navigate";
navigation_path: string;
}
export interface UrlActionConfig {
export interface UrlActionConfig extends BaseActionConfig {
action: "url";
url_path: string;
}
export interface MoreInfoActionConfig {
export interface MoreInfoActionConfig extends BaseActionConfig {
action: "more-info";
}
export interface NoActionConfig {
export interface NoActionConfig extends BaseActionConfig {
action: "none";
}
export interface BaseActionConfig {
confirmation?: ConfirmationRestrictionConfig;
}
export interface ConfirmationRestrictionConfig {
text?: string;
exemptions?: RestrictionConfig[];
}
export interface RestrictionConfig {
user: string;
}
export type ActionConfig =
| ToggleActionConfig
| CallServiceActionConfig

View File

@ -34,6 +34,23 @@ export const handleClick = (
};
}
if (
actionConfig.confirmation &&
(!actionConfig.confirmation.exemptions ||
!actionConfig.confirmation.exemptions.some(
(e) => e.user === hass!.user!.id
))
) {
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) {