Skip to content

Commit 95e2884

Browse files
authored
fix: drag out and back should trigger (#1013)
1 parent 66127fe commit 95e2884

File tree

3 files changed

+47
-14
lines changed

3 files changed

+47
-14
lines changed

docs/examples/editable.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ export default () => {
3333
onChangeComplete={(nextValue) => {
3434
console.log('Complete', nextValue);
3535
}}
36+
// handleRender={(ori, handleProps) => {
37+
// if (handleProps.index === 0) {
38+
// console.log('handleRender', ori, handleProps);
39+
// }
40+
// return ori;
41+
// }}
3642
styles={{
3743
rail: {
3844
background: `linear-gradient(to right, blue, red)`,

src/hooks/useDrag.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,16 @@ function useDrag(
5959

6060
const flushValues = (nextValues: number[], nextValue?: number, deleteMark?: boolean) => {
6161
// Perf: Only update state when value changed
62-
if (cacheValues.some((val, i) => val !== nextValues[i]) || deleteMark) {
63-
if (nextValue !== undefined) {
64-
setDraggingValue(nextValue);
65-
}
66-
setCacheValues(nextValues);
62+
if (nextValue !== undefined) {
63+
setDraggingValue(nextValue);
64+
}
65+
setCacheValues(nextValues);
6766

68-
let changeValues = nextValues;
69-
if (deleteMark) {
70-
changeValues = nextValues.filter((_, i) => i !== draggingIndex);
71-
}
72-
triggerChange(changeValues);
67+
let changeValues = nextValues;
68+
if (deleteMark) {
69+
changeValues = nextValues.filter((_, i) => i !== draggingIndex);
7370
}
71+
triggerChange(changeValues);
7472
};
7573

7674
const updateCacheValue = useEvent(

tests/Range.test.tsx

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ describe('Range', () => {
5353
}
5454
}
5555

56+
function doMouseDrag(end: number) {
57+
const mouseMove = createEvent.mouseMove(document);
58+
(mouseMove as any).pageX = end;
59+
(mouseMove as any).pageY = end;
60+
fireEvent(document, mouseMove);
61+
}
62+
5663
function doMouseMove(
5764
container: HTMLElement,
5865
start: number,
@@ -62,10 +69,7 @@ describe('Range', () => {
6269
doMouseDown(container, start, element);
6370

6471
// Drag
65-
const mouseMove = createEvent.mouseMove(document);
66-
(mouseMove as any).pageX = end;
67-
(mouseMove as any).pageY = end;
68-
fireEvent(document, mouseMove);
72+
doMouseDrag(end);
6973
}
7074

7175
function doTouchMove(
@@ -695,6 +699,31 @@ describe('Range', () => {
695699
expect(onChangeComplete).toHaveBeenCalledWith([50, 100]);
696700
});
697701

702+
it('out and back', () => {
703+
const onChange = jest.fn();
704+
const onChangeComplete = jest.fn();
705+
const { container } = render(
706+
<Slider
707+
onChange={onChange}
708+
onChangeComplete={onChangeComplete}
709+
min={0}
710+
max={100}
711+
defaultValue={[0, 50]}
712+
range={{ editable: true }}
713+
/>,
714+
);
715+
716+
doMouseMove(container, 0, 1000);
717+
expect(onChange).toHaveBeenCalledWith([50]);
718+
719+
doMouseDrag(0);
720+
expect(onChange).toHaveBeenCalledWith([0, 50]);
721+
722+
// Fire mouse up
723+
fireEvent.mouseUp(container.querySelector('.rc-slider-handle'));
724+
expect(onChangeComplete).toHaveBeenCalledWith([0, 50]);
725+
});
726+
698727
it('controlled', () => {
699728
const onChange = jest.fn();
700729
const onChangeComplete = jest.fn();

0 commit comments

Comments
 (0)