Skip to content

Commit e6c9d99

Browse files
[material-ui][Slider] Fix arrow keys past the end for Slider with custom marks (#45050)
Signed-off-by: Josh Kelley <[email protected]> Co-authored-by: ZeeshanTamboli <[email protected]>
1 parent 180cf80 commit e6c9d99

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

packages/mui-material/src/Slider/Slider.test.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1195,6 +1195,54 @@ describe('<Slider />', () => {
11951195
});
11961196
});
11971197
});
1198+
1199+
it('stops at the max value with custom marks', () => {
1200+
const handleChange = stub();
1201+
render(
1202+
<Slider
1203+
marks={[{ value: 10 }, { value: 20 }, { value: 30 }]}
1204+
step={null}
1205+
value={30}
1206+
onChange={handleChange}
1207+
/>,
1208+
);
1209+
1210+
const slider = screen.getByRole('slider');
1211+
expect(slider).to.have.attribute('aria-valuenow', '30');
1212+
1213+
act(() => {
1214+
slider.focus();
1215+
});
1216+
1217+
fireEvent.keyDown(slider, { key: 'ArrowRight' });
1218+
1219+
expect(handleChange.callCount).to.equal(0);
1220+
expect(slider).to.have.attribute('aria-valuenow', '30');
1221+
});
1222+
1223+
it('stops at the min value with custom marks', () => {
1224+
const handleChange = stub();
1225+
render(
1226+
<Slider
1227+
marks={[{ value: 10 }, { value: 20 }, { value: 30 }]}
1228+
step={null}
1229+
value={10}
1230+
onChange={handleChange}
1231+
/>,
1232+
);
1233+
1234+
const slider = screen.getByRole('slider');
1235+
expect(slider).to.have.attribute('aria-valuenow', '10');
1236+
1237+
act(() => {
1238+
slider.focus();
1239+
});
1240+
1241+
fireEvent.keyDown(slider, { key: 'ArrowLeft' });
1242+
1243+
expect(handleChange.callCount).to.equal(0);
1244+
expect(slider).to.have.attribute('aria-valuenow', '10');
1245+
});
11981246
});
11991247

12001248
describe('warnings', () => {

packages/mui-material/src/Slider/useSlider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,9 +311,9 @@ export function useSlider(parameters: UseSliderParameters): UseSliderReturnValue
311311
let newValue: number | number[] = valueInput;
312312
if (marks && step == null) {
313313
const maxMarksValue = marksValues[marksValues.length - 1];
314-
if (newValue > maxMarksValue) {
314+
if (newValue >= maxMarksValue) {
315315
newValue = maxMarksValue;
316-
} else if (newValue < marksValues[0]) {
316+
} else if (newValue <= marksValues[0]) {
317317
newValue = marksValues[0];
318318
} else {
319319
newValue = newValue < value ? marksValues[marksIndex - 1] : marksValues[marksIndex + 1];

0 commit comments

Comments
 (0)