Skip to content

Commit 5c73a06

Browse files
authored
Regenerate service-picker valueRenderer on localize update (#27640)
* Regenerate service-picker valueRenderer on localize update * memoize services
1 parent 9943dae commit 5c73a06

File tree

1 file changed

+40
-29
lines changed

1 file changed

+40
-29
lines changed

src/components/ha-service-picker.ts

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -76,34 +76,42 @@ class HaServicePicker extends LitElement {
7676
</ha-combo-box-item>
7777
`;
7878

79-
private _valueRenderer: PickerValueRenderer = (value) => {
80-
const serviceId = value;
81-
const [domain, service] = serviceId.split(".");
82-
83-
if (!this.hass.services[domain]?.[service]) {
84-
return html`
85-
<ha-svg-icon slot="start" .path=${mdiRoomService}></ha-svg-icon>
86-
<span slot="headline">${value}</span>
87-
`;
88-
}
89-
90-
const serviceName =
91-
this.hass.localize(`component.${domain}.services.${service}.name`) ||
92-
this.hass.services[domain][service].name ||
93-
service;
94-
95-
return html`
96-
<ha-service-icon
97-
slot="start"
98-
.hass=${this.hass}
99-
.service=${serviceId}
100-
></ha-service-icon>
101-
<span slot="headline">${serviceName}</span>
102-
${this.showServiceId
103-
? html`<span slot="supporting-text" class="code">${serviceId}</span>`
104-
: nothing}
105-
`;
106-
};
79+
private _valueRenderer = memoizeOne(
80+
(
81+
localize: LocalizeFunc,
82+
services: HomeAssistant["services"]
83+
): PickerValueRenderer =>
84+
(value) => {
85+
const serviceId = value;
86+
const [domain, service] = serviceId.split(".");
87+
88+
if (!services[domain]?.[service]) {
89+
return html`
90+
<ha-svg-icon slot="start" .path=${mdiRoomService}></ha-svg-icon>
91+
<span slot="headline">${value}</span>
92+
`;
93+
}
94+
95+
const serviceName =
96+
localize(`component.${domain}.services.${service}.name`) ||
97+
services[domain][service].name ||
98+
service;
99+
100+
return html`
101+
<ha-service-icon
102+
slot="start"
103+
.hass=${this.hass}
104+
.service=${serviceId}
105+
></ha-service-icon>
106+
<span slot="headline">${serviceName}</span>
107+
${this.showServiceId
108+
? html`<span slot="supporting-text" class="code"
109+
>${serviceId}</span
110+
>`
111+
: nothing}
112+
`;
113+
}
114+
);
107115

108116
protected render(): TemplateResult {
109117
const placeholder =
@@ -123,7 +131,10 @@ class HaServicePicker extends LitElement {
123131
.value=${this.value}
124132
.getItems=${this._getItems}
125133
.rowRenderer=${this._rowRenderer}
126-
.valueRenderer=${this._valueRenderer}
134+
.valueRenderer=${this._valueRenderer(
135+
this.hass.localize,
136+
this.hass.services
137+
)}
127138
@value-changed=${this._valueChanged}
128139
>
129140
</ha-generic-picker>

0 commit comments

Comments
 (0)