Skip to content

Commit ae3a405

Browse files
jbouwhsilamon
andauthored
Add support for service action description placeholders (#27636)
Co-authored-by: Simon Lamon <[email protected]>
1 parent ebbcad8 commit ae3a405

File tree

8 files changed

+75
-19
lines changed

8 files changed

+75
-19
lines changed

src/components/ha-service-control.ts

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

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

@@ -537,7 +543,8 @@ export class HaServiceControl extends LitElement {
537543
.disabled=${this.disabled}
538544
.value=${this._value?.data?.entity_id}
539545
.label=${this.hass.localize(
540-
`component.${domain}.services.${serviceName}.fields.entity_id.description`
546+
`component.${domain}.services.${serviceName}.fields.entity_id.description`,
547+
descriptionPlaceholders
541548
) || entityId.description}
542549
@value-changed=${this._entityPicked}
543550
allow-custom-entity
@@ -575,7 +582,8 @@ export class HaServiceControl extends LitElement {
575582
left-chevron
576583
.expanded=${!dataField.collapsed}
577584
.header=${this.hass.localize(
578-
`component.${domain}.services.${serviceName}.sections.${dataField.key}.name`
585+
`component.${domain}.services.${serviceName}.sections.${dataField.key}.name`,
586+
descriptionPlaceholders
579587
) ||
580588
dataField.name ||
581589
dataField.key}
@@ -611,7 +619,10 @@ export class HaServiceControl extends LitElement {
611619
serviceName: string | undefined
612620
) {
613621
return this.hass!.localize(
614-
`component.${domain}.services.${serviceName}.sections.${dataField.key}.description`
622+
`component.${domain}.services.${serviceName}.sections.${dataField.key}.description`,
623+
domain && serviceName
624+
? this.hass.services[domain][serviceName].description_placeholders
625+
: undefined
615626
);
616627
}
617628

@@ -658,6 +669,10 @@ export class HaServiceControl extends LitElement {
658669
}
659670

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

662677
return dataField.selector &&
663678
(!dataField.advanced ||
@@ -679,7 +694,8 @@ export class HaServiceControl extends LitElement {
679694
></ha-checkbox>`}
680695
<span slot="heading"
681696
>${this.hass.localize(
682-
`component.${domain}.services.${serviceName}.fields.${dataField.key}.name`
697+
`component.${domain}.services.${serviceName}.fields.${dataField.key}.name`,
698+
descriptionPlaceholders
683699
) ||
684700
dataField.name ||
685701
dataField.key}</span
@@ -689,7 +705,8 @@ export class HaServiceControl extends LitElement {
689705
breaks
690706
allow-svg
691707
.content=${this.hass.localize(
692-
`component.${domain}.services.${serviceName}.fields.${dataField.key}.description`
708+
`component.${domain}.services.${serviceName}.fields.${dataField.key}.description`,
709+
descriptionPlaceholders
693710
) || dataField?.description}
694711
></ha-markdown>
695712
</span>

src/components/ha-service-picker.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,14 @@ class HaServicePicker extends LitElement {
9292
`;
9393
}
9494

95+
const descriptionPlaceholders =
96+
this.hass.services[domain][service].description_placeholders;
97+
9598
const serviceName =
96-
localize(`component.${domain}.services.${service}.name`) ||
99+
localize(
100+
`component.${domain}.services.${service}.name`,
101+
descriptionPlaceholders
102+
) ||
97103
services[domain][service].name ||
98104
service;
99105

@@ -163,16 +169,21 @@ class HaServicePicker extends LitElement {
163169
const serviceId = `${domain}.${service}`;
164170
const domainName = domainToName(localize, domain);
165171

172+
const descriptionPlaceholders =
173+
this.hass.services[domain][service].description_placeholders;
174+
166175
const name =
167176
this.hass.localize(
168-
`component.${domain}.services.${service}.name`
177+
`component.${domain}.services.${service}.name`,
178+
descriptionPlaceholders
169179
) ||
170180
services[domain][service].name ||
171181
service;
172182

173183
const description =
174184
this.hass.localize(
175-
`component.${domain}.services.${service}.description`
185+
`component.${domain}.services.${service}.description`,
186+
descriptionPlaceholders
176187
) ||
177188
services[domain][service].description ||
178189
"";

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/config/automation/add-automation-element-dialog.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -871,13 +871,17 @@ class DialogAddAutomationElement
871871
`,
872872
key: `${DYNAMIC_PREFIX}${dmn}.${service}`,
873873
name: `${domain ? "" : `${domainToName(localize, dmn)}: `}${
874-
this.hass.localize(`component.${dmn}.services.${service}.name`) ||
874+
this.hass.localize(
875+
`component.${dmn}.services.${service}.name`,
876+
this.hass.services[dmn][service].description_placeholders
877+
) ||
875878
services[dmn][service]?.name ||
876879
service
877880
}`,
878881
description:
879882
this.hass.localize(
880-
`component.${dmn}.services.${service}.description`
883+
`component.${dmn}.services.${service}.description`,
884+
this.hass.services[dmn][service].description_placeholders
881885
) ||
882886
services[dmn][service]?.description ||
883887
"",

src/panels/config/automation/sidebar/ha-automation-sidebar-action.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,12 @@ export default class HaAutomationSidebarAction extends LitElement {
9393
".",
9494
2
9595
);
96+
9697
title = `${domainToName(this.hass.localize, domain)}: ${
97-
this.hass.localize(`component.${domain}.services.${service}.name`) ||
98+
this.hass.localize(
99+
`component.${domain}.services.${service}.name`,
100+
this.hass.services[domain][service].description_placeholders
101+
) ||
98102
this.hass.services[domain][service]?.name ||
99103
title
100104
}`;

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)