diff --git a/src/components/Slider/Slider.js b/src/components/Slider/Slider.js index 9425ab6083..918dbc79ca 100644 --- a/src/components/Slider/Slider.js +++ b/src/components/Slider/Slider.js @@ -8,7 +8,7 @@ const useAnimationFrame = require('stremio/common/useAnimationFrame'); const useLiveRef = require('stremio/common/useLiveRef'); const styles = require('./styles'); -const Slider = ({ className, value, buffered, minimumValue, maximumValue, disabled, onSlide, onComplete, audioBoost }) => { +const Slider = ({ className, value, buffered, minimumValue, maximumValue, disabled, onSlide, onComplete, audioBoost, stepValue }) => { const minimumValueRef = useLiveRef(minimumValue !== null && !isNaN(minimumValue) ? minimumValue : 0); const maximumValueRef = useLiveRef(maximumValue !== null && !isNaN(maximumValue) ? maximumValue : 100); const valueRef = useLiveRef(value !== null && !isNaN(value) ? Math.min(maximumValueRef.current, Math.max(minimumValueRef.current, value)) : 0); @@ -26,7 +26,8 @@ const Slider = ({ className, value, buffered, minimumValue, maximumValue, disabl const { x: sliderX, width: sliderWidth } = sliderContainerRef.current.getBoundingClientRect(); const thumbStart = Math.min(Math.max(mouseX - sliderX, 0), sliderWidth); const value = (thumbStart / sliderWidth) * (maximumValueRef.current - minimumValueRef.current) + minimumValueRef.current; - return value; + const noramlizedValue = stepValue ? parseFloat((Math.round(value / stepValue) * stepValue).toFixed(2)) : value; + return noramlizedValue; }, []); const retainThumb = React.useCallback(() => { window.addEventListener('blur', onBlur); @@ -158,6 +159,7 @@ Slider.propTypes = { buffered: PropTypes.number, minimumValue: PropTypes.number, maximumValue: PropTypes.number, + stepValue: PropTypes.number, disabled: PropTypes.bool, onSlide: PropTypes.func, onComplete: PropTypes.func, diff --git a/src/routes/Player/SpeedMenu/SpeedMenu.js b/src/routes/Player/SpeedMenu/SpeedMenu.js index 501020e362..b1d927205e 100644 --- a/src/routes/Player/SpeedMenu/SpeedMenu.js +++ b/src/routes/Player/SpeedMenu/SpeedMenu.js @@ -4,38 +4,55 @@ const React = require('react'); const PropTypes = require('prop-types'); const classnames = require('classnames'); const { useTranslation } = require('react-i18next'); -const Option = require('./Option'); -const styles = require('./styles'); +const Button = require('stremio/components/Button').default; +const Slider = require('stremio/components/Slider'); -const RATES = Array.from(Array(8).keys(), (n) => n * 0.25 + 0.25).reverse(); +const styles = require('./styles'); +const RATES = Array.from(Array(8).keys(), (n) => n * 0.25 + 0.25); const SpeedMenu = React.memo(React.forwardRef(({ className, playbackSpeed, onPlaybackSpeedChanged }, ref) => { const { t } = useTranslation(); const onMouseDown = React.useCallback((event) => { event.nativeEvent.speedMenuClosePrevented = true; }, []); - const onOptionSelect = React.useCallback((value) => { + const onSpeedChanged = React.useCallback((value) => { if (typeof onPlaybackSpeedChanged === 'function') { onPlaybackSpeedChanged(value); } - }, [onPlaybackSpeedChanged]); + }, [onPlaybackSpeedChanged, playbackSpeed]); + return (