Fix step any in number selector (#19077)

This commit is contained in:
Bram Kragten 2023-12-18 15:24:46 +01:00 committed by GitHub
parent d762a9365f
commit 325ad6f721
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 8 deletions

View File

@ -43,6 +43,22 @@ export class HaNumberSelector extends LitElement {
this.selector.number?.min === undefined || this.selector.number?.min === undefined ||
this.selector.number?.max === undefined; this.selector.number?.max === undefined;
let sliderStep;
if (!isBox) {
sliderStep = this.selector.number!.step ?? 1;
if (sliderStep === "any") {
sliderStep = 1;
// divide the range of the slider by 100 steps
const step =
(this.selector.number!.max! - this.selector.number!.min!) / 100;
// biggest step size is 1, round the step size to a division of 1
while (sliderStep > step) {
sliderStep /= 10;
}
}
}
return html` return html`
<div class="input"> <div class="input">
${!isBox ${!isBox
@ -52,12 +68,10 @@ export class HaNumberSelector extends LitElement {
: ""} : ""}
<ha-slider <ha-slider
labeled labeled
.min=${this.selector.number?.min} .min=${this.selector.number!.min}
.max=${this.selector.number?.max} .max=${this.selector.number!.max}
.value=${this.value ?? ""} .value=${this.value ?? ""}
.step=${this.selector.number?.step === "any" .step=${sliderStep}
? undefined
: this.selector.number?.step ?? 1}
.disabled=${this.disabled} .disabled=${this.disabled}
.required=${this.required} .required=${this.required}
@change=${this._handleSliderChange} @change=${this._handleSliderChange}

View File

@ -70,15 +70,15 @@ const SELECTOR_SCHEMAS = {
number: [ number: [
{ {
name: "min", name: "min",
selector: { number: { mode: "box" } }, selector: { number: { mode: "box", step: "any" } },
}, },
{ {
name: "max", name: "max",
selector: { number: { mode: "box" } }, selector: { number: { mode: "box", step: "any" } },
}, },
{ {
name: "step", name: "step",
selector: { number: { mode: "box" } }, selector: { number: { mode: "box", step: "any" } },
}, },
] as const, ] as const,
object: [] as const, object: [] as const,