diff --git a/src/components/ha-selector/ha-selector-boolean.ts b/src/components/ha-selector/ha-selector-boolean.ts index 154ecc4c9a..f140ba99e4 100644 --- a/src/components/ha-selector/ha-selector-boolean.ts +++ b/src/components/ha-selector/ha-selector-boolean.ts @@ -16,7 +16,7 @@ export class HaBooleanSelector extends LitElement { @property({ type: Boolean }) public disabled = false; protected render() { - return html` + return html` + field.selector && + !field.required && + !("boolean" in field.selector && field.default); + interface ExtHassService extends Omit { fields: { key: string; @@ -186,7 +191,7 @@ export class HaServiceControl extends LitElement { const hasOptional = Boolean( !shouldRenderServiceDataYaml && - serviceData?.fields.some((field) => field.selector && !field.required) + serviceData?.fields.some((field) => showOptionalToggle(field)) ); return html`` - : serviceData?.fields.map((dataField) => - dataField.selector && - (!dataField.advanced || - this.showAdvanced || - (this._value?.data && - this._value.data[dataField.key] !== undefined)) + : serviceData?.fields.map((dataField) => { + const showOptional = showOptionalToggle(dataField); + return dataField.selector && + (!dataField.advanced || + this.showAdvanced || + (this._value?.data && + this._value.data[dataField.key] !== undefined)) ? html` - ${dataField.required + ${!showOptional ? hasOptional ? html`
` : "" @@ -273,9 +279,9 @@ export class HaServiceControl extends LitElement { slot="prefix" >`} ${dataField.name || dataField.key} - ${dataField?.description}${dataField?.description} +
` - : "" - )} `; + > + ` + : ""; + })}`; } private _checkboxChanged(ev) { const checked = ev.currentTarget.checked; const key = ev.currentTarget.key; + let data; + if (checked) { this._checkedKeys.add(key); + const defaultValue = this._getServiceInfo( + this._value?.service, + this.hass.services + )?.fields.find((field) => field.key === key)?.default; + if (defaultValue) { + data = { + ...this._value?.data, + [key]: defaultValue, + }; + } } else { this._checkedKeys.delete(key); - const data = { ...this._value?.data }; - + data = { ...this._value?.data }; delete data[key]; - + } + if (data) { fireEvent(this, "value-changed", { value: { ...this._value,