From cf5299177737abf3abd1fd748ac665022b8885e1 Mon Sep 17 00:00:00 2001 From: Anurag Hazra Date: Fri, 23 Oct 2020 16:08:12 +0530 Subject: [PATCH] chore: revert meter clamp function (#113) --- src/meter/MeterState.ts | 12 ++++++------ src/meter/helpers.ts | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/meter/MeterState.ts b/src/meter/MeterState.ts index 81fd33484..21b640ec9 100644 --- a/src/meter/MeterState.ts +++ b/src/meter/MeterState.ts @@ -3,8 +3,8 @@ import { useSealedState, } from "reakit-utils/useSealedState"; -import { isFunction, valueToPercent, clampValue } from "../utils"; -import { getDefaultOptimumValue, calculateStatus } from "./helpers"; +import { isFunction, valueToPercent } from "../utils"; +import { getDefaultOptimumValue, calculateStatus, clamp } from "./helpers"; type Status = "safe" | "caution" | "danger" | undefined; @@ -83,10 +83,10 @@ export const useMeterState = ( const initialOptimum = sealed.optimum ?? getDefaultOptimumValue(initialLow, initialHigh); - const value = clampValue(initialValue, min, max); - const optimum = clampValue(initialOptimum, min, max); - let low = clampValue(initialLow, min, max); - let high = clampValue(initialHigh, min, max); + const value = clamp(initialValue, min, max); + const optimum = clamp(initialOptimum, min, max); + let low = clamp(initialLow, min, max); + let high = clamp(initialHigh, min, max); // More inequalities handled // low ≤ high (if both low and high are specified) diff --git a/src/meter/helpers.ts b/src/meter/helpers.ts index 203b7b227..30720350c 100644 --- a/src/meter/helpers.ts +++ b/src/meter/helpers.ts @@ -8,6 +8,22 @@ export function getDefaultOptimumValue(min: number, max: number) { return max < min ? min : min + (max - min) / 2; } +/** + * Handle Inequalities with received values + * + * minimum ≤ value ≤ maximum + * minimum ≤ low ≤ maximum (if low is specified) + * minimum ≤ high ≤ maximum (if high is specified) + * minimum ≤ optimum ≤ maximum (if optimum is specified) + * + * @see https://html.spec.whatwg.org/multipage/form-elements.html#the-meter-element:attr-meter-max-3:~:text=following%20inequalities%20must%20hold + */ +export function clamp(value: number, min: number, max: number) { + if (value == null) return 0; + + return Math.min(Math.max(value, min), max); +} + type CalculateStatusProps = { value: number; optimum: number;