From ae35fd1eb86377547e5feb8fcaac1a1a7a624d47 Mon Sep 17 00:00:00 2001 From: karwosts <32912880+karwosts@users.noreply.github.com> Date: Mon, 9 Oct 2023 05:34:16 -0700 Subject: [PATCH] Fix handling of negative zero in number selectors (#17127) --- src/components/ha-selector/ha-selector-number.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/components/ha-selector/ha-selector-number.ts b/src/components/ha-selector/ha-selector-number.ts index 8c569e4d07..0ed0c02971 100644 --- a/src/components/ha-selector/ha-selector-number.ts +++ b/src/components/ha-selector/ha-selector-number.ts @@ -1,4 +1,4 @@ -import { css, CSSResultGroup, html, LitElement } from "lit"; +import { css, CSSResultGroup, html, LitElement, PropertyValues } from "lit"; import { customElement, property } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; import { fireEvent } from "../../common/dom/fire_event"; @@ -26,6 +26,17 @@ export class HaNumberSelector extends LitElement { @property({ type: Boolean }) public disabled = false; + private _valueStr = ""; + + protected willUpdate(changedProps: PropertyValues) { + if (changedProps.has("value")) { + if (this.value !== Number(this._valueStr)) { + this._valueStr = + !this.value || isNaN(this.value) ? "" : this.value.toString(); + } + } + } + protected render() { const isBox = this.selector.number?.mode === "box"; @@ -64,7 +75,7 @@ export class HaNumberSelector extends LitElement { class=${classMap({ single: this.selector.number?.mode === "box" })} .min=${this.selector.number?.min} .max=${this.selector.number?.max} - .value=${this.value ?? ""} + .value=${this._valueStr ?? ""} .step=${this.selector.number?.step ?? 1} helperPersistent .helper=${isBox ? this.helper : undefined} @@ -86,6 +97,7 @@ export class HaNumberSelector extends LitElement { private _handleInputChange(ev) { ev.stopPropagation(); + this._valueStr = ev.target.value; const value = ev.target.value === "" || isNaN(ev.target.value) ? undefined