import React, { useEffect, useState } from 'react' import PropTypes from 'prop-types' import { animated, useTransition } from 'react-spring' import { defaultProps } from '../../constants' import { SlideIndicator as StyledSlideIndicator } from './SlideIndicator.css' const AnimatedSlideIndicator = animated(StyledSlideIndicator) export default function SlideIndicator({ currentSlide, inFront, slideIndicatorTimeout, totalSlides, }) { const [isVisible, setVisible] = useState(true) useEffect(() => { if (slideIndicatorTimeout !== null) { const timer = setTimeout(() => { setVisible(false) }, slideIndicatorTimeout) return () => clearTimeout(timer) } }, []) const transitions = useTransition(isVisible, null, { from: { opacity: 1 }, enter: { opacity: 1 }, leave: { opacity: 0 }, }) if (totalSlides < 2) { return null } return ( <> {transitions.map( ({ item, key, props }) => item && ( <AnimatedSlideIndicator key={key} inFront={inFront} style={{ ...props }}> {currentSlide + 1}/{totalSlides} </AnimatedSlideIndicator> ) )} </> ) } SlideIndicator.propTypes = { currentSlide: PropTypes.number.isRequired, inFront: PropTypes.bool, slideIndicatorTimeout: PropTypes.number, totalSlides: PropTypes.number.isRequired, } SlideIndicator.defaultProps = { inFront: true, slideIndicatorTimeout: defaultProps.slideIndicatorTimeout, }