1 | import React from 'react';
|
2 | import PropTypes from 'prop-types';
|
3 | import classNames from 'classnames';
|
4 | import { mapToCssModules } from './utils';
|
5 |
|
6 | function CarouselControl(props) {
|
7 | const {
|
8 | direction,
|
9 | onClickHandler,
|
10 | cssModule,
|
11 | directionText,
|
12 | className,
|
13 | ...attributes
|
14 | } = props;
|
15 |
|
16 | const anchorClasses = mapToCssModules(
|
17 | classNames(className, `carousel-control-${direction}`),
|
18 | cssModule,
|
19 | );
|
20 |
|
21 | const iconClasses = mapToCssModules(
|
22 | classNames(`carousel-control-${direction}-icon`),
|
23 | cssModule,
|
24 | );
|
25 |
|
26 | const screenReaderClasses = mapToCssModules(
|
27 | classNames('visually-hidden'),
|
28 | cssModule,
|
29 | );
|
30 |
|
31 | return (
|
32 |
|
33 |
|
34 |
|
35 |
|
36 | <a
|
37 | {...attributes}
|
38 | className={anchorClasses}
|
39 | style={{ cursor: 'pointer' }}
|
40 | role="button"
|
41 | tabIndex="0"
|
42 | onClick={(e) => {
|
43 | e.preventDefault();
|
44 | onClickHandler();
|
45 | }}
|
46 | >
|
47 | <span className={iconClasses} aria-hidden="true" />
|
48 | <span className={screenReaderClasses}>{directionText || direction}</span>
|
49 | </a>
|
50 | );
|
51 | }
|
52 |
|
53 | CarouselControl.propTypes = {
|
54 |
|
55 | direction: PropTypes.oneOf(['prev', 'next']).isRequired,
|
56 |
|
57 | onClickHandler: PropTypes.func.isRequired,
|
58 |
|
59 | cssModule: PropTypes.object,
|
60 |
|
61 | directionText: PropTypes.string,
|
62 |
|
63 | className: PropTypes.string,
|
64 | };
|
65 |
|
66 | export default CarouselControl;
|