Skip to content
This repository was archived by the owner on May 2, 2019. It is now read-only.

Commit 55efc80

Browse files
committed
feat(dots): Implemented dots and dotClass
1 parent 3f5fb9f commit 55efc80

File tree

4 files changed

+63
-10
lines changed

4 files changed

+63
-10
lines changed

examples/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { Component } from 'react';
22
import ReactDOM from 'react-dom';
3-
import { Slider, Slides, PrevArrow, NextArrow } from '../src';
3+
import { Slider, Slides, PrevArrow, NextArrow, Dots } from '../src';
44

55
import './index.css';
66

@@ -53,6 +53,7 @@ class NonInfinite extends Component {
5353
</Slides>
5454
<NextArrow activeClassName="non-infinite-right--active"
5555
inactiveClassName="non-infinite-right--inactive" />
56+
<Dots />
5657
</Slider>
5758
);
5859
}
@@ -73,6 +74,7 @@ class Infinite extends Component {
7374
<div style={slideStyle}><h1>6</h1></div>
7475
</Slides>
7576
<NextArrow />
77+
<Dots />
7678
</Slider>
7779
);
7880
}

src/Dots.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import React, { Component, PropTypes } from 'react';
2+
3+
const range = n => [...Array(n)].map((_, i) => i);
4+
5+
class Dots extends Component {
6+
static propTypes = {
7+
className: PropTypes.string,
8+
currentSlide: PropTypes.number,
9+
slideCount: PropTypes.number,
10+
handleSlideShift: PropTypes.func
11+
}
12+
13+
render() {
14+
const { className, slideCount, currentSlide } = this.props;
15+
const dotStyle = { display: 'flex', justifyContent: 'center'};
16+
17+
const dots = range(slideCount).map((x, i) => {
18+
const isActive = i === currentSlide;
19+
const style = {
20+
width: 8,
21+
height: 8,
22+
borderRadius: 8,
23+
backgroundColor: 'black',
24+
opacity: isActive ? 1 : 0.2,
25+
margin: 3
26+
};
27+
28+
return (
29+
<div className={isActive ? 'active' : ''} style={style} key={i} />
30+
);
31+
});
32+
33+
return (
34+
<div style={dotStyle} className={className ? className : 'slick-dots'} >
35+
{dots}
36+
</div>
37+
);
38+
}
39+
}
40+
41+
export default Dots;

src/Slider.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -281,29 +281,29 @@ class Slider extends Component {
281281
const { children, vertical, infinite, swipe, draggable } = this.props;
282282
const { transitionSpeed, transitionTimingFn } = this.props;
283283
const { beforeChange, afterChange } = this.props;
284-
const [ leftArrow, slides, rightArrow ] = children;
284+
const [ leftArrow, slides, rightArrow, customComponent ] = children;
285285
const { currentSlide, translateXOffset, translateYOffset } = this.state;
286286
const slideCount = Children.count(slides.props.children);
287287

288288
// onClick is passed as a props so that dom elements can be custom arrows
289289

290-
const newLeftArrow = cloneElement(leftArrow, {
290+
const newLeftArrow = leftArrow !== undefined ? cloneElement(leftArrow, {
291291
key: 0,
292292
handleClick: () => { this.handleSlideShift(-1); },
293293
onClick: () => { this.handleSlideShift(-1); },
294294
currentSlide,
295295
infinite
296-
});
296+
}) : null;
297297

298298
// Need to pass slideCount to check if end of slide has been reached.
299-
const newRightArrow = cloneElement(rightArrow, {
299+
const newRightArrow = rightArrow !== undefined ? cloneElement(rightArrow, {
300300
key: 2,
301301
handleClick: () => { this.handleSlideShift(1); },
302302
onClick: () => { this.handleSlideShift(1); },
303303
currentSlide,
304304
infinite,
305305
slideCount
306-
});
306+
}) : null;
307307

308308
// TODO Show a warning if transitionSpeed prop is declared on Slides.
309309
const newSlides = cloneElement(slides, {
@@ -329,11 +329,20 @@ class Slider extends Component {
329329
translateYOffset
330330
});
331331

332+
const newCustomComponent = customComponent !== undefined ? cloneElement(customComponent, {
333+
currentSlide,
334+
slideCount,
335+
handleSlideShift: ::this.handleSlideShift
336+
}) : null;
337+
332338
return (
333-
<div ref="slider" style={{ display: 'flex', alignItems: 'center'}}>
334-
{newLeftArrow}
335-
{newSlides}
336-
{newRightArrow}
339+
<div>
340+
<div ref="slider" style={{ display: 'flex', alignItems: 'center'}}>
341+
{newLeftArrow}
342+
{newSlides}
343+
{newRightArrow}
344+
</div>
345+
{newCustomComponent}
337346
</div>
338347
);
339348
}

src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export Slider from './Slider.js';
22
export Slides from './Slides.js';
33
export { PrevArrow, NextArrow } from './Arrows.js';
4+
export Dots from './Dots.js';

0 commit comments

Comments
 (0)