Skip to content

Commit b0389c0

Browse files
committed
[Slider] Prevent thumb from overflowing the margin, update some tests
1 parent 17c0969 commit b0389c0

File tree

2 files changed

+71
-40
lines changed

2 files changed

+71
-40
lines changed

packages/material-ui-lab/src/Slider/Slider.js

Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ export const style = theme => {
3333
root: {
3434
position: 'relative',
3535
width: '100%',
36-
padding: '16px 0',
36+
padding: '16px 8px',
3737
cursor: 'pointer',
3838
WebkitTapHighlightColor: 'transparent',
3939
'&$disabled': {
4040
cursor: 'no-drop',
4141
},
4242
'&$vertical': {
4343
height: '100%',
44-
padding: '0 16px',
44+
padding: '8px 16px',
4545
},
4646
'&$reverse': {
4747
transform: 'scaleX(-1)',
@@ -50,6 +50,12 @@ export const style = theme => {
5050
transform: 'scaleY(-1)',
5151
},
5252
},
53+
container: {
54+
position: 'relative',
55+
'&$vertical': {
56+
height: '100%',
57+
},
58+
},
5359
/* Tracks styles */
5460
track: {
5561
position: 'absolute',
@@ -392,12 +398,13 @@ class Slider extends React.Component {
392398
component: Component,
393399
classes,
394400
className: classNameProp,
395-
value,
396-
min,
401+
disabled,
397402
max,
398-
vertical,
403+
min,
399404
reverse,
400-
disabled,
405+
theme,
406+
value,
407+
vertical,
401408
...other
402409
} = this.props;
403410

@@ -410,12 +417,23 @@ class Slider extends React.Component {
410417
[classes.activated]: !disabled && currentState === 'activated',
411418
};
412419

413-
const rootClasses = classNames(classes.root, {
414-
[classes.vertical]: vertical,
415-
[classes.reverse]: reverse,
416-
[classes.disabled]: disabled,
420+
const rootClasses = classNames(
421+
classes.root,
422+
{
423+
[classes.vertical]: vertical,
424+
[classes.reverse]: reverse,
425+
[classes.disabled]: disabled,
426+
},
417427
classNameProp,
418-
});
428+
);
429+
430+
const containerClasses = classNames(
431+
classes.container,
432+
{
433+
[classes.vertical]: vertical,
434+
},
435+
classNameProp,
436+
);
419437

420438
const trackBeforeClasses = classNames(classes.track, classes.trackBefore, commonClasses, {
421439
[classes.vertical]: vertical,
@@ -452,19 +470,21 @@ class Slider extends React.Component {
452470
}}
453471
{...other}
454472
>
455-
<div className={trackBeforeClasses} style={inlineTrackBeforeStyles} />
456-
<ButtonBase
457-
className={thumbClasses}
458-
disableRipple
459-
style={inlineThumbStyles}
460-
onBlur={this.handleBlur}
461-
onKeyDown={this.handleKeyDown}
462-
onMouseDown={this.handleMouseDown}
463-
onTouchStartCapture={this.handleTouchStart}
464-
onTouchMove={this.handleMouseMove}
465-
onFocusVisible={this.handleFocus}
466-
/>
467-
<div className={trackAfterClasses} style={inlineTrackAfterStyles} />
473+
<div className={containerClasses}>
474+
<div className={trackBeforeClasses} style={inlineTrackBeforeStyles} />
475+
<ButtonBase
476+
className={thumbClasses}
477+
disableRipple
478+
style={inlineThumbStyles}
479+
onBlur={this.handleBlur}
480+
onKeyDown={this.handleKeyDown}
481+
onMouseDown={this.handleMouseDown}
482+
onTouchStartCapture={this.handleTouchStart}
483+
onTouchMove={this.handleMouseMove}
484+
onFocusVisible={this.handleFocus}
485+
/>
486+
<div className={trackAfterClasses} style={inlineTrackAfterStyles} />
487+
</div>
468488
</Component>
469489
);
470490
}

packages/material-ui-lab/src/Slider/Slider.test.js

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,24 @@ describe('<Slider />', () => {
1111

1212
before(() => {
1313
shallow = createShallow({ dive: true });
14-
classes = getClasses(<Slider />);
14+
classes = getClasses(<Slider value={0} />);
1515
mount = createMount();
1616
});
1717

1818
it('should render a div', () => {
19-
const wrapper = shallow(<Slider />);
19+
const wrapper = shallow(<Slider value={0} />);
2020
assert.strictEqual(wrapper.name(), 'div');
2121
});
2222

2323
it('should render with the default classes', () => {
24-
const wrapper = shallow(<Slider />);
25-
assert.strictEqual(wrapper.hasClass(classes.container), true);
24+
const wrapper = shallow(<Slider value={0} />);
25+
assert.strictEqual(wrapper.hasClass(classes.root), true);
26+
});
27+
28+
it('should render with the default and user classes', () => {
29+
const wrapper = shallow(<Slider value={0} className="mySliderClass" />);
30+
assert.strictEqual(wrapper.hasClass(classes.root), true);
31+
assert.strictEqual(wrapper.hasClass('mySliderClass'), true);
2632
});
2733

2834
it('should call handlers', () => {
@@ -31,7 +37,12 @@ describe('<Slider />', () => {
3137
const handleDragEnd = spy();
3238

3339
const wrapper = mount(
34-
<Slider onChange={handleChange} onDragStart={handleDragStart} onDragEnd={handleDragEnd} />,
40+
<Slider
41+
onChange={handleChange}
42+
onDragStart={handleDragStart}
43+
onDragEnd={handleDragEnd}
44+
value={0}
45+
/>,
3546
);
3647
const button = wrapper.find('button');
3748

@@ -46,24 +57,24 @@ describe('<Slider />', () => {
4657

4758
describe('prop: vertical', () => {
4859
it('should render with the default and vertical classes', () => {
49-
const wrapper = shallow(<Slider vertical />);
50-
assert.strictEqual(wrapper.hasClass(classes.container), true);
60+
const wrapper = shallow(<Slider vertical value={0} />);
61+
assert.strictEqual(wrapper.hasClass(classes.root), true);
5162
assert.strictEqual(wrapper.hasClass(classes.vertical), true);
5263
});
5364
});
5465

5566
describe('prop: reverse', () => {
5667
it('should render with the default and reverse classes', () => {
57-
const wrapper = shallow(<Slider reverse />);
58-
assert.strictEqual(wrapper.hasClass(classes.container), true);
68+
const wrapper = shallow(<Slider reverse value={0} />);
69+
assert.strictEqual(wrapper.hasClass(classes.root), true);
5970
assert.strictEqual(wrapper.hasClass(classes.reverse), true);
6071
});
6172
});
6273

6374
describe('props: vertical & reverse', () => {
6475
it('should render with the default, reverse and vertical classes', () => {
65-
const wrapper = shallow(<Slider reverse vertical />);
66-
assert.strictEqual(wrapper.hasClass(classes.container), true);
76+
const wrapper = shallow(<Slider reverse vertical value={0} />);
77+
assert.strictEqual(wrapper.hasClass(classes.root), true);
6778
assert.strictEqual(wrapper.hasClass(classes.reverse), true);
6879
assert.strictEqual(wrapper.hasClass(classes.vertical), true);
6980
});
@@ -74,7 +85,7 @@ describe('<Slider />', () => {
7485
let wrapper;
7586

7687
before(() => {
77-
wrapper = mount(<Slider onChange={handleChange} disabled />);
88+
wrapper = mount(<Slider onChange={handleChange} disabled value={0} />);
7889
});
7990

8091
it('should render thumb with the disabled classes', () => {
@@ -121,12 +132,12 @@ describe('<Slider />', () => {
121132
const trackBefore = tracks.at(0);
122133
const trackAfter = tracks.at(1);
123134

124-
assert.strictEqual(trackBefore.prop('style').width, 'calc(0% - 0px)');
135+
assert.strictEqual(trackBefore.prop('style').width, '0%');
125136
assert.strictEqual(trackAfter.prop('style').width, 'calc(100% - 5px)');
126137
});
127138

128139
it('after change value should change position of thumb', () => {
129-
wrapper.setProps({ value: 0.5 });
140+
wrapper.setProps({ value: 50 });
130141

131142
clock.tick(transitionComplexDuration);
132143

@@ -139,8 +150,8 @@ describe('<Slider />', () => {
139150
const trackBefore = tracks.at(0);
140151
const trackAfter = tracks.at(1);
141152

142-
assert.strictEqual(trackBefore.prop('style').width, 'calc(50% - 0px)');
143-
assert.strictEqual(trackAfter.prop('style').width, 'calc(50% - 7px)');
153+
assert.strictEqual(trackBefore.prop('style').width, '50%');
154+
assert.strictEqual(trackAfter.prop('style').width, 'calc(100% - 5px)');
144155
});
145156
});
146157
});

0 commit comments

Comments
 (0)