Ensure we have all mandatory action keys present in action editor (#8424)

This commit is contained in:
Philip Allgaier 2021-02-22 21:10:06 +01:00 committed by GitHub
parent d76af2cb61
commit 741ac679a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 5 deletions

View File

@ -49,10 +49,15 @@ export class HuiActionEditor extends LitElement {
return config.url_path || ""; return config.url_path || "";
} }
get _service(): string {
const config = this.config as CallServiceActionConfig;
return config.service || "";
}
private _serviceAction = memoizeOne( private _serviceAction = memoizeOne(
(config: CallServiceActionConfig): ServiceAction => { (config: CallServiceActionConfig): ServiceAction => {
return { return {
service: config.service || "", service: this._service,
data: config.service_data, data: config.service_data,
target: config.target, target: config.target,
}; };
@ -155,8 +160,25 @@ export class HuiActionEditor extends LitElement {
} }
return; return;
} }
let data;
switch (value) {
case "url": {
data = { url_path: this._url_path };
break;
}
case "call-service": {
data = { service: this._service };
break;
}
case "navigate": {
data = { navigation_path: this._navigation_path };
break;
}
}
fireEvent(this, "value-changed", { fireEvent(this, "value-changed", {
value: { action: value }, value: { action: value, ...data },
}); });
} }

View File

@ -120,13 +120,13 @@ const actionConfigStructConfirmation = union([
const actionConfigStructUrl = object({ const actionConfigStructUrl = object({
action: literal("url"), action: literal("url"),
url_path: optional(string()), url_path: string(),
confirmation: optional(actionConfigStructConfirmation), confirmation: optional(actionConfigStructConfirmation),
}); });
const actionConfigStructService = object({ const actionConfigStructService = object({
action: literal("call-service"), action: literal("call-service"),
service: optional(string()), service: string(),
service_data: optional(object()), service_data: optional(object()),
target: optional( target: optional(
object({ object({
@ -140,7 +140,7 @@ const actionConfigStructService = object({
const actionConfigStructNavigate = object({ const actionConfigStructNavigate = object({
action: literal("navigate"), action: literal("navigate"),
navigation_path: optional(string()), navigation_path: string(),
confirmation: optional(actionConfigStructConfirmation), confirmation: optional(actionConfigStructConfirmation),
}); });