mirror of
https://github.com/home-assistant/frontend.git
synced 2025-12-20 02:38:53 +00:00
Add support for service action description placeholders (#27636)
Co-authored-by: Simon Lamon <32477463+silamon@users.noreply.github.com>
This commit is contained in:
@@ -465,10 +465,16 @@ export class HaServiceControl extends LitElement {
|
||||
? computeObjectId(this._value.action)
|
||||
: undefined;
|
||||
|
||||
const descriptionPlaceholders =
|
||||
domain && serviceName
|
||||
? this.hass.services[domain][serviceName].description_placeholders
|
||||
: undefined;
|
||||
|
||||
const description =
|
||||
(serviceName &&
|
||||
this.hass.localize(
|
||||
`component.${domain}.services.${serviceName}.description`
|
||||
`component.${domain}.services.${serviceName}.description`,
|
||||
descriptionPlaceholders
|
||||
)) ||
|
||||
serviceData?.description;
|
||||
|
||||
@@ -537,7 +543,8 @@ export class HaServiceControl extends LitElement {
|
||||
.disabled=${this.disabled}
|
||||
.value=${this._value?.data?.entity_id}
|
||||
.label=${this.hass.localize(
|
||||
`component.${domain}.services.${serviceName}.fields.entity_id.description`
|
||||
`component.${domain}.services.${serviceName}.fields.entity_id.description`,
|
||||
descriptionPlaceholders
|
||||
) || entityId.description}
|
||||
@value-changed=${this._entityPicked}
|
||||
allow-custom-entity
|
||||
@@ -575,7 +582,8 @@ export class HaServiceControl extends LitElement {
|
||||
left-chevron
|
||||
.expanded=${!dataField.collapsed}
|
||||
.header=${this.hass.localize(
|
||||
`component.${domain}.services.${serviceName}.sections.${dataField.key}.name`
|
||||
`component.${domain}.services.${serviceName}.sections.${dataField.key}.name`,
|
||||
descriptionPlaceholders
|
||||
) ||
|
||||
dataField.name ||
|
||||
dataField.key}
|
||||
@@ -611,7 +619,10 @@ export class HaServiceControl extends LitElement {
|
||||
serviceName: string | undefined
|
||||
) {
|
||||
return this.hass!.localize(
|
||||
`component.${domain}.services.${serviceName}.sections.${dataField.key}.description`
|
||||
`component.${domain}.services.${serviceName}.sections.${dataField.key}.description`,
|
||||
domain && serviceName
|
||||
? this.hass.services[domain][serviceName].description_placeholders
|
||||
: undefined
|
||||
);
|
||||
}
|
||||
|
||||
@@ -658,6 +669,10 @@ export class HaServiceControl extends LitElement {
|
||||
}
|
||||
|
||||
const showOptional = showOptionalToggle(dataField);
|
||||
const descriptionPlaceholders =
|
||||
domain && serviceName
|
||||
? this.hass.services[domain][serviceName].description_placeholders
|
||||
: undefined;
|
||||
|
||||
return dataField.selector &&
|
||||
(!dataField.advanced ||
|
||||
@@ -679,7 +694,8 @@ export class HaServiceControl extends LitElement {
|
||||
></ha-checkbox>`}
|
||||
<span slot="heading"
|
||||
>${this.hass.localize(
|
||||
`component.${domain}.services.${serviceName}.fields.${dataField.key}.name`
|
||||
`component.${domain}.services.${serviceName}.fields.${dataField.key}.name`,
|
||||
descriptionPlaceholders
|
||||
) ||
|
||||
dataField.name ||
|
||||
dataField.key}</span
|
||||
@@ -689,7 +705,8 @@ export class HaServiceControl extends LitElement {
|
||||
breaks
|
||||
allow-svg
|
||||
.content=${this.hass.localize(
|
||||
`component.${domain}.services.${serviceName}.fields.${dataField.key}.description`
|
||||
`component.${domain}.services.${serviceName}.fields.${dataField.key}.description`,
|
||||
descriptionPlaceholders
|
||||
) || dataField?.description}
|
||||
></ha-markdown>
|
||||
</span>
|
||||
|
||||
@@ -92,8 +92,14 @@ class HaServicePicker extends LitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
const descriptionPlaceholders =
|
||||
this.hass.services[domain][service].description_placeholders;
|
||||
|
||||
const serviceName =
|
||||
localize(`component.${domain}.services.${service}.name`) ||
|
||||
localize(
|
||||
`component.${domain}.services.${service}.name`,
|
||||
descriptionPlaceholders
|
||||
) ||
|
||||
services[domain][service].name ||
|
||||
service;
|
||||
|
||||
@@ -163,16 +169,21 @@ class HaServicePicker extends LitElement {
|
||||
const serviceId = `${domain}.${service}`;
|
||||
const domainName = domainToName(localize, domain);
|
||||
|
||||
const descriptionPlaceholders =
|
||||
this.hass.services[domain][service].description_placeholders;
|
||||
|
||||
const name =
|
||||
this.hass.localize(
|
||||
`component.${domain}.services.${service}.name`
|
||||
`component.${domain}.services.${service}.name`,
|
||||
descriptionPlaceholders
|
||||
) ||
|
||||
services[domain][service].name ||
|
||||
service;
|
||||
|
||||
const description =
|
||||
this.hass.localize(
|
||||
`component.${domain}.services.${service}.description`
|
||||
`component.${domain}.services.${service}.description`,
|
||||
descriptionPlaceholders
|
||||
) ||
|
||||
services[domain][service].description ||
|
||||
"";
|
||||
|
||||
@@ -219,9 +219,13 @@ const tryDescribeAction = <T extends ActionType>(
|
||||
|
||||
if (config.action) {
|
||||
const [domain, serviceName] = config.action.split(".", 2);
|
||||
const descriptionPlaceholders =
|
||||
hass.services[domain][serviceName].description_placeholders;
|
||||
const service =
|
||||
hass.localize(`component.${domain}.services.${serviceName}.name`) ||
|
||||
hass.services[domain][serviceName]?.name;
|
||||
hass.localize(
|
||||
`component.${domain}.services.${serviceName}.name`,
|
||||
descriptionPlaceholders
|
||||
) || hass.services[domain][serviceName]?.name;
|
||||
|
||||
if (config.metadata) {
|
||||
return hass.localize(
|
||||
|
||||
@@ -871,13 +871,17 @@ class DialogAddAutomationElement
|
||||
`,
|
||||
key: `${DYNAMIC_PREFIX}${dmn}.${service}`,
|
||||
name: `${domain ? "" : `${domainToName(localize, dmn)}: `}${
|
||||
this.hass.localize(`component.${dmn}.services.${service}.name`) ||
|
||||
this.hass.localize(
|
||||
`component.${dmn}.services.${service}.name`,
|
||||
this.hass.services[dmn][service].description_placeholders
|
||||
) ||
|
||||
services[dmn][service]?.name ||
|
||||
service
|
||||
}`,
|
||||
description:
|
||||
this.hass.localize(
|
||||
`component.${dmn}.services.${service}.description`
|
||||
`component.${dmn}.services.${service}.description`,
|
||||
this.hass.services[dmn][service].description_placeholders
|
||||
) ||
|
||||
services[dmn][service]?.description ||
|
||||
"",
|
||||
|
||||
@@ -93,8 +93,12 @@ export default class HaAutomationSidebarAction extends LitElement {
|
||||
".",
|
||||
2
|
||||
);
|
||||
|
||||
title = `${domainToName(this.hass.localize, domain)}: ${
|
||||
this.hass.localize(`component.${domain}.services.${service}.name`) ||
|
||||
this.hass.localize(
|
||||
`component.${domain}.services.${service}.name`,
|
||||
this.hass.services[domain][service].description_placeholders
|
||||
) ||
|
||||
this.hass.services[domain][service]?.name ||
|
||||
title
|
||||
}`;
|
||||
|
||||
@@ -135,6 +135,11 @@ class HaPanelDevAction extends LitElement {
|
||||
? computeObjectId(this._serviceData?.action)
|
||||
: undefined;
|
||||
|
||||
const descriptionPlaceholders =
|
||||
domain && serviceName
|
||||
? this.hass.services[domain][serviceName].description_placeholders
|
||||
: undefined;
|
||||
|
||||
return html`
|
||||
<div class="content">
|
||||
<p>
|
||||
@@ -307,12 +312,14 @@ class HaPanelDevAction extends LitElement {
|
||||
<td><pre>${field.key}</pre></td>
|
||||
<td>
|
||||
${this.hass.localize(
|
||||
`component.${domain}.services.${serviceName}.fields.${field.key}.description`
|
||||
`component.${domain}.services.${serviceName}.fields.${field.key}.description`,
|
||||
descriptionPlaceholders
|
||||
) || field.description}
|
||||
</td>
|
||||
<td>
|
||||
${this.hass.localize(
|
||||
`component.${domain}.services.${serviceName}.fields.${field.key}.example`
|
||||
`component.${domain}.services.${serviceName}.fields.${field.key}.example`,
|
||||
descriptionPlaceholders
|
||||
) || field.example}
|
||||
</td>
|
||||
</tr>`
|
||||
@@ -643,7 +650,11 @@ class HaPanelDevAction extends LitElement {
|
||||
} catch (_err: any) {
|
||||
value =
|
||||
this.hass.localize(
|
||||
`component.${domain}.services.${serviceName}.fields.${field.key}.example`
|
||||
`component.${domain}.services.${serviceName}.fields.${field.key}.example`,
|
||||
domain && serviceName
|
||||
? this.hass.services[domain][serviceName]
|
||||
.description_placeholders
|
||||
: undefined
|
||||
) || field.example;
|
||||
}
|
||||
example[field.key] = value;
|
||||
|
||||
@@ -400,7 +400,9 @@ class HaLogbookRenderer extends LitElement {
|
||||
? `${domainToName(this.hass.localize, item.context_domain)}:
|
||||
${
|
||||
this.hass.localize(
|
||||
`component.${item.context_domain}.services.${item.context_service}.name`
|
||||
`component.${item.context_domain}.services.${item.context_service}.name`,
|
||||
this.hass.services[item.context_domain][item.context_service]
|
||||
.description_placeholders
|
||||
) ||
|
||||
this.hass.services[item.context_domain]?.[item.context_service]?.name ||
|
||||
item.context_service
|
||||
|
||||
@@ -67,7 +67,10 @@ export const handleAction = async (
|
||||
await hass.loadBackendTranslation("title");
|
||||
const localize = await hass.loadBackendTranslation("services");
|
||||
serviceName = `${domainToName(localize, domain)}: ${
|
||||
localize(`component.${domain}.services.${service}.name`) ||
|
||||
localize(
|
||||
`component.${domain}.services.${service}.name`,
|
||||
hass.services[domain][service].description_placeholders
|
||||
) ||
|
||||
serviceDomains[domain][service].name ||
|
||||
service
|
||||
}`;
|
||||
|
||||
Reference in New Issue
Block a user