Skip to content

Commit a3277f6

Browse files
Review comments.
1 parent 25f6786 commit a3277f6

File tree

12 files changed

+139
-47
lines changed

12 files changed

+139
-47
lines changed

src/carousel.less

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,17 @@
1717
}
1818

1919
.carousel-arrow-default {
20+
border: 3px solid !important;
21+
border-radius: 50%;
22+
color: rgba(255, 255, 255, 0.9);
2023
height: 32px;
2124
width: 32px;
2225
font-weight: 900;
23-
background: none;
26+
background: rgba(0, 0, 0, 0.15);
2427
}
2528

2629
.carousel-arrow {
30+
position: absolute;
2731
z-index: 1;
2832
bottom: 23px;
2933
padding: 0;
@@ -36,6 +40,7 @@
3640

3741
&:before {
3842
font-size: 19px;
43+
display: block;
3944
margin-top: -2px;
4045
}
4146

@@ -47,12 +52,52 @@
4752

4853
.carousel-left-arrow {
4954
left: 23px;
50-
padding-top: 10px;
5155
}
5256

5357
.carousel-right-arrow {
5458
right: 23px;
55-
padding-top: 10px;
59+
}
60+
61+
.carousel-left-arrow {
62+
&.carousel-arrow-default {
63+
&:before {
64+
content: '<';
65+
padding-right: 2px;
66+
}
67+
}
68+
}
69+
70+
.carousel-right-arrow {
71+
&.carousel-arrow-default {
72+
&:before {
73+
content: '>';
74+
padding-left: 2px;
75+
}
76+
}
77+
}
78+
79+
.carousel-top-arrow {
80+
top: 53px;
81+
}
82+
83+
.carousel-bottom-arrow {
84+
bottom: 53px;
85+
}
86+
87+
.carousel-top-arrow {
88+
&.carousel-arrow-default {
89+
&:before {
90+
content: '\1431';
91+
}
92+
}
93+
}
94+
95+
.carousel-bottom-arrow {
96+
&.carousel-arrow-default {
97+
&:before {
98+
content: '\142F';
99+
}
100+
}
56101
}
57102

58103
.carousel-track {
@@ -67,6 +112,7 @@
67112
transition: opacity 0.5s ease-in-out;
68113

69114
& > * {
115+
display: block;
70116
white-space: normal;
71117
}
72118
&.carousel-slide-loading {

src/controls/arrow.js

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import React, { Component } from 'react';
22
import PropTypes from 'prop-types';
3-
import DefaultUpArrow from '../images/arrow-up.svg';
4-
import DefaultDownArrow from '../images/arrow-down.svg';
5-
import DefaultLeftArrow from '../images/arrow-left.svg';
6-
import DefaultRightArrow from '../images/arrow-right.svg';
73

84
/**
95
* Renders an arrow component used to transition from right-to-left or left-to-right through the carousel slides.
@@ -25,11 +21,7 @@ export default class Arrow extends Component {
2521
right: PropTypes.node.isRequired,
2622
className: PropTypes.string
2723
})
28-
]),
29-
upArrowImage: PropTypes.node,
30-
downArrowImage: PropTypes.node,
31-
leftArrowImage: PropTypes.node,
32-
rightArrowImage: PropTypes.node
24+
])
3325
};
3426
}
3527

@@ -43,7 +35,7 @@ export default class Arrow extends Component {
4335
}
4436

4537
render() {
46-
const { prevSlide, nextSlide, direction, arrows, upArrowImage, downArrowImage, leftArrowImage, rightArrowImage } = this.props;
38+
const { prevSlide, nextSlide, direction, arrows } = this.props;
4739
let arrowComponent = null;
4840
let buttonClass = 'carousel-arrow-default';
4941

@@ -59,10 +51,6 @@ export default class Arrow extends Component {
5951
onClick={ ['top', 'left'].includes(direction) ? prevSlide : nextSlide }
6052
className={ `carousel-arrow carousel-${direction}-arrow ${buttonClass}` }>
6153
{ arrowComponent }
62-
{ direction === 'top' && (upArrowImage || <DefaultUpArrow/>)}
63-
{ direction === 'bottom' && (downArrowImage || <DefaultDownArrow/>)}
64-
{ direction === 'left' && (leftArrowImage || <DefaultLeftArrow/>)}
65-
{ direction === 'right' && (rightArrowImage || <DefaultRightArrow/>)}
6654
</button>
6755
);
6856
}

src/images/arrow-down.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/images/arrow-left.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/images/arrow-right.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/images/arrow-up.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/index.js

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,7 @@ export default class Carousel extends Component {
8080
}),
8181
dir: PropTypes.oneOf(['ltr', 'rtl']),
8282
isVertical: PropTypes.bool,
83-
verticalArrowPadding: PropTypes.number,
84-
upArrowImage: PropTypes.node,
85-
downArrowImage: PropTypes.node,
86-
leftArrowImage: PropTypes.node,
87-
rightArrowImage: PropTypes.node
83+
verticalArrowPadding: PropTypes.number
8884
};
8985
}
9086

@@ -408,7 +404,7 @@ export default class Carousel extends Component {
408404
* @returns {Array} Controls to be rendered with the carousel.
409405
*/
410406
getControls() {
411-
const { arrows, dots, controls, isVertical, upArrowImage, downArrowImage, leftArrowImage, rightArrowImage } = this.props;
407+
const { arrows, dots, controls, isVertical } = this.props;
412408
let arr = controls.slice(0);
413409

414410
if (dots) {
@@ -417,8 +413,8 @@ export default class Carousel extends Component {
417413

418414
if (arrows) {
419415
arr = arr.concat([
420-
{ component: Arrow, props: { ...isVertical ? { direction: 'top', upArrowImage } : { direction: 'left', leftArrowImage } } },
421-
{ component: Arrow, props: { ...isVertical ? { direction: 'bottom', downArrowImage } : { direction: 'right', rightArrowImage } } }
416+
{ ...isVertical ? { component: Arrow, props: { direction: 'top' } } : { component: Arrow, props: { direction: 'left' } } },
417+
{ ...isVertical ? { component: Arrow, props: { direction: 'bottom' } } : { component: Arrow, props: { direction: 'right' } } }
422418
]);
423419
}
424420

@@ -474,7 +470,7 @@ export default class Carousel extends Component {
474470
arrowOffset -= this.props.verticalArrowPadding;
475471
}
476472

477-
const arrowStyle = { ...isVertical && { transform: `translateY(${ arrowOffset }px)` } };
473+
const arrowStyle = { ...isVertical && { ...!arrows ? { transform: `translateY(${ arrowOffset }px)` } : { paddingRight: '50px' } } };
478474

479475
return (
480476
<div className={ classes } style={ containerStyle } ref={ c => { this._containerRef = c; } }>
@@ -509,7 +505,7 @@ export default class Carousel extends Component {
509505
{ this.renderSlides() }
510506
</ul>
511507
</div>
512-
<div style={{ ...arrowStyle }}>
508+
<div className='control-div' style={{ ...arrowStyle }}>
513509
{
514510
controls.filter(Control => {
515511
return Control.position !== 'top';

src/stories/CustomArrow.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import React from 'react';
2+
import PropTypes from 'prop-types';
3+
4+
const CustomArrow = ({ nextSlide, prevSlide, overrideArrowStyle = {}, direction, infinite, numSlides, selectedIndex, customImage }) => {
5+
const isTopOrLeft = ['top', 'left'].includes(direction);
6+
const hasNext = () => {
7+
return infinite || (isTopOrLeft ? selectedIndex > 0 : selectedIndex < numSlides - 1);
8+
}
9+
10+
const hasNextSlide = hasNext();
11+
return (
12+
<button disabled={ !hasNextSlide } onClick={ isTopOrLeft ? prevSlide : nextSlide } style={{ ...overrideArrowStyle, opacity: !hasNextSlide ? 0.5 : 1 }}>
13+
{customImage}
14+
</button>
15+
);
16+
};
17+
18+
CustomArrow.propTypes = {
19+
prevSlide: PropTypes.func,
20+
nextSlide: PropTypes.func,
21+
visible: PropTypes.bool,
22+
overrideArrowStyle: PropTypes.object,
23+
triggerNextSlide: PropTypes.number,
24+
direction: PropTypes.string,
25+
infinite: PropTypes.bool,
26+
numSlides: PropTypes.number,
27+
selectedIndex: PropTypes.number,
28+
customImage: PropTypes.node
29+
};
30+
31+
export default CustomArrow;

src/stories/index.stories.js

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

1010
require('../carousel.less');
1111

@@ -73,21 +73,27 @@ export const verticalInfiniteWithCellPadding = () =>
7373
{ imgElements }
7474
</Carousel>;
7575

76-
export const verticalNonInfiniteWithCellPadding = () =>
76+
export const verticalNonInfiniteWithCellPaddingWithDefaultArrows = () =>
7777
<Carousel height='450px' width='450px' cellPadding={ 5 } infinite={ false } arrows={ true }
78-
dots={ false } isVertical={ true } >
78+
dots={ false } isVertical={ true } >
7979
{ imgElements }
8080
</Carousel>;
8181

82-
export const verticalNonInfiniteWithCellPaddingWithCustomArrows = () =>
83-
<Carousel height='450px' width='450px' cellPadding={ 5 } infinite={ false } arrows={ true }
84-
dots={ false } isVertical={ true } upArrowImage={ <UpImage/> } downArrowImage={ <DownImage/> } >
85-
{ imgElements }
82+
export const verticalNonInfiniteButtonsWithCellPaddingWithDefaultArrows = () =>
83+
<Carousel height='200px' width='200px' cellPadding={ 5 } infinite={ false } arrows={ true }
84+
dots={ false } isVertical={ true } >
85+
{ testButtons }
8686
</Carousel>;
8787

88-
export const verticalNonInfiniteButtonsWithCellPadding = () =>
89-
<Carousel height='450px' width='450px' cellPadding={ 5 } infinite={ false } arrows={ true }
90-
dots={ false } isVertical={ true } verticalArrowPadding={ 30 } >
88+
export const verticalNonInfiniteButtonsWithCellPaddingWithCustomArrows = () =>
89+
<Carousel height='450px' width='450px' cellPadding={ 5 } infinite={ false } arrows={ false }
90+
dots={ false } isVertical={ true } verticalArrowPadding={ 30 } controls={ [{
91+
component: CustomArrow,
92+
props: { direction: 'top', overrideArrowStyle: { border: 'none', background: 'none' }, customImage: <UpArrow/> }
93+
}, {
94+
component: CustomArrow,
95+
props: { direction: 'bottom', overrideArrowStyle: { border: 'none', background: 'none' }, customImage: <DownArrow/> }
96+
}] }>
9197
{ testButtons }
9298
</Carousel>;
9399

test/images/test-down-arrow.svg

Lines changed: 1 addition & 1 deletion
Loading

0 commit comments

Comments
 (0)