Skip to content

Commit 3827f09

Browse files
committed
Add service action description placeholders
1 parent cc5c0d0 commit 3827f09

File tree

6 files changed

+65
-16
lines changed

6 files changed

+65
-16
lines changed

src/components/ha-service-control.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -464,10 +464,16 @@ export class HaServiceControl extends LitElement {
464464
? computeObjectId(this._value.action)
465465
: undefined;
466466

467+
const descriptionPlaceholders =
468+
domain && serviceName
469+
? this.hass.services[domain]?.[serviceName]?.description_placeholders
470+
: undefined;
471+
467472
const description =
468473
(serviceName &&
469474
this.hass.localize(
470-
`component.${domain}.services.${serviceName}.description`
475+
`component.${domain}.services.${serviceName}.description`,
476+
descriptionPlaceholders
471477
)) ||
472478
serviceData?.description;
473479

@@ -536,7 +542,8 @@ export class HaServiceControl extends LitElement {
536542
.disabled=${this.disabled}
537543
.value=${this._value?.data?.entity_id}
538544
.label=${this.hass.localize(
539-
`component.${domain}.services.${serviceName}.fields.entity_id.description`
545+
`component.${domain}.services.${serviceName}.fields.entity_id.description`,
546+
descriptionPlaceholders
540547
) || entityId.description}
541548
@value-changed=${this._entityPicked}
542549
allow-custom-entity
@@ -574,7 +581,8 @@ export class HaServiceControl extends LitElement {
574581
left-chevron
575582
.expanded=${!dataField.collapsed}
576583
.header=${this.hass.localize(
577-
`component.${domain}.services.${serviceName}.sections.${dataField.key}.name`
584+
`component.${domain}.services.${serviceName}.sections.${dataField.key}.name`,
585+
descriptionPlaceholders
578586
) ||
579587
dataField.name ||
580588
dataField.key}
@@ -610,7 +618,10 @@ export class HaServiceControl extends LitElement {
610618
serviceName: string | undefined
611619
) {
612620
return this.hass!.localize(
613-
`component.${domain}.services.${serviceName}.sections.${dataField.key}.description`
621+
`component.${domain}.services.${serviceName}.sections.${dataField.key}.description`,
622+
domain && serviceName
623+
? this.hass.services[domain]?.[serviceName]?.description_placeholders
624+
: undefined
614625
);
615626
}
616627

@@ -657,6 +668,10 @@ export class HaServiceControl extends LitElement {
657668
}
658669

659670
const showOptional = showOptionalToggle(dataField);
671+
const descriptionPlaceholders =
672+
domain && serviceName
673+
? this.hass.services[domain]?.[serviceName]?.description_placeholders
674+
: undefined;
660675

661676
return dataField.selector &&
662677
(!dataField.advanced ||
@@ -678,14 +693,16 @@ export class HaServiceControl extends LitElement {
678693
></ha-checkbox>`}
679694
<span slot="heading"
680695
>${this.hass.localize(
681-
`component.${domain}.services.${serviceName}.fields.${dataField.key}.name`
696+
`component.${domain}.services.${serviceName}.fields.${dataField.key}.name`,
697+
descriptionPlaceholders
682698
) ||
683699
dataField.name ||
684700
dataField.key}</span
685701
>
686702
<span slot="description"
687703
>${this.hass.localize(
688-
`component.${domain}.services.${serviceName}.fields.${dataField.key}.description`
704+
`component.${domain}.services.${serviceName}.fields.${dataField.key}.description`,
705+
descriptionPlaceholders
689706
) || dataField?.description}</span
690707
>
691708
<ha-selector

src/components/ha-service-picker.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class HaServicePicker extends LitElement {
3939
@query("ha-generic-picker") private _picker?: HaGenericPicker;
4040

4141
public async open() {
42+
await this.hass.loadBackendTranslation("services");
4243
await this.updateComplete;
4344
await this._picker?.open();
4445
}
@@ -92,8 +93,14 @@ class HaServicePicker extends LitElement {
9293
`;
9394
}
9495

96+
const descriptionPlaceholders =
97+
this.hass.services[domain]?.[service]?.description_placeholders;
98+
9599
const serviceName =
96-
localize(`component.${domain}.services.${service}.name`) ||
100+
localize(
101+
`component.${domain}.services.${service}.name`,
102+
descriptionPlaceholders
103+
) ||
97104
services[domain][service].name ||
98105
service;
99106

@@ -163,16 +170,21 @@ class HaServicePicker extends LitElement {
163170
const serviceId = `${domain}.${service}`;
164171
const domainName = domainToName(localize, domain);
165172

173+
const descriptionPlaceholders =
174+
this.hass.services[domain]?.[service]?.description_placeholders;
175+
166176
const name =
167177
this.hass.localize(
168-
`component.${domain}.services.${service}.name`
178+
`component.${domain}.services.${service}.name`,
179+
descriptionPlaceholders
169180
) ||
170181
services[domain][service].name ||
171182
service;
172183

173184
const description =
174185
this.hass.localize(
175-
`component.${domain}.services.${service}.description`
186+
`component.${domain}.services.${service}.description`,
187+
descriptionPlaceholders
176188
) ||
177189
services[domain][service].description ||
178190
"";

src/data/script_i18n.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,13 @@ const tryDescribeAction = <T extends ActionType>(
219219

220220
if (config.action) {
221221
const [domain, serviceName] = config.action.split(".", 2);
222+
const descriptionPlaceholders =
223+
hass.services[domain]?.[serviceName]?.description_placeholders;
222224
const service =
223-
hass.localize(`component.${domain}.services.${serviceName}.name`) ||
224-
hass.services[domain][serviceName]?.name;
225+
hass.localize(
226+
`component.${domain}.services.${serviceName}.name`,
227+
descriptionPlaceholders
228+
) || hass.services[domain][serviceName]?.name;
225229

226230
if (config.metadata) {
227231
return hass.localize(

src/panels/developer-tools/action/developer-tools-action.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,11 @@ class HaPanelDevAction extends LitElement {
135135
? computeObjectId(this._serviceData?.action)
136136
: undefined;
137137

138+
const descriptionPlaceholders =
139+
domain && serviceName
140+
? this.hass.services[domain]?.[serviceName]?.description_placeholders
141+
: undefined;
142+
138143
return html`
139144
<div class="content">
140145
<p>
@@ -307,12 +312,14 @@ class HaPanelDevAction extends LitElement {
307312
<td><pre>${field.key}</pre></td>
308313
<td>
309314
${this.hass.localize(
310-
`component.${domain}.services.${serviceName}.fields.${field.key}.description`
315+
`component.${domain}.services.${serviceName}.fields.${field.key}.description`,
316+
descriptionPlaceholders
311317
) || field.description}
312318
</td>
313319
<td>
314320
${this.hass.localize(
315-
`component.${domain}.services.${serviceName}.fields.${field.key}.example`
321+
`component.${domain}.services.${serviceName}.fields.${field.key}.example`,
322+
descriptionPlaceholders
316323
) || field.example}
317324
</td>
318325
</tr>`
@@ -643,7 +650,11 @@ class HaPanelDevAction extends LitElement {
643650
} catch (_err: any) {
644651
value =
645652
this.hass.localize(
646-
`component.${domain}.services.${serviceName}.fields.${field.key}.example`
653+
`component.${domain}.services.${serviceName}.fields.${field.key}.example`,
654+
domain && serviceName
655+
? this.hass.services[domain]?.[serviceName]
656+
?.description_placeholders
657+
: undefined
647658
) || field.example;
648659
}
649660
example[field.key] = value;

src/panels/logbook/ha-logbook-renderer.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,9 @@ class HaLogbookRenderer extends LitElement {
400400
? `${domainToName(this.hass.localize, item.context_domain)}:
401401
${
402402
this.hass.localize(
403-
`component.${item.context_domain}.services.${item.context_service}.name`
403+
`component.${item.context_domain}.services.${item.context_service}.name`,
404+
this.hass.services[item.context_domain]?.[item.context_service]
405+
?.description_placeholders
404406
) ||
405407
this.hass.services[item.context_domain]?.[item.context_service]?.name ||
406408
item.context_service

src/panels/lovelace/common/handle-action.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,10 @@ export const handleAction = async (
6767
await hass.loadBackendTranslation("title");
6868
const localize = await hass.loadBackendTranslation("services");
6969
serviceName = `${domainToName(localize, domain)}: ${
70-
localize(`component.${domain}.services.${service}.name`) ||
70+
localize(
71+
`component.${domain}.services.${service}.name`,
72+
hass.services[domain][service].description_placeholders
73+
) ||
7174
serviceDomains[domain][service].name ||
7275
service
7376
}`;

0 commit comments

Comments
 (0)