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} >