Skip to content

Commit 366ed75

Browse files
Review comments.
1 parent 982a8e2 commit 366ed75

File tree

5 files changed

+52
-51
lines changed

5 files changed

+52
-51
lines changed

src/index.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,8 @@ export default class Carousel extends Component {
442442
width,
443443
height,
444444
marginBottom: dots ? '20px' : 0,
445-
...isVertical && { display: 'flex', flexDirection: 'row-reverse' }
445+
...(isVertical && !arrows) && { display: 'flex', flexDirection: 'row-reverse' },
446+
...(isVertical && arrows) && { display: 'flex', flexDirection: 'row' }
446447
};
447448
const viewportStyle = { ...(style.viewport || {}),
448449
width: viewportWidth,
@@ -470,7 +471,7 @@ export default class Carousel extends Component {
470471
arrowOffset -= this.props.verticalArrowPadding;
471472
}
472473

473-
const arrowStyle = { ...isVertical && { ...!arrows && { transform: `translateY(${ arrowOffset }px)` } } };
474+
const customArrowStyle = { ...(isVertical && !arrows) && { transform: `translateY(${ arrowOffset }px)` } };
474475

475476
return (
476477
<div className={ classes } style={ containerStyle } ref={ c => { this._containerRef = c; } }>
@@ -505,7 +506,6 @@ export default class Carousel extends Component {
505506
{ this.renderSlides() }
506507
</ul>
507508
</div>
508-
<div className='control-div' style={{ ...arrowStyle }}>
509509
{
510510
controls.filter(Control => {
511511
return Control.position !== 'top';
@@ -519,10 +519,10 @@ export default class Carousel extends Component {
519519
prevSlide={ this.prevSlide }
520520
goToSlide={ this.goToSlide }
521521
arrows={ arrows }
522-
infinite={ infinite } />
522+
infinite={ infinite }
523+
customArrowStyle={ customArrowStyle }/>
523524
))
524525
}
525-
</div>
526526
</div>
527527
</div>
528528
);

src/stories/CustomArrow.js

Lines changed: 0 additions & 31 deletions
This file was deleted.

src/stories/CustomArrows.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import React from 'react';
2+
import PropTypes from 'prop-types';
3+
4+
const CustomArrows = ({ nextSlide, prevSlide, overrideArrowStyle = {}, infinite, numSlides, selectedIndex, topArrowImage, bottomArrowImage, customArrowStyle }) => {
5+
const hasNext = (direction) => {
6+
return infinite || (['top', 'left'].includes(direction) ? selectedIndex > 0 : selectedIndex < numSlides - 1);
7+
}
8+
9+
const hasNextBottom = hasNext('bottom');
10+
const hasNextTop = hasNext('top');
11+
12+
return (
13+
<div style={ customArrowStyle } className='custom-arrows-div'>
14+
<button className='carousel-custom-arrow' disabled={ !hasNextTop } onClick={ hasNextTop ? prevSlide : nextSlide } style={{ ...overrideArrowStyle, ...{ opacity: !hasNextTop ? 0.5 : 1 }, ...{ cursor: !hasNextTop ? 'not-allowed' : 'pointer' } }}>
15+
{topArrowImage}
16+
</button>
17+
<button className='carousel-custom-arrow' disabled={ !hasNextBottom } onClick={ hasNextBottom ? nextSlide : prevSlide } style={{ ...overrideArrowStyle, ...{ opacity: !hasNextBottom ? 0.5 : 1 }, ...{ cursor: !hasNextBottom ? 'not-allowed' : 'pointer' } }}>
18+
{bottomArrowImage}
19+
</button>
20+
</div>
21+
);
22+
};
23+
24+
CustomArrows.propTypes = {
25+
prevSlide: PropTypes.func,
26+
nextSlide: PropTypes.func,
27+
visible: PropTypes.bool,
28+
overrideArrowStyle: PropTypes.object,
29+
triggerNextSlide: PropTypes.number,
30+
infinite: PropTypes.bool,
31+
numSlides: PropTypes.number,
32+
selectedIndex: PropTypes.number,
33+
topArrowImage: PropTypes.node,
34+
bottomArrowImage: PropTypes.node,
35+
customArrowStyle: PropTypes.object
36+
};
37+
38+
export default CustomArrows;

src/stories/index.stories.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import React, { Fragment, useState } from 'react';
44
import PropTypes from 'prop-types';
55
import Carousel from '../index';
6-
import CustomArrow from './CustomArrow';
6+
import CustomArrows from './CustomArrows';
77
import DownArrow from '../../test/images/test-down-arrow.svg';
88
import UpArrow from '../../test/images/test-up-arrow.svg';
99

@@ -67,9 +67,9 @@ CustomDots.propTypes = {
6767

6868
const testButtons = ['test1', 'test2', 'test3', 'test4'].map((item) => <button style={{ fontSize: '20px' }}>{item}</button>);
6969

70-
export const verticalInfiniteWithCellPadding = () =>
70+
export const verticalInfiniteWithCellPaddingWithDotsAndDefaultArrows = () =>
7171
<Carousel height='450px' width='450px' cellPadding={ 5 } infinite={ true } arrows={ true }
72-
dots={ false } isVertical={ true } >
72+
dots={ true } isVertical={ true } >
7373
{ imgElements }
7474
</Carousel>;
7575

@@ -82,11 +82,8 @@ export const verticalNonInfiniteWithCellPaddingWithDefaultArrows = () =>
8282
export const verticalNonInfiniteButtonsWithCellPaddingWithCustomArrows = () =>
8383
<Carousel height='450px' width='450px' cellPadding={ 5 } infinite={ false } arrows={ false }
8484
dots={ false } isVertical={ true } verticalArrowPadding={ 30 } controls={ [{
85-
component: CustomArrow,
86-
props: { direction: 'top', overrideArrowStyle: { border: 'none', background: 'none' }, customImage: <UpArrow/> }
87-
}, {
88-
component: CustomArrow,
89-
props: { direction: 'bottom', overrideArrowStyle: { border: 'none', background: 'none' }, customImage: <DownArrow/> }
85+
component: CustomArrows,
86+
props: { overrideArrowStyle: { border: 'none', background: 'none' }, topArrowImage: <UpArrow/>, bottomArrowImage: <DownArrow/> }
9087
}] }>
9188
{ testButtons }
9289
</Carousel>;

test/unit/carousel.tests.js

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import chai, { expect } from 'chai';
55
import sinon from 'sinon';
66
import sinonChai from 'sinon-chai';
77
import Carousel from '../../src/index';
8-
import CustomArrow from '../../src/stories/CustomArrow';
8+
import CustomArrows from '../../src/stories/CustomArrows';
99
import UpArrow from '../images/test-up-arrow.svg';
1010
import DownArrow from '../images/test-down-arrow.svg';
1111

@@ -480,18 +480,15 @@ describe('Carousel', () => {
480480
isVertical={ true }
481481
arrows={ false }
482482
controls={ [{
483-
component: CustomArrow,
484-
props: { direction: 'top', overrideArrowStyle: { border: 'none', background: 'none' }, customImage: <UpArrow/> }
485-
}, {
486-
component: CustomArrow,
487-
props: { direction: 'bottom', overrideArrowStyle: { border: 'none', background: 'none' }, customImage: <DownArrow/> }
483+
component: CustomArrows,
484+
props: { overrideArrowStyle: { border: 'none', background: 'none' }, topArrowImage: <UpArrow/>, bottomArrowImage: <DownArrow/> }
488485
}] }>
489486
<div id='slide1' />
490487
<div id='slide2' />
491488
<div id='slide3' />
492489
</Carousel>);
493490

494-
const controlComponent = tree.find('.control-div');
491+
const controlComponent = tree.find('.custom-arrows-div');
495492
expect(controlComponent.childAt(0).html()).to.eql('<button class="carousel-custom-arrow" disabled="" style="background: none; opacity: 0.5; cursor: not-allowed;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="m0 16.67 2.829 2.83 9.175-9.339 9.167 9.339L24 16.67 12.004 4.5z"></path></svg></button>');
496493
expect(controlComponent.childAt(1).html()).to.eql('<button class="carousel-custom-arrow" style="background: none; opacity: 1; cursor: pointer;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M0 7.33 2.829 4.5l9.175 9.339L21.171 4.5 24 7.33 12.004 19.5z"></path></svg></button>');
497494

0 commit comments

Comments
 (0)