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

Commit 85e3f6a

Browse files
committed
fix(arrows): Arrows are not disabled in infinite mode
- Remove unnecessary isRequired checks in propTypes for arrows - Fixed bug where right arrow doesn't get disabled when it reaches the end
1 parent 069be1e commit 85e3f6a

File tree

2 files changed

+24
-21
lines changed

2 files changed

+24
-21
lines changed

src/Arrows.js

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,22 @@ import React, { Component, PropTypes } from 'react';
22

33
class LeftArrow extends Component {
44
static propTypes = {
5-
handleClick: PropTypes.func.isRequired,
6-
currentSlide: PropTypes.number.isRequired,
7-
activeClassName: PropTypes.string.isRequired,
8-
inactiveClassName: PropTypes.string.isRequired
5+
handleClick: PropTypes.func,
6+
currentSlide: PropTypes.number,
7+
activeClassName: PropTypes.string,
8+
inactiveClassName: PropTypes.string,
9+
infinite: PropTypes.bool
910
}
1011

11-
// HACK for propsTypes handleClick, currentSlide
1212
static defaultProps = {
13-
handleClick: () => {},
1413
activeClassName: '',
15-
inactiveClassName: '',
16-
currentSlide: 0
14+
inactiveClassName: ''
1715
}
1816

1917
render() {
20-
const { activeClassName, inactiveClassName, currentSlide } = this.props;
18+
const { activeClassName, inactiveClassName, currentSlide, infinite } = this.props;
2119

22-
const className = currentSlide === 0 ? inactiveClassName : activeClassName;
20+
const className = currentSlide === 0 && infinite === false ? inactiveClassName : activeClassName;
2321
const style = className !== '' ? null : {
2422
width: 0,
2523
height: 0,
@@ -37,24 +35,24 @@ class LeftArrow extends Component {
3735

3836
class RightArrow extends Component {
3937
static propTypes = {
40-
handleClick: PropTypes.func.isRequired,
41-
currentSlide: PropTypes.number.isRequired,
42-
activeClassName: PropTypes.string.isRequired,
43-
inactiveClassName: PropTypes.string.isRequired
38+
handleClick: PropTypes.func,
39+
currentSlide: PropTypes.number,
40+
activeClassName: PropTypes.string,
41+
inactiveClassName: PropTypes.string,
42+
infinite: PropTypes.bool,
43+
slideCount: PropTypes.number
4444
}
4545

46-
// HACK for propsTypes handleClick, currentSlide
4746
static defaultProps = {
48-
handleClick: () => {},
4947
activeClassName: '',
50-
inactiveClassName: '',
51-
currentSlide: 0
48+
inactiveClassName: ''
5249
}
5350

5451
render() {
5552
const { activeClassName, inactiveClassName, currentSlide } = this.props;
53+
const { infinite, slideCount } = this.props;
5654

57-
const className = currentSlide === 0 ? inactiveClassName : activeClassName;
55+
const className = (currentSlide + 1) === slideCount && infinite === false ? inactiveClassName : activeClassName;
5856
const style = className !== '' ? null : {
5957
width: 0,
6058
height: 0,

src/Slider.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,17 +97,22 @@ class Slider extends Component {
9797
const { children, transitionSpeed, transitionTimingFn, vertical, infinite } = this.props;
9898
const [ leftArrow, slides, rightArrow ] = children;
9999
const { currentSlide } = this.state;
100+
const slideCount = Children.count(slides.props.children);
100101

101102
const newLeftArrow = cloneElement(leftArrow, {
102103
key: 0,
103104
handleClick: () => { this.handleSlideShift(-1); },
104-
currentSlide
105+
currentSlide,
106+
infinite
105107
});
106108

109+
// Need to pass slideCount to check if end of slide has been reached.
107110
const newRightArrow = cloneElement(rightArrow, {
108111
key: 2,
109112
handleClick: () => { this.handleSlideShift(1); },
110-
currentSlide
113+
currentSlide,
114+
infinite,
115+
slideCount
111116
});
112117

113118
// TODO Show a warning if transitionSpeed prop is declared on Slides.

0 commit comments

Comments
 (0)