import PropTypes from 'prop-types'
import classNames from 'classnames'
import CardMedia from '../card-media/card-media.component'
import SliderDot from '../slider-dot/slider-dot.component'
import { useSpringCarousel } from 'react-spring-carousel-js'
import useStyles from './card-media-container.style'
const CardMediaContainer = (props) => {
const { media, className } = props
const [activeSlideIndex, setActiveSlideIndex] = useState(0)
const {
carouselFragment,
useListenToCustomEvent,
slideToItem,
getIsDragging,
} = useSpringCarousel({
initialActiveItem: 0,
items: media.map((item, i) => ({
id: i,
renderItem: (
<CardMedia
key={item.url}
isActive={activeSlideIndex === i}
// getIsDragging={() => getIsDragging()}
media={item}
/>
)
}))
})
const dragging = getIsDragging()
const classes = useStyles(props)
const getClasses = useMemo(() => {
const cardMediaContainerClasses = [classes.baseCardMediaSlider]
return classNames(cardMediaContainerClasses, { [className]: !!className })
}, [className, classes.baseCardMediaSlider])
const handleOnClick = (_, index) => slideToItem(index)
useListenToCustomEvent('onSlideStartChange', ({ nextItem }) => setActiveSlideIndex(nextItem))
if (!media) return
return (
<div className={getClasses}>
<div>{carouselFragment}</div>
<div className={classes.container}>
<div className={classes.dots}>
{media.length > 1 && media.map((_, i) => <SliderDot
key={i}
className={classes.dot}
index={i}
isActive={activeSlideIndex === i}
onClick={handleOnClick}
/>)}
</div>
</div>
</div>
)
}
CardMediaContainer.defaultProps = {
className: '',
media: []
}
CardMediaContainer.propTypes = {
className: PropTypes.string,
media: PropTypes.arrayOf(PropTypes.shape({}))
}
export default CardMediaContainer