@@ -36,8 +36,66 @@ class ContentSlider extends Component {
3636 const {
3737 children, theme, autoStart, duration, id, containerStyle,
3838 slidesToShow, framePadding, withoutControls, vertical, cellSpacing,
39- cellAlign, wrapAround, heightMode, arrowTheme,
39+ cellAlign, wrapAround, heightMode, arrowTheme, hideSliderDots, themeName,
40+ arrowLeftImage, arrowRightImage,
4041 } = this . props ;
42+ const renderControls = {
43+ renderCenterLeftControls : ( { previousSlide } ) => (
44+ < a
45+ onClick = { previousSlide }
46+ onKeyPress = { previousSlide }
47+ role = "button"
48+ tabIndex = { 0 }
49+ className = { theme . controlLeft }
50+ >
51+ { arrowRightImage && < img src = { arrowRightImage . fields . file . url } alt = "Slider left arrow" /> }
52+ { ! arrowRightImage && ( arrowTheme === 'Gray' ? < GrayArrowNext /> : < WhiteArrowNext /> ) }
53+ </ a >
54+ ) ,
55+ renderCenterRightControls : ( { nextSlide } ) => (
56+ < a
57+ onClick = { nextSlide }
58+ onKeyPress = { nextSlide }
59+ role = "button"
60+ tabIndex = { 0 }
61+ className = { theme . controlRight }
62+ >
63+ { arrowLeftImage && < img src = { arrowLeftImage . fields . file . url } alt = "Slider right arrow" /> }
64+ { ! arrowLeftImage && ( arrowTheme === 'Gray' ? < GrayArrowPrev /> : < WhiteArrowPrev /> ) }
65+ </ a >
66+ ) ,
67+ } ;
68+ if ( hideSliderDots ) {
69+ renderControls . renderBottomCenterControls = ( ) => null ;
70+ }
71+ if ( themeName === 'Controls Bottom Right' ) {
72+ renderControls . renderCenterLeftControls = ( ) => null ;
73+ renderControls . renderCenterRightControls = ( ) => null ;
74+ renderControls . renderBottomRightControls = ( { previousSlide, nextSlide } ) => (
75+ < div className = { theme . bottomRightControls } >
76+ < a
77+ onClick = { previousSlide }
78+ onKeyPress = { previousSlide }
79+ role = "button"
80+ tabIndex = { 0 }
81+ className = { theme . controlLeft }
82+ >
83+ { arrowLeftImage && < img src = { arrowLeftImage . fields . file . url } alt = "Slider left arrow" /> }
84+ { ! arrowLeftImage && ( arrowTheme === 'Gray' ? < GrayArrowPrev /> : < WhiteArrowPrev /> ) }
85+ </ a >
86+ < a
87+ onClick = { nextSlide }
88+ onKeyPress = { nextSlide }
89+ role = "button"
90+ tabIndex = { 0 }
91+ className = { theme . controlRight }
92+ >
93+ { arrowRightImage && < img src = { arrowRightImage . fields . file . url } alt = "Slider right arrow" /> }
94+ { ! arrowRightImage && ( arrowTheme === 'Gray' ? < GrayArrowNext /> : < WhiteArrowNext /> ) }
95+ </ a >
96+ </ div >
97+ ) ;
98+ }
4199
42100 return (
43101 < div
@@ -59,28 +117,7 @@ class ContentSlider extends Component {
59117 vertical = { vertical }
60118 cellSpacing = { cellSpacing }
61119 wrapAround = { wrapAround }
62- renderCenterLeftControls = { ( { previousSlide } ) => (
63- < a
64- onClick = { previousSlide }
65- onKeyPress = { previousSlide }
66- role = "button"
67- tabIndex = { 0 }
68- className = { theme . controlLeft }
69- >
70- { arrowTheme === 'Gray' ? < GrayArrowPrev /> : < WhiteArrowPrev /> }
71- </ a >
72- ) }
73- renderCenterRightControls = { ( { nextSlide } ) => (
74- < a
75- onClick = { nextSlide }
76- onKeyPress = { nextSlide }
77- role = "button"
78- tabIndex = { 0 }
79- className = { theme . controlRight }
80- >
81- { arrowTheme === 'Gray' ? < GrayArrowNext /> : < WhiteArrowNext /> }
82- </ a >
83- ) }
120+ { ...renderControls }
84121 >
85122 { children }
86123 </ CarouselInject >
@@ -103,21 +140,18 @@ ContentSlider.defaultProps = {
103140 wrapAround : true ,
104141 heightMode : 'max' ,
105142 arrowTheme : 'Gray' ,
143+ hideSliderDots : false ,
144+ themeName : 'Default' ,
145+ arrowLeftImage : null ,
146+ arrowRightImage : null ,
106147} ;
107148
108149ContentSlider . propTypes = {
109150 id : PT . string . isRequired ,
110151 children : PT . node . isRequired ,
111152 autoStart : PT . bool ,
112153 duration : PT . number ,
113- theme : PT . shape ( {
114- container : PT . string ,
115- content : PT . string ,
116- controlLeft : PT . string ,
117- controlRight : PT . string ,
118- multiContent : PT . any ,
119- singleContent : PT . any ,
120- } ) ,
154+ theme : PT . shape ( ) ,
121155 containerStyle : PT . shape ( ) ,
122156 slidesToShow : PT . number ,
123157 framePadding : PT . string ,
@@ -128,6 +162,10 @@ ContentSlider.propTypes = {
128162 wrapAround : PT . bool ,
129163 heightMode : PT . string ,
130164 arrowTheme : PT . string ,
165+ hideSliderDots : PT . bool ,
166+ themeName : PT . string ,
167+ arrowLeftImage : PT . shape ( ) ,
168+ arrowRightImage : PT . shape ( ) ,
131169} ;
132170
133171export default themr ( 'Contentful-Slider' , defaultTheme ) ( ContentSlider ) ;
0 commit comments