diff --git a/src/components/ha-service-control.ts b/src/components/ha-service-control.ts index de71b6adac..295ff0aeef 100644 --- a/src/components/ha-service-control.ts +++ b/src/components/ha-service-control.ts @@ -136,6 +136,7 @@ export class HaServiceControl extends LitElement { if (oldValue?.service !== this.value?.service) { let updatedDefaultValue = false; if (this._value && serviceData) { + const loadDefaults = this.value && !("data" in this.value); // Set mandatory bools without a default value to false if (!this._value.data) { this._value.data = {}; @@ -152,6 +153,7 @@ export class HaServiceControl extends LitElement { this._value!.data![field.key] = false; } if ( + loadDefaults && field.selector && field.default !== undefined && this._value!.data![field.key] === undefined @@ -341,10 +343,10 @@ export class HaServiceControl extends LitElement { .selector=${dataField.selector} .key=${dataField.key} @value-changed=${this._serviceDataChanged} - .value=${this._value?.data && - this._value.data[dataField.key] !== undefined + .value=${this._value?.data ? this._value.data[dataField.key] - : dataField.default} + : undefined} + .placeholder=${dataField.default} > ` : ""; @@ -362,7 +364,7 @@ export class HaServiceControl extends LitElement { this._value?.service, this.hass.services )?.fields.find((field) => field.key === key)?.default; - if (defaultValue) { + if (defaultValue != null) { data = { ...this._value?.data, [key]: defaultValue, diff --git a/src/panels/lovelace/components/hui-action-editor.ts b/src/panels/lovelace/components/hui-action-editor.ts index 5bc031abc5..4077ae9a09 100644 --- a/src/panels/lovelace/components/hui-action-editor.ts +++ b/src/panels/lovelace/components/hui-action-editor.ts @@ -57,7 +57,9 @@ export class HuiActionEditor extends LitElement { private _serviceAction = memoizeOne( (config: CallServiceActionConfig): ServiceAction => ({ service: this._service, - data: config.data ?? config.service_data, + ...(config.data || config.service_data + ? { data: config.data ?? config.service_data } + : null), target: config.target, }) ); @@ -196,9 +198,12 @@ export class HuiActionEditor extends LitElement { const value = { ...this.config!, service: ev.detail.value.service || "", - data: ev.detail.value.data || {}, + data: ev.detail.value.data, target: ev.detail.value.target || {}, }; + if (!ev.detail.value.data) { + delete value.data; + } // "service_data" is allowed for backwards compatibility but replaced with "data" on write if ("service_data" in value) { delete value.service_data;