diff --git a/src/components/ha-service-picker.ts b/src/components/ha-service-picker.ts
index 2d9c6c0853f2..b191f2a82882 100644
--- a/src/components/ha-service-picker.ts
+++ b/src/components/ha-service-picker.ts
@@ -76,34 +76,42 @@ class HaServicePicker extends LitElement {
`;
- private _valueRenderer: PickerValueRenderer = (value) => {
- const serviceId = value;
- const [domain, service] = serviceId.split(".");
-
- if (!this.hass.services[domain]?.[service]) {
- return html`
-
- ${value}
- `;
- }
-
- const serviceName =
- this.hass.localize(`component.${domain}.services.${service}.name`) ||
- this.hass.services[domain][service].name ||
- service;
-
- return html`
-
- ${serviceName}
- ${this.showServiceId
- ? html`${serviceId}`
- : nothing}
- `;
- };
+ private _valueRenderer = memoizeOne(
+ (
+ localize: LocalizeFunc,
+ services: HomeAssistant["services"]
+ ): PickerValueRenderer =>
+ (value) => {
+ const serviceId = value;
+ const [domain, service] = serviceId.split(".");
+
+ if (!services[domain]?.[service]) {
+ return html`
+
+ ${value}
+ `;
+ }
+
+ const serviceName =
+ localize(`component.${domain}.services.${service}.name`) ||
+ services[domain][service].name ||
+ service;
+
+ return html`
+
+ ${serviceName}
+ ${this.showServiceId
+ ? html`${serviceId}`
+ : nothing}
+ `;
+ }
+ );
protected render(): TemplateResult {
const placeholder =
@@ -123,7 +131,10 @@ class HaServicePicker extends LitElement {
.value=${this.value}
.getItems=${this._getItems}
.rowRenderer=${this._rowRenderer}
- .valueRenderer=${this._valueRenderer}
+ .valueRenderer=${this._valueRenderer(
+ this.hass.localize,
+ this.hass.services
+ )}
@value-changed=${this._valueChanged}
>