From 530ae1578f77dfb0321f9faf762dce631fecaec4 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sun, 29 Dec 2024 22:58:42 +0100 Subject: [PATCH] Prevent invalid values for "auto scroll speed" The min/max limit was only acknowledged when the value was changed via MUIs step logic. In case the number got inputted via keystrokes the limits did not get applied --- src/lib/HelperFunctions.ts | 2 ++ .../desktop/quick-settings/ReaderNavBarDesktopAutoScroll.tsx | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/HelperFunctions.ts b/src/lib/HelperFunctions.ts index d8a8a144..b9685c04 100644 --- a/src/lib/HelperFunctions.ts +++ b/src/lib/HelperFunctions.ts @@ -37,3 +37,5 @@ export const getValueFromObject = (obj: Record, key: string): T return keys.reduce((acc, curr) => acc?.[curr], obj) as T; }; + +export const coerceIn = (value: number, min: number, max: number): number => Math.min(Math.max(value, min), max); diff --git a/src/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopAutoScroll.tsx b/src/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopAutoScroll.tsx index 2972e6c6..50ebb9bf 100644 --- a/src/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopAutoScroll.tsx +++ b/src/modules/reader/components/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopAutoScroll.tsx @@ -17,6 +17,7 @@ import { useRef } from 'react'; import { useReaderAutoScrollContext } from '@/modules/reader/contexts/ReaderAutoScrollContext.tsx'; import { IReaderSettings } from '@/modules/reader/types/Reader.types.ts'; import { AUTO_SCROLL_SPEED } from '@/modules/reader/constants/ReaderSettings.constants.tsx'; +import { coerceIn } from '@/lib/HelperFunctions.ts'; export const ReaderNavBarDesktopAutoScroll = ({ autoScroll, @@ -46,7 +47,7 @@ export const ReaderNavBarDesktopAutoScroll = ({ type="number" size="small" onBlur={(e) => { - const value = +e.target.value; + const value = coerceIn(+e.target.value, AUTO_SCROLL_SPEED.min, AUTO_SCROLL_SPEED.max); if (value !== autoScroll.value) { clearTimeout(updateTimeout.current); @@ -54,7 +55,7 @@ export const ReaderNavBarDesktopAutoScroll = ({ } }} onChange={(e) => { - const value = +e.target.value; + const value = coerceIn(+e.target.value, AUTO_SCROLL_SPEED.min, AUTO_SCROLL_SPEED.max); setAutoScroll({ ...autoScroll, value }, false); clearTimeout(updateTimeout.current);