Skip to content

Commit 62c7693

Browse files
committed
readding useKeyboard override to ensure correct pagestep size
#2917 removes the pageSize prop from useSliderState so we need to manually override the page size on pageup pagedown
1 parent bebd2cc commit 62c7693

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

packages/@react-aria/color/src/useColorSlider.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {AriaColorSliderProps} from '@react-types/color';
1414
import {ColorSliderState} from '@react-stately/color';
1515
import {HTMLAttributes, RefObject} from 'react';
1616
import {mergeProps} from '@react-aria/utils';
17+
import {useKeyboard} from '@react-aria/interactions';
1718
import {useLocale} from '@react-aria/i18n';
1819
import {useSlider, useSliderThumb} from '@react-aria/slider';
1920

@@ -61,6 +62,32 @@ export function useColorSlider(props: ColorSliderAriaOptions, state: ColorSlider
6162
inputRef
6263
}, state);
6364

65+
let {step, pageSize} = state.value.getChannelRange(channel);
66+
let {keyboardProps} = useKeyboard({
67+
onKeyDown(e) {
68+
// these are the cases that useMove or useSlider don't handle
69+
if (!/^(PageUp|PageDown)$/.test(e.key)) {
70+
e.continuePropagation();
71+
return;
72+
}
73+
// same handling as useMove, stopPropagation to prevent useSlider from handling the event as well.
74+
e.preventDefault();
75+
let pageStep = Math.max(pageSize, step);
76+
// remember to set this so that onChangeEnd is fired
77+
state.setThumbDragging(0, true);
78+
switch (e.key) {
79+
case 'PageUp':
80+
state.incrementThumb(0, pageStep);
81+
break;
82+
case 'PageDown':
83+
state.decrementThumb(0, pageStep);
84+
break;
85+
}
86+
// wait a frame to ensure value has changed then unset this so that onChangeEnd is fired
87+
state.setThumbDragging(0, false);
88+
}
89+
});
90+
6491
let generateBackground = () => {
6592
let value = state.getDisplayColor();
6693
let to: string;
@@ -113,7 +140,7 @@ export function useColorSlider(props: ColorSliderAriaOptions, state: ColorSlider
113140
background: generateBackground()
114141
}
115142
},
116-
inputProps,
143+
inputProps: mergeProps(inputProps, keyboardProps),
117144
thumbProps: {
118145
...thumbProps,
119146
style: {

0 commit comments

Comments
 (0)