Skip to content

Commit e78f91c

Browse files
authored
<Slider/>- adding startPoint feature (#5011)
1 parent 82aca60 commit e78f91c

File tree

6 files changed

+69
-22
lines changed

6 files changed

+69
-22
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@
219219
"omit": "^1.0.1",
220220
"popper.js": "^1.14.5",
221221
"prop-types": "^15.5.8",
222-
"rc-slider": "^8.0.2",
222+
"rc-slider": "^9.2.0",
223223
"react-collapse": "^4.0.3",
224224
"react-day-picker": "^7.0.7",
225225
"react-dnd": "^2.5.1",

src/Slider/Slider.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ export default class Slider extends Component {
100100
allowCross,
101101
value,
102102
displayMarks,
103+
startPoint,
103104
dataHook,
104105
id,
105106
...rest
@@ -116,6 +117,7 @@ export default class Slider extends Component {
116117
) : (
117118
<Slide
118119
{...rest}
120+
startPoint={startPoint}
119121
handle={this._renderHandle}
120122
marks={displayMarks ? this._getMarks() : {}}
121123
value={Array.isArray(value) ? value[0] : value}
@@ -185,18 +187,22 @@ Slider.propTypes = {
185187

186188
/** Make it disabled */
187189
disabled: PropTypes.bool,
190+
191+
/** Track starts from this value. If undefined, min is used. */
192+
startPoint: PropTypes.number,
188193
};
189194

190195
Slider.defaultProps = {
191196
min: 1,
192197
max: 20,
193198
step: 1,
194-
value: [2, 7],
199+
value: 3,
195200
allowCross: true,
196201
id: generateID(),
197202
displayTooltip: true,
198203
displayMarks: true,
199204
marks: {},
200205
rtl: false,
201206
disabled: false,
207+
startPoint: undefined,
202208
};

src/Slider/Slider.spec.js

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,6 @@ describe('Slider', () => {
3131
expect(await driver.isDotSelected(3)).toBe(true);
3232
});
3333

34-
it('should render slider with multi-range', async () => {
35-
const onChange = jest.fn(value => this.setState({ value }));
36-
const props = { value: [3, 5, 7], min: 1, max: 10, onChange };
37-
38-
const { driver } = render(<Slider {...props} />);
39-
40-
expect(await driver.numOfSliderDots()).toBe(10);
41-
expect(await driver.numOfSliderHandles()).toBe(3);
42-
43-
props.value.forEach(async selectedValue => {
44-
expect(await driver.isDotSelected(selectedValue)).toBe(true);
45-
});
46-
});
47-
4834
it('should show correct value on hover', async () => {
4935
const onChange = jest.fn(value => this.setState({ value }));
5036
const props = { value: [3, 5, 7], min: 1, max: 10, onChange };
@@ -76,7 +62,7 @@ describe('Slider', () => {
7662

7763
it('should display a disabled slider', async () => {
7864
const onChange = jest.fn(value => this.setState({ value }));
79-
const props = { value: [3], onChange, disabled: true };
65+
const props = { value: 3, onChange, disabled: true };
8066

8167
const { driver } = render(<Slider {...props} />);
8268

@@ -146,11 +132,31 @@ describe('Slider', () => {
146132
});
147133

148134
describe(`Range mode`, () => {
135+
const multiRangeValue = [3, 5, 7];
136+
137+
it('should render slider with multi-range', async () => {
138+
const onChange = jest.fn(value => this.setState({ value }));
139+
const props = { value: multiRangeValue, min: 1, max: 10, onChange };
140+
141+
const { driver } = render(<Slider {...props} />);
142+
143+
expect(await driver.numOfSliderDots()).toBe(10);
144+
expect(await driver.numOfSliderHandles()).toBe(3);
145+
146+
props.value.forEach(async selectedValue => {
147+
expect(await driver.isDotSelected(selectedValue)).toBe(true);
148+
});
149+
});
150+
149151
it('should be enabled when array is given to value prop', async () => {
150152
const onChange = jest.fn();
151-
const props = { value: [2, 4, 6], displayTooltip: false, onChange };
153+
const props = {
154+
value: multiRangeValue,
155+
displayTooltip: false,
156+
onChange,
157+
};
152158
const { driver } = render(<Slider {...props} />);
153-
expect(await driver.numOfSliderHandles()).toBe(3);
159+
expect(await driver.numOfSliderHandles()).toBe(props.value.length);
154160
});
155161
});
156162

@@ -161,6 +167,7 @@ describe('Slider', () => {
161167
const { driver } = render(<Slider {...props} />);
162168
expect(await driver.numOfSliderHandles()).toBe(1);
163169
});
170+
164171
it('should be enabled when array with 1 item given to value', async () => {
165172
const onChange = jest.fn();
166173
const props = { value: [2], displayTooltip: false, onChange };

src/Slider/docs/examples.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,28 @@ class SliderWithState extends React.Component {
150150
}
151151
152152
`;
153+
154+
export const startPoint = `
155+
class SliderWithState extends React.Component {
156+
state = { value: 3 };
157+
158+
change = value => this.setState({ value })
159+
160+
render() {
161+
const { value } = this.state;
162+
const marks = {
163+
[-4]: '-4',
164+
[-3]: '-3',
165+
[-2]: '-2',
166+
[-1]: '-1',
167+
0: 0,
168+
1: 1,
169+
2: 2,
170+
3: 3,
171+
4: 4,
172+
};
173+
174+
return (<Slider marks={marks} startPoint={0} onChange={this.change} min={-4} max={4} value={value} displayTooltip={false} />);
175+
}
176+
}
177+
`;

src/Slider/docs/index.story.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ export default {
100100
text: 'Slider supports showing marking values under the slider.',
101101
source: examples.plainSliderMarks,
102102
},
103+
{
104+
title: 'Custom Marks',
105+
text: 'Slider custom marks',
106+
source: examples.customMarks,
107+
},
103108
{
104109
title: 'Multi Value',
105110
text: 'Usually used for user to select the range.',
@@ -117,9 +122,9 @@ export default {
117122
source: examples.states,
118123
},
119124
{
120-
title: 'Custom Marks',
121-
text: 'Slider custom marks',
122-
source: examples.customMarks,
125+
title: 'Start Point',
126+
text: `Slider supports having a Start Point`,
127+
source: examples.startPoint,
123128
},
124129
].map(example),
125130
],

src/Slider/tests/Slider.visual.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ const tests = [
5353
displayMarks: true,
5454
},
5555
},
56+
{
57+
it: 'start point',
58+
props: { startPoint: 4 },
59+
},
5660
],
5761
},
5862
];

0 commit comments

Comments
 (0)