CarouselArrow.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /* eslint-disable jsx-a11y/click-events-have-key-events */
  2. /* eslint-disable jsx-a11y/no-static-element-interactions */
  3. import React, { ReactNode } from "react";
  4. import cls from 'classnames';
  5. import { cssClasses } from '@douyinfe/semi-foundation/carousel/constants';
  6. import { CarouselArrowProps } from "./interface";
  7. import { IconChevronLeft, IconChevronRight } from "@douyinfe/semi-icons";
  8. import { get } from 'lodash';
  9. class CarouselArrow extends React.PureComponent<CarouselArrowProps> {
  10. renderLeftIcon = () => {
  11. return get(this.props, 'arrowProps.leftArrow.children', <IconChevronLeft aria-label="Previous index" size="inherit"/>);
  12. }
  13. renderRightIcon = () => {
  14. return get(this.props, 'arrowProps.rightArrow.children', <IconChevronRight aria-label="Next index" size="inherit"/>);
  15. }
  16. render(): ReactNode {
  17. const { type, theme, prev, next } = this.props;
  18. const classNames = cls( {
  19. [cssClasses.CAROUSEL_ARROW]: true,
  20. [`${cssClasses.CAROUSEL_ARROW}-${theme}`]: theme,
  21. [`${cssClasses.CAROUSEL_ARROW}-hover`]: type === 'hover',
  22. });
  23. const leftClassNames = cls( {
  24. [`${cssClasses.CAROUSEL_ARROW}-prev`]: true,
  25. [`${cssClasses.CAROUSEL_ARROW}-${theme}`]: theme,
  26. });
  27. const rightClassNames = cls( {
  28. [`${cssClasses.CAROUSEL_ARROW}-next`]: true,
  29. [`${cssClasses.CAROUSEL_ARROW}-${theme}`]: theme,
  30. });
  31. return (
  32. <div className={classNames}>
  33. <div
  34. // role='button'
  35. className={leftClassNames}
  36. onClick={prev}
  37. {...get(this.props, 'arrowProps.leftArrow.props')}
  38. x-semi-prop="arrowProps.leftArrow.children"
  39. >
  40. {this.renderLeftIcon()}
  41. </div>
  42. <div
  43. // role='button'
  44. // tabIndex={0}
  45. className={rightClassNames}
  46. onClick={next}
  47. {...get(this.props, 'arrowProps.rightArrow.props')}
  48. x-semi-prop="arrowProps.rightArrow.children"
  49. >
  50. {this.renderRightIcon()}
  51. </div>
  52. </div>
  53. );
  54. }
  55. }
  56. export default CarouselArrow;