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; [key: string]: any;
} }
export interface ToggleActionConfig { export interface ToggleActionConfig extends BaseActionConfig {
action: "toggle"; action: "toggle";
} }
export interface CallServiceActionConfig { export interface CallServiceActionConfig extends BaseActionConfig {
action: "call-service"; action: "call-service";
service: string; service: string;
service_data?: { service_data?: {
@ -50,24 +50,37 @@ export interface CallServiceActionConfig {
}; };
} }
export interface NavigateActionConfig { export interface NavigateActionConfig extends BaseActionConfig {
action: "navigate"; action: "navigate";
navigation_path: string; navigation_path: string;
} }
export interface UrlActionConfig { export interface UrlActionConfig extends BaseActionConfig {
action: "url"; action: "url";
url_path: string; url_path: string;
} }
export interface MoreInfoActionConfig { export interface MoreInfoActionConfig extends BaseActionConfig {
action: "more-info"; action: "more-info";
} }
export interface NoActionConfig { export interface NoActionConfig extends BaseActionConfig {
action: "none"; action: "none";
} }
export interface BaseActionConfig {
confirmation?: ConfirmationRestrictionConfig;
}
export interface ConfirmationRestrictionConfig {
text?: string;
exemptions?: RestrictionConfig[];
}
export interface RestrictionConfig {
user: string;
}
export type ActionConfig = export type ActionConfig =
| ToggleActionConfig | ToggleActionConfig
| CallServiceActionConfig | 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) { switch (actionConfig.action) {
case "more-info": case "more-info":
if (config.entity || config.camera_image) { if (config.entity || config.camera_image) {