/* eslint-disable jsx-a11y/no-static-element-interactions */ /* eslint-disable jsx-a11y/click-events-have-key-events */ import React, { ReactNode } from "react"; import cls from 'classnames'; import PropTypes from 'prop-types'; import { cssClasses, strings } from '@douyinfe/semi-foundation/carousel/constants'; import { CarouselIndicatorProps } from "./interface"; import getDataAttr from "@douyinfe/semi-foundation/utils/getDataAttr"; class CarouselIndicator extends React.PureComponent { static propTypes = { activeKey: PropTypes.number, className: PropTypes.string, position: PropTypes.oneOf(strings.POSITION_MAP), size: PropTypes.oneOf(strings.SIZE), style: PropTypes.object, theme: PropTypes.oneOf(strings.THEME_MAP), total: PropTypes.number, onIndicatorChange: PropTypes.func, type: PropTypes.oneOf(strings.TYPE_MAP), trigger: PropTypes.oneOf(strings.TRIGGER) }; onIndicatorChange = (activeIndex: number): void => { this.props.onIndicatorChange(activeIndex); }; handleIndicatorClick = (activeIndex: number): void => { const { trigger } = this.props; if (trigger === 'click'){ this.onIndicatorChange(activeIndex); } } handleIndicatorHover = (activeIndex: number): void => { const { trigger } = this.props; if (trigger === 'hover'){ this.onIndicatorChange(activeIndex); } } renderIndicatorContent(): ReactNode { const { total, theme, size, activeIndex } = this.props; const indicatorContent: ReactNode[] = []; for (let i = 0; i < total; i++) { indicatorContent.push( this.handleIndicatorClick(i)} onMouseEnter={()=>this.handleIndicatorHover(i)} > ); } return indicatorContent; } render(): ReactNode { const { type, size, theme, style, className, position, ...restProps } = this.props; const classNames = cls(className, { [cssClasses.CAROUSEL_INDICATOR]: true, [`${cssClasses.CAROUSEL_INDICATOR}-${type}`]: type, [`${cssClasses.CAROUSEL_INDICATOR}-${position}`]: position, }); const indicatorContent = this.renderIndicatorContent(); return (
{indicatorContent}
); } } export default CarouselIndicator;