Skip to content

Commit

Permalink
improve slider
Browse files Browse the repository at this point in the history
  • Loading branch information
mebtte committed Sep 17, 2023
1 parent 039eded commit e3f319d
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions apps/pwa/src/components/slider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
PointerEvent,
PointerEventHandler,
ReactNode,
useEffect,
useRef,
useState,
} from 'react';
Expand Down Expand Up @@ -79,7 +80,7 @@ function Slider({
}) {
const pointerDownRef = useRef(false);

const [innerPercent, setInnerPercent] = useState<number | undefined>(
const [shadowPercent, setShadowPercent] = useState<number | undefined>(
undefined,
);

Expand All @@ -89,12 +90,12 @@ function Slider({
pointerDownRef.current = true;

const percent = getPointerEventRelativePercent(e);
setInnerPercent(percent);
setShadowPercent(percent);
};
const onPointerMove: PointerEventHandler<HTMLDivElement> = (e) => {
if (pointerDownRef.current) {
const percent = getPointerEventRelativePercent(e);
setInnerPercent(percent);
setShadowPercent(percent);
}
};
const onPointerUp: PointerEventHandler<HTMLDivElement> = (e) => {
Expand All @@ -104,10 +105,19 @@ function Slider({
// eslint-disable-next-line no-unused-expressions
onChange && onChange(max * percent);

window.setTimeout(() => setInnerPercent(undefined), 0);
window.setTimeout(() => setShadowPercent(undefined), 0);
};

const actualPercent = innerPercent ?? current / max;
useEffect(() => {
const onLeaveDocument = () => {
pointerDownRef.current = false;
window.setTimeout(() => setShadowPercent(undefined), 0);
};
document.addEventListener('mouseleave', onLeaveDocument);
return () => document.removeEventListener('mouseleave', onLeaveDocument);
}, []);

const actualPercent = shadowPercent ?? current / max;
return (
<Style
{...props}
Expand Down

0 comments on commit e3f319d

Please sign in to comment.